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 на странице Network → Interfaces → WAN меняем протокол на 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 это можно сделать на странице System →Switch: в секции 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 это делается на странице Network → Interfaces: Нажимаем кнопку 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 на странице Network → Interfaces → WWAN → Firewall settings нужно выбрать зону wan.
Настройка параметров multiwan
Во-третьих, нужно задать параметры multiwan для этого нового интерфейса. Но, оказывается, в конфигурации multiwan уже есть два интерфейса: WAN и WAN2. Придётся удалить ненужный WAN2 (он не ассоциирован ни с одним системным интерфейсом) и создать WWAN.
При использовании LuCI - на странице Network → Multi-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: Network → DHCP and DNS → General 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
Теперь компьютеры в локальной сети могут выходить в интернет без проблем.