ru:doc:howto:multiwan.failower

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ru:doc:howto:multiwan.failower [2012/11/27 19:24] (current)
Line 1: Line 1:
 +====== multiwan: Подключение к резервному провайдеру ======
  
 +В статье описана настройка OpenWRT для подключения резервного канала на случай падения основного. В качестве примера взята реальная конфигурация одной организации,​ где в качестве резерва используется интернет-подключение через маршрутизатор соседней (дружественной) организации. Адрес IP провайдера заменён на адрес из пула "​адресов для документирования"​
 +
 +===== Условия и определения =====
 +
 + ​**Основной аплинк** - подключение по кабелю ethernet к провайдеру с назначенным статическим адресом IP.
 +
 + ​**Резервный аплинк** - подключение по кабелю ethernet к маршрутизатору соседней организации,​ адрес выделяется по DHCP из интранетовской сети.
 +
 + ​**Основное условие**:​ используемое в сетях обоих организаций адресное пространство не должно пересекаться,​ то есть подсеть 192.168.1.0/​24 не может использоваться одновременно в обоих организациях. В нашем примере резервный аплинк использует адресное пространство 192.168.20.0/​25,​ а маршрутизатор использует подсеть 192.168.1.0/​24,​ поэтому изменять адрес и маску для интерфейса LAN нужды нет.
 +
 +===== Настройка маршрутизатора =====
 +
 +В качестве маршрутизатора был выбран [[toh:​netgear:​wndr3800|NetGear WNDR3800]], при выборе решающим было: большая оперативная память (128 Мб), большая ёмкость флешки (64 Мб), поддерживается как в [[http://​dd-wrt.net|DD-WRT]],​ так и в OpenWRT.
 +
 +Поскольку фирменная прошивка не позволяет использовать двух аплинков,​ решено было попробовать OpenWRT с пакетом multiwan, а в случае неудачи - dd-wrt с собственным скриптом.
 +
 +==== Установка OpenWRT ====
 +Установка тривиальна:​ качаем прошивку (взята прошивка из trunk, поскольку стабильная прошивка //​Backfire//,​ как пишет народ, "из коробки"​ не поддерживает адаптеры wifi), затем заливаем её в маршрутизатор стандартной процедурой Firmware upgrade.
 +
 +После ожидания и ручного перезапуска маршрутизатора подключаемся к нему по telnet и задаём пароль,​ после чего telnet-демон будет автоматически выключен и включится sshd:
 +<code bash>
 +$ 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:/# ​
 +</​code>​
 +
 +Подробнее см. [[ru:​doc:​howto:​firstlogin|Первый запуск]].
 +
 +==== Установка пакетов ====
 +
 +Для удобства управления устанавливаем web-интерфейс [[doc:​howto:​luci.essentials|LuCI]]:​
 +<code bash>
 +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
 +</​code>​
 +...
 +
 +Затем устанавливаем пакет **luci-app-miltiwan** (модуль управления multiwan для LuCI), при установке которого автоматически ставится также и нужный [[ru:​doc:​uci:​multiwan]].
 +<code bash>
 +root@OpenWrt:/#​ opkg install luci-app-miltiwan
 +</​code>​
 +
 +==== Настройка ====
 +
 +=== Подключение к Основному аплинку ===
 +
 +Настраивается тривиально:​ в 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:​
 +<​code>​
 +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'​
 +</​code>​
 +и применить изменение:​
 +<code bash>/​etc/​init.d/​network reload</​code>​
 +
 +Помимо провайдерских,​ имеет смысл указать какой-нибудь публичный сервер 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" (см. [[toh:​netgear:​wndr3800|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''​ и создать вторую:​
 +вместо
 +<​code>​
 +config switch_vlan
 +        option device '​rtl8366s'​
 +        option vlan '​1'​
 +        option ports '0 1 2 3 5t'
 +</​code>​
 +нужно записать
 +<​code>​
 +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'
 +</​code>​
 +После внесения изменений в ''/​etc/​config/​network''​ нужно не забыть применить новую конфигурацию сети:
 +<code bash>/​etc/​init.d/​network restart</​code>​
 +
 +=== Настраиваем 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''​ добавить строки:​
 +<​code>​
 +config interface '​wwan'​
 +        option ifname '​eth0.2'​
 +        option proto '​dhcp'​
 +</​code>​
 +
 +== Настройка межсетевого экрана ==
 +Во-вторых,​ нужно задать параметры файрвола для этого нового интерфейса:​ в 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''​ следующим образом:​
 +<​code>​
 +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' ​         ​
 +</​code>​
 +После изменения файла ''/​etc/​config/​multiwan''​ нужно перезапустить службу multiwan:
 +<​code>/​etc/​init.d/​multiwan restart</​code>​
 +
 +=== Настраиваем 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 ...'',​ пример:​
 +<​code>​
 +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'​
 +...
 +</​code>​
 +После редактирования файла ''/​etc/​config/​dhcp''​ нужно применить изменения:​
 +<code bash>
 +root@OpenWrt:​~#​ /​etc/​init.d/​dnsmasq reload
 +</​code>​
 +
 +Теперь компьютеры в локальной сети могут выходить в интернет без проблем.
ru/doc/howto/multiwan.failower.txt · Last modified: 2012/11/27 19:24 (external edit)