В наличие
имеется канал интернет 1 через провайдера 1 и канал интернета 2 через
провайдера 2. Оборудование роутер на базе Ralink с DD-WRT (роутер 1) и ADSL модем в режиме роутера (роутер 2), который подключен в LAN
порт роутера 1 и имеет IP адрес "192.168.130.100". Провайдер 1 для подключения выдал нам – статический IP адрес "172.16.у.2", шлюз "172.16.у.1", DNS сервера, вид подключения PPTP, кабель включен в WAN порт роутера 1. Провайдер 2 для подключения –вид
подключения PPPoE.
Клиенты подключены к роутеру 1 как по LAN кабелю
так и по Wi-fi.
Задача. Использовать оба канала доступа в интернет одновременно, т.е. организовать балансировку каналов. Для выполнение данной задачи воспользуемся командой:
ip ro add default scope global nexthop
via [IP_адрес_1] dev [имя_интерфейса_1] weight [коэф_1] nexthop
via [IP_адрес_2] dev [имя_интерфейса_2] weight [коэф_2]
где IP_адрес_1 – адрес от
провайдера 1, после подключения по PPTP он будет в NVRAM переменной “wan_pptp_get_ip”; IP_адрес_2 – адрес от
провайдера 2, точнее сам шлюз 192.168.130.100; имя_интерфейса_1 – имя интерфейса по доступу к шлюзу провайдера 1, в
данном случае это “ppp0”; имя_интерфейса_2 – имя интерфейса по доступу к шлюзу провайдера 2, в
данном случае это “br0”; коэф_1/коэф_2 – это весовой коэффициент, отношение прохождения пакетов через данные
интерфейсы.
Произведем
настройку данного режима ручным способом, а потом напишем скрипт и поместим его
в “Startup”, т.е. в автозапуск для роутера 1, который
будет организует нам данную балансировку каналов.
root@My-Fan:/tmp/var/tmp# ifconfig
br0
Link encap:Ethernet HWaddr 00:0C:43:x:x:x
inet addr:192.168.130.1 Bcast:192.168.130.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
ppp0
Link encap:Point-to-Point Protocol
inet addr:172.18.x.2 P-t-P:193.x.x.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING MULTICAST MTU:1400 Metric:1
vlan2
Link encap:Ethernet HWaddr х:х:х:х:х:х
inet addr:172.16.у.2 Bcast:172.16.у.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
root@My-Fan:/tmp/var/tmp# route del default
root@My-Fan:/tmp/var/tmp# ip ro flush cache
root@My-Fan:/tmp/var/tmp# ip ro add default scope global nexthop
via 172.18.x.2
dev ppp0 weight 5 nexthop
via
192.168.130.100 dev br0 weight 10
root@My-Fan:/tmp/var/tmp# ip ro
default
nexthop via 172.18.х.2
dev ppp0 weight 5
nexthop via 192.168.130.100 dev br0 weight 10
...
root@My-Fan:/tmp/var/tmp#
|
Обозначения
:
br0 – имя интерфейса в который входят “ra0”
(wi-fi) и “vlan1” (порты LAN1-LAN4) роутера 1; vlan2 – имя
интерфейса в который входит WAN порт роутера 1.
Примечание,
так как у нас два провайдера, то мы решаем использовать DNS сервера от второго,
как более надежного и стабильного у нас, для этого необходимо указать маршрут
доступа до данных серверов, через конкретный шлюз и через интерфейс:
route add -host
[IP_адрес_DNS2_1]/32 gw 192.168.130.100
dev br0
route add -host
[IP_адрес_DNS2_2]/32 gw 192.168.130.100
dev br0
root@My-Fan:/tmp/var/tmp#
ip ro
default
nexthop
via 172.18.x.2 dev ppp0 weight 5
nexthop via 192.168.130.100 dev br0 weight 10
84.у.у.4 via 192.168.130.100 dev br0
84.у.у.2 via 192.168.130.100 dev br0
…
root@My-Fan:/tmp/var/tmp# |
Можно
обойтись без дополнительных маршрутов для DNS серверов если воспользоваться публичными DNS серверами. После проверки
работоспособности напишем скрипт и поместим его в
автозапуск роутера 1, используем для этого режим WEB интерфейс нашего роутера 1 http://192.168.130.1/Diagnostics.asp
введем текст который ниже и нажмем потом кнопку “Save Startup”. Добавим в данный скрипт отслеживание
состояние канала на провайдера 1 через
интерфейс “ppp0” используя команду "ping" на интерфейс "ppp0", при его пропадании устанавливает
маршрут по умолчанию “default” на шлюз “192.168.130.100” интерфейса "br0"
route add -host 84.y.y.4/32 gw
192.168.130.100 dev br0
route add -host 84.y.y.2/32 gw
192.168.130.100 dev br0
echo -e "#!/bin/sh
WANup_ppp0=\`ifconfig | awk '/ppp0/
{print \$1}'\`
R_nexthop=\`ip ro | awk '/nexthop via
192.168/ {print \$1}'\`
if [ \"\$WANup_ppp0\" =
\"ppp0\" ]; then
if [ \"\$R_nexthop\" ==
\"\" ]; then
route del default; ip ro flush
cache
ip ro add default scope global
nexthop \
via $(/usr/sbin/nvram get wan_pptp_get_ip)
dev ppp0 weight 5\
nexthop via $(/usr/sbin/nvram get
lan_gateway) dev br0 weight 10
gpio enable 9; gpio enable 8;
gpio disable 8; exit;
else
Count_ping=\`ping -c2 -I ppp0
194.186.36.167 | awk '/packets received/ {print \$4}'\`
if [ \"\$Count_ping\" =
0 ]; then
route del default; ip ro
flush cache
ip ro add default via
$(/usr/sbin/nvram get lan_gateway) dev br0
gpio enable 8; gpio enable
9; gpio disable 9
fi
fi
exit;
else
route del default; ip ro flush cache
ip
ro add default via $(/usr/sbin/nvram get lan_gateway) dev br0
gpio enable 9; gpio enable 8;
pppd
fi
exit;
">/tmp/var/tmp/route_nexthop.sh
chmod 755 /tmp/var/tmp/route_nexthop.sh
Примечание: команды "gpio enable" и "gpio disable" можно убрать, так как это индикация светодиодов на передней панели для Ralink, адрес локального шлюза 192.168.130.100 при настройке роутера 1 через интерфейс WEB в http://192.168.130.1/index.asp в секции “Network Setup” поле
“Gateway” будет помещено в NVRAM с именем
“lan_gateway”. Для проверки можно воспользоваться
командой:
root@My-Fan:/tmp/var/tmp# nvram get
lan_gateway
192.168.130.100
root@My-Fan:/tmp/var/tmp# |
Осталось
только запускать данный скрипт “route_nexthop.sh” один раз например в 15мин, через сервис “cron” роутера 1.
На локальных
клиентах, которые подключены к роутеру 1 была следующая настройка, стат IP адрес из сетки 192.168.130.2-254, шлюз
192.168.130.1, DNS
сервера имели адреса 84.y.y.4 и 84.y.y.2 это было прописано в ручную, но не кто не мешает использовать получение клиентами IP адреса по DHCP, только для этого нужно включить и настроить опции http://192.168.130.1/Services.asp служба "DNSMasq" и http://192.168.130.1/index.asp служба "Network Address Server Settings" а именно поставить галочку для использования "Use DNSMasq for DHCP" и "Use DNSMasq for DNS".
Замечание по данной
реализации, при использовании данного метода “ip ro add default scope global nexthop” при доступе к интернет
страницам все будет в порядке, при скачке торрентов так же будет все в порядке,
но при закачке с серверов например http://depositfiles.com/ будут происходить разрывы, так как основное
назначение данной реализации – балансировка на каналах, т.е. определенное время
доступ на канале 1, а потом его смена на канал 2. Данная реализация была опробована на прошивках у которых была версия Linux 2.6.хх-svn17200.
Комментариев нет:
Отправить комментарий