multiwan: Подключение к резервному провайдеру

В статье описана настройка OpenWRT для подключения резервного канала на случай падения основного. В качестве примера взята реальная конфигурация одной организации, где в качестве резерва используется интернет-подключение через маршрутизатор соседней (дружественной) организации. Адрес IP провайдера заменён на адрес из пула "адресов для документирования"

Условия и определения

Основной аплинк - подключение по кабелю ethernet к провайдеру с назначенным статическим адресом IP.

Резервный аплинк - подключение по кабелю ethernet к маршрутизатору соседней организации, адрес выделяется по DHCP из интранетовской сети.

Основное условие: используемое в сетях обоих организаций адресное пространство не должно пересекаться, то есть подсеть 192.168.1.0/24 не может использоваться одновременно в обоих организациях. В нашем примере резервный аплинк использует адресное пространство 192.168.20.0/25, а маршрутизатор использует подсеть 192.168.1.0/24, поэтому изменять адрес и маску для интерфейса LAN нужды нет.

Настройка маршрутизатора

В качестве маршрутизатора был выбран NetGear WNDR3800, при выборе решающим было: большая оперативная память (128 Мб), большая ёмкость флешки (64 Мб), поддерживается как в DD-WRT, так и в OpenWRT.

Поскольку фирменная прошивка не позволяет использовать двух аплинков, решено было попробовать OpenWRT с пакетом multiwan, а в случае неудачи - dd-wrt с собственным скриптом.

Установка OpenWRT

Установка тривиальна: качаем прошивку (взята прошивка из trunk, поскольку стабильная прошивка Backfire, как пишет народ, "из коробки" не поддерживает адаптеры wifi), затем заливаем её в маршрутизатор стандартной процедурой Firmware upgrade.

После ожидания и ручного перезапуска маршрутизатора подключаемся к нему по telnet и задаём пароль, после чего telnet-демон будет автоматически выключен и включится sshd:

$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------
 
 
BusyBox v1.19.4 (2012-11-22 21:36:12 PST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
 
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 BARRIER BREAKER (Bleeding Edge, r34303)
 -----------------------------------------------------
  * 1/2 oz Galliano         Pour all ingredients into
  * 4 oz cold Coffee        an irish coffee mug filled
  * 1 1/2 oz Dark Rum       with crushed ice. Stir.
  * 2 tsp. Creme de Cacao
 -----------------------------------------------------
root@OpenWrt:/# passwd
Changing password for root
New password: 
Retype password:
Password for root changed by root
root@OpenWrt:/#

Подробнее см. Первый запуск.

Установка пакетов

Для удобства управления устанавливаем web-интерфейс LuCI:

root@OpenWrt:/# opkg update
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
Inflating http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/barrier_breaker.
root@OpenWrt:/# opkg install luci-ssl

Затем устанавливаем пакет luci-app-miltiwan (модуль управления multiwan для LuCI), при установке которого автоматически ставится также и нужный multiwan.

root@OpenWrt:/# opkg install luci-app-miltiwan

Настройка

Подключение к Основному аплинку

Настраивается тривиально: в LuCI на странице NetworkInterfacesWAN меняем протокол на Static address, подтверждаем и вписываем нужные значения в поля IPv4 address (адрес IP), IPv4 netmask (маска подсети), IPv4 gateway (шлюз по умолчанию), Use custom DNS servers (список серверов DNS провайдера, а лучше гугловские серверы). Поле IPv4 broadcast можно не заполнять. Не забудьте нажать Save & Apply.

В UCI нужно изменить файл /etc/config/network:

config interface 'wan'
        option ifname 'eth1'
        option proto 'static'
        option ipaddr '198.51.100.195'
        option netmask '255.255.255.128'
        option gateway '198.51.100.129'
        option dns '192.0.2.160 8.8.8.8 192.0.2.190'
и применить изменение:
/etc/init.d/network reload

Помимо провайдерских, имеет смысл указать какой-нибудь публичный сервер DNS, чтобы при падении одного канала ресолвер продолжал работать. В примере указан один из гугловских (8.8.8.8).

Создаём VLAN

Во-первых, нужно назначить один из портов LAN свободному VLAN (стандарта IEEE 802.1Q), при этом нужно знать, что * VLAN1 (системный интерфейс eth0.1) - это виртуальный интерфейс lan Свободны номера VLAN от второго до 4096, выбираем VLAN2.

Для удобства коммутации назначим в VLAN2 порт с подписью "Ethernet 1" (на лицевой стороне индикатор "1"): он расположен рядом с портом, подписанным "Internet" (соответствует интерфейсу WAN). В конфигурации управляемого коммутатора, который имеется в маршрутизаторе, порту "1" соответствует "Port 3" (см. NetGear WNDR3800).

Таким образом, нужно назначить порт 3 коммутатора в VLAN2.

  • В LuCI это можно сделать на странице SystemSwitch: в секции VLAN в строке "1" переключаем порт Port 3 в состояние off, добавляем новый VLAN с номером "2" и ставим у него порт Port 3 в состояние untagged, а порт Port 5 в состояние tagged. Нажимаем Save and Apply
  • В uci - в файле /etc/config/network, в котором нужно исправить одну секцию config switch_vlan и создать вторую:

вместо

config switch_vlan
        option device 'rtl8366s'
        option vlan '1'
        option ports '0 1 2 3 5t'
нужно записать
config switch_vlan
        option device 'rtl8366s'
        option vlan '1'
        option ports '0 1 2 5t'
config switch_vlan
        option device 'rtl8366s'
        option vlan '2'
        option ports '3 5t'
После внесения изменений в /etc/config/network нужно не забыть применить новую конфигурацию сети:
/etc/init.d/network restart

Настраиваем multiwan

Сопоставление интерфейсов

Во-первых, нужно сопоставить физическому интерфейсу виртуальный, c которым будет работать multiwan.

В LuCI это делается на странице NetworkInterfaces: Нажимаем кнопку Add New Interface, указываем имя WWAN, физический иинтерфейс "VLAN interface: eth0.2", в строке Protocol of the new interface выбираем DHCP Client и нажимаем Submit.

В UCI для того же нужно в файле /etc/config/network добавить строки:

config interface 'wwan'
        option ifname 'eth0.2'
        option proto 'dhcp'

Настройка межсетевого экрана

Во-вторых, нужно задать параметры файрвола для этого нового интерфейса: в LuCI на странице NetworkInterfacesWWANFirewall settings нужно выбрать зону wan.

Настройка параметров multiwan

Во-третьих, нужно задать параметры multiwan для этого нового интерфейса. Но, оказывается, в конфигурации multiwan уже есть два интерфейса: WAN и WAN2. Придётся удалить ненужный WAN2 (он не ассоциирован ни с одним системным интерфейсом) и создать WWAN.

При использовании LuCI - на странице NetworkMulti-WAN удалите WAN2 и создайте WWAN. Их параметры должны совпадать, за исключением:

  • Failover Traffic Destination, который должен указывать на другой интерфейс, участвующий в multiwan: у WAN нужно вписать wwan, а у WWAN - wan;
  • в качестве DNS для каждого лучше указать сервер DNS соответствующего провайдера, либо разные публичные серверы (обязательно надёжные, например, гугловские);
  • параметр Health Monitor ICMP Host(s) должен указывать на разные надёжные серверы, использовать для этого параметра серверы соответствующего провайдера - плохая идея: интернета может не быть, а сеть провайдера при этом доступна (для примера я указал DNS-серверы гугля).

Затем назначим политику multiwan:

  • Default Route: wan

Основной аплинк будет использоваться для всего трафика, резервный только в случае его падения.

Осталось удалить ненужные правила из Multi-WAN Traffic Rules и включить multiwan:

  • Enable: v

Применяем изменения: Save & Apply, ждём завершения и проверяем работу.

При использовании UCI нужно изменить файл /etc/config/multiwan следующим образом:

config multiwan 'config'               
        option enabled '1'
        option default_route 'wan'
                                          
config interface 'wan'                    
        option weight '10'                
        option health_interval '10'       
        option timeout '3'                
        option health_fail_retries '3'    
        option health_recovery_retries '5'
        option dns 'auto'           
        option icmp_hosts '8.8.8.8'   
        option failover_to 'wwan'         
                                          
config interface 'wwan'                   
        option weight '10'                
        option health_interval '10'       
        option timeout '3'                
        option health_fail_retries '3'    
        option health_recovery_retries '5'
        option dns 'auto'                 
        option icmp_hosts '8.8.4.4'
        option failover_to 'wan'          
После изменения файла /etc/config/multiwan нужно перезапустить службу multiwan:
/etc/init.d/multiwan restart

Настраиваем dnsmask

До сих пор настройка касалась самого маршрутизатора, но нужно также настроить и доступ в интернет из локальной сети. При этом существенным является вопрос DNS. Если компьютеры в локальной сети настроены на внешние серверы DNS (например, на гугловские), у них сразу будет работать доступ в интернет. Если же используется сервер DHCP маршрутизатора, без дополнительной настройки получаем "странную" ситуацию: ping на адреса IP проходит, но (к примеру) браузер WEB собщает, что страницы всех сайтов недоступны. Ключевая проверка - не пингуются доменные имена. Это означает, что требуется настройка пакета DNSMASK.

В LuCI: NetworkDHCP and DNSGeneral settings. С разделе DNS forwardings нужно указать (все) серверы DNS обоих провайдеров, а также желательно указать пару публичных серверов DNS. (Адрес IP каждого сервера указывается в отдельной строке.) Если указать серверы только одного провайдера, при падении канала к нему запросы DNS ресолвится не будут.

В UCI: в файле /etc/config/dhcp нужно в секцию config dnsmasq добавить строки list server …, пример:

config dnsmasq
	list server '8.8.8.8'
	list server '8.8.4.4'
	list server '192.0.2.160'
	list server '192.0.2.190'
...
После редактирования файла /etc/config/dhcp нужно применить изменения:
root@OpenWrt:~# /etc/init.d/dnsmasq reload

Теперь компьютеры в локальной сети могут выходить в интернет без проблем.

Back to top

ru/doc/howto/multiwan.failower.txt · Last modified: 2012/11/27 19:24 (external edit)