Jump to content
  • 32

Multiple WAN routing policy


Kozlov_Sergey

Question

Предлагаю добавить возможность в маршрутизаторах Keenetic использовать маршрут по умолчанию на несколько интерфейсов (для 2 подключений интернета одновременно).

  • Thanks 1
Link to comment
Share on other sites

Recommended Posts

  • 0

Понятно, я думал на  Ultra или Giga 2. На  Ultra2 c gw у меня работало. Хочу с работы Giga 2 принести попробовать заработает или нет.

Link to comment
Share on other sites

  • 0
В ‎22‎/‎08‎/‎2016 в 17:18, r13 сказал:

Вопреки этой рекомендации так не завелось, писал об этом выше, с указанием gateway все завелось :D

 

В ‎22‎/‎08‎/‎2016 в 17:24, dexter сказал:

Понятно, я думал на  Ultra или Giga 2. На  Ultra2 c gw у меня работало. Хочу с работы Giga 2 принести попробовать заработает или нет.

Так у кого работает, может поделитесь уже описанием-скриптами толково, так и глядишь, все срастется и вдруг добавят фичку в прошивку ? И всем хорошо будет?

Link to comment
Share on other sites

  • 0

@Roman_Petrov Со скриптами пока не понятно откуда брать гейт резервного канала

поэтому у меня пока просто хардкод, благо ip меняются редко.

Link to comment
Share on other sites

  • 0

Протестировал на крайней 2.06 на Giga 2. Результат следующий.

С ноутбука из локалки пакеты ходят только через один шлюз. Другой доступен и пингуется.

С самого кинетика пакеты ходят с разных интерфейсов, но в основном через один и тот же.

При этом бук через один шлюз, а кинетик в основном через другой. Вес шлюзов был 50/50. 

Ultra 2 это же отрабатывала штатно.

Link to comment
Share on other sites

  • 0

Пример

Есть "ifconfig" и "ip" с помощью этих команд и берете нужные вам переменные (а именно зная имена интерфейсов без разницы ppp0 он или ppp1).
У меня один pppoe другой pptp => подняты два ppp интерфейса (два проводных провайдера) => ppp0 и ppp1. Теперь сами варианты

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:хх.хх.хх.204  P-t-P:хх.хх.хх.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:1346 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1120 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:622677 (608.0 KiB)  TX bytes:122811 (119.9 KiB)

ppp1      Link encap:Point-to-Point Protocol  
          inet addr:yy.yy.yy.52  P-t-P:yy.yy.yy.25  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1015 (1015.0 B)  TX bytes:1635 (1.5 KiB)

/ # ndmq -p 'show interface PPTP0' -P address

yy.yy.yy.52

/ # ndmq -p 'show interface PPPoE0' -P address
xx.xx.xx.204

...
R_nexthop=`ip route | awk '/nexthop via / {print $1}'`
if [ "$R_nexthop" == "" ]; then
 echo "No router nexthop"
 inet_addr1=`ifconfig ppp0 | grep -i "inet addr:" | cut -f2 -d: | cut -f1 -d " "`
 inet_addr2=`ifconfig ppp1 | grep -i "inet addr:" | cut -f2 -d: | cut -f1 -d " "`
 PtoP_1=`ifconfig ppp0 | awk '/P-t-P/ {print $3}' | cut -f2 -d: | cut -f1 -d " "`
 PtoP_2=`ifconfig ppp1 | awk '/P-t-P/ {print $3}' | cut -f2 -d: | cut -f1 -d " "`
 ...
 route del default
 ip ro flush cache
 ip ro add default scope global nexthop via $inet_addr1 dev ppp0 weight 10 nexthop via $inet_addr2 dev ppp1 weight 10
 echo "Yes router nexthop"
 exit;
fi
...

...

Для прямого аналогично только имена интерфейсов другие. В Cron проверка.

 

Link to comment
Share on other sites

  • 0

Я не понимаю: неужели так трудно запрограммировать?

 

Читаешь конфигурацию и bind (привязку сокета) делаешь на нужном интерфейсе и отправляешь данные.

Данные идут в нужном направлении через нужное соединение (соответствующее интерфейсу) к следующему маршрутизатору.

По моему рисунку выше, только нужно учесть, что пакет может прийти по круговому маршруту опять к отправляющему маршрутизатору, путём анализа ip адреса источника или чего-то подобного (уже это делали (есть реализация в допотопных ZyXEL 600 серии)).

 

Это же элементарно на C++ том же сделать.

Вобщем две недели на программирование и тестирование вполне достаточно. Особенно учитывая, что программируется это меньше чем за один рабочий день.

Edited by Kozlov_Sergey
Дополнил и исправил часть текста
Link to comment
Share on other sites

  • 0
15 часов назад, r13 сказал:

@vasek00 с прямым не так, нужен гейт, а его в выводе ifconfig нету

Какая разница, прямой он или "кривой". Смотрим конфиг и пробуем брать от туда  (на данном интерфейсе должен быть маршрут по default ) :
 

interface FastEthernet0/Vlan3
    description VLAN3
    security-level public
    ip address хх.хх.хх.52 255.255.224.0
    ip dhcp client hostname My-Keen
    ip dhcp client dns-routes
    ip dhcp client name-servers
    ip mtu 1500
    ip global 700
    up
!
interface FastEthernet0/3
    name 3
    role inet for FastEthernet0/Vlan3
    switchport mode access
    switchport access vlan 3
    up
!

...

!
ip route default хх.хх.хх.1 FastEthernet0/Vlan3

...

или их будет два, так как два интерфейса для провайдера
 

...

ip route default хх.хх.хх.1 FastEthernet0/Vlan3
ip route default 10.10.10.1 ISP

...

Взять можно прочитав конфиг и взять из него нужные переменные
 

/ # ndmq -p "show running-config" -P message | awk '/^ip route default/'
ip route default хх.хх.хх.1 FastEthernet0/Vlan3
ip route default 10.10.10.1 ISP
/ #

Прогнать по "FastEthernet0/Vlan3" и по "ISP", как душе угодно через awk c grep

/ # ndmq -p "show running-config" -P message | awk '/^ip route default/ {print $4}'
хх.хх.хх.1
10.10.10.1
/ # 

 

Edited by vasek00
Link to comment
Share on other sites

  • 0

@vasek00 нет его в running-config, есть только роут с основного подключения следующего содержания:

ip route xx.xx.xx.xx ISP auto

Link to comment
Share on other sites

  • 0

Имеем два провода от провайдера подключенные к WAN и LAN порту со стат IP адресами для выхода в интернет, в конфиге записи :
 

# ndmq -p "show running-config" -P message
...
!interface FastEthernet0/Vlan2
    name ISP
    description "Broadband connection"
...

   ip address 10.10.10.100 255.255.255.0
...

   up

!interface FastEthernet0/Vlan3
    description VLAN3
 ...
    ip address хх.хх.хх.52 255.255.224.0
....
    up
!

...

!
ip route default хх.хх.хх.1 FastEthernet0/Vlan3
ip route default 10.10.10.1 ISP

...

по маршрутам, по умолчанию у кого приоритет выше там и default

/dev # ip ro | grep default
default via хх.хх.хх.1 dev eth2.3
/dev #

Ваш вид второго подключения, с первым понятно на WAN порту и ISP?

Link to comment
Share on other sites

  • 0

@vasek00 У меня 2 Dynamic IP  и ни одной записи вида ip route default в running-config нет,

Видимо в этом разница, для static шлюз указывается в настройках

Edited by r13
Link to comment
Share on other sites

  • 0

Не покажите выполнение двух команд при одинаковом приоритете, не выключая интерфейс

route del default

ip ro

через некоторое время еще раз

route del default

ip ro

через некоторое время еще раз

route del default

ip ro

Link to comment
Share on other sites

  • 0

@vasek00

Было:

default via 95.220.192.1 dev eth2.4
10.1.30.0/24 dev br1  proto kernel  scope link  src 10.1.30.1
10.2.30.0/24 dev br2  proto kernel  scope link  src 10.2.30.1

после удаления через некоторое время проставился роут с 2го интерфейса:

 ip ro
default via 178.140.196.1 dev eth3
10.1.30.0/24 dev br1  proto kernel  scope link  src 10.1.30.1
10.2.30.0/24 dev br2  proto kernel  scope link  src 10.2.30.1

После следующего удаления снова перещелкнулось на 1й интерфейс:

ip ro
default via 95.220.192.1 dev eth2.4
10.1.30.0/24 dev br1  proto kernel  scope link  src 10.1.30.1
10.2.30.0/24 dev br2  proto kernel  scope link  src 10.2.30.1

 

Link to comment
Share on other sites

  • 0
1 час назад, r13 сказал:

@vasek00

Было:


default via 95.220.192.1 dev eth2.4

после удаления через некоторое время проставился роут с 2го интерфейса:


default via 178.140.196.1 dev eth3

После следующего удаления снова перещелкнулось на 1й интерфейс:


default via 95.220.192.1 dev eth2.4

 

Ну и определите тогда путем удаления маршрута (командой удаления) и определением из "ip ro" нужного шлюза или если не ждать некоторое время то дополнительно команда

# ip route get 8.8.8.8

покажет интерфейс и его шлюз при текущем default.

ip route | awk '/default/ {print $4}' # тек интерфейс например eth2.4
if [текущ_шлюз=eth2.4] then
ip route | awk '/defualt/ {print $3}' # тек IP шлюза
ip route get 4.4.4.4 # получить тек.IP шлюза
ip route del default
ip route add default dev eth3
ip route get 8.8.8.8 # получить тек.IP шлюз для eth3 
else
...
fi

 

Или смотреть переменные при текущем маршруте default в /opt/etc/ndm/wan.d при запуске в данном каталоге скрипта.

Edited by vasek00
  • Thanks 1
Link to comment
Share on other sites

  • 0

Нарисовал себе такой скрипт,

Так как провайдеры передают свои DNS в таблице маршрутов, дергаю шлюз из этих записей

#!/opt/bin/sh

dev3_route=`ip route | awk '/77.37.251.33/ {print $3}'`#DNS провайдера на интерфесе eth3
dev2_4_route=`ip route | awk '/212.1.224.6/ {print $3}'`#DNS провайдера на интерфесе eth2.4
R_nexthop=`ip route | awk '/nexthop via / {print $1}'`

if  test "$R_nexthop" = '' && test "$dev3_route" != '' && test "$dev2_4_route" != '' ; then
 echo "Multiwan not running, setting up..."
 ip route del default
 ip ro add default scope global nexthop via $dev3_route dev eth3 weight 10 nexthop via $dev2_4_route dev eth2.4 weight 10
 ip ro flush cache
elif  test "$R_nexthop" != ''; then
 echo "Multiwan already active. Nothing to do."
else
 echo "There is no multiple connections active this time. Exiting."
fi

Теперь вопрос куда его лучше запихнуть? В wan.d?

Edited by r13
Link to comment
Share on other sites

  • 0

Для ДНС лучше жестко прописать свой маршрут на свой интерфейс, второе при пропадании одного из каналов роутер его поднимет и опять же настройки слетят (будет обычный default, который роутер восстановит согласно своих настроек) => вывод лучше в cron, только для быстроты его работы нужно минимально использовать команды - ip ro и первая проверка на наличие

test "$R_nexthop"

а уже потом все остальное. 

  • Thanks 1
Link to comment
Share on other sites

  • 0
В 02.08.2016 в 18:18, zyxmon сказал:

В Entware-3x собрали свежий вариант. Если что не так - маякните....

etc/iproute2/rt_tables не существует, какой-то др механизм создания таблиц?

что-то непонятное ls /etc/iproute2 не существует, хотя папка в ФС есть

Edited by Дмитрий
Link to comment
Share on other sites

  • 0
1 час назад, Дмитрий сказал:

etc/iproute2/rt_tables не существует, какой-то др механизм создания таблиц?

что-то непонятное ls /etc/iproute2 не существует, хотя папка в ФС есть

Прям по номеру создавайте и по номеру с ней работайте. Ни в какие файлы прописывать не надо.

Link to comment
Share on other sites

  • 0

Хорошая тема, но мне нужно немного другое.

При резервировании второе подключение соединено, как я понимаю, только оно в покое. Как бы пустить трафик с одной машины в локальной сети к серверу шаринга через второе подключение, то бишь 3G usb modem, а весь остальной трафик (youtube, торрент, веб серфинг и т.д.) через основное (проводное) подключение?

Интервал проверки в keenetic минимум 3 сек. Скорей всего потеря пакетов, при которой идут затыки телевидения и является этим интервалом (3 сек). Не шибко уверен и в интервал 1 секунду, что он как то исправит бесшовное (без потери пакетов) переключение на резервный 3G. Но ситуация пускать трафик шаринга постоянно без всякого переключения через 3G модем было б идеальным решением. Что для этого нужно установить, какие команды ввести и т.д.?

Роутер Ultra ii, прошивка v2.08(AAUX.0)A6

 

Link to comment
Share on other sites

  • 0

Еще раз проверил на K-II ( v2.06(AAFG.2)C1 ) маршрутизацию через "ip ro add default scope global nexthop", нашел не стыковку в выводах команд WEB и "ip ro", так как все ПО разработка Zyxel то возможно ли что данная не стыковка влиять на работу. В данном режиме активен канал ppp1 получился.

В cat ip_conntrack обнаружено, что только запросы на DNS сервер идут по каналу PPPoEo так как он описан в действующих маршрутах, а все остальные запросы идут на PPTP0 (он в global nexthop строке идет вторым.

Без имени-1.jpg

Без имени-2.jpg

Edited by vasek00
Link to comment
Share on other sites

  • 0
4 минуты назад, vasek00 сказал:

Ответил вам на ixbt со скринами

То что на скринах - трафик будет ходить всегда или только при переключении на нужный канал? Если только при переключении, то как сделать через entware на постоянной основе?

Link to comment
Share on other sites

  • 0

Все что на скринах трафик ходит по тем маршрутам которые есть в таблице, при пропадании его из таблице трафик ходить естественно не будет.

Link to comment
Share on other sites

  • 0
15 минут назад, vasek00 сказал:

Все что на скринах трафик ходит по тем маршрутам которые есть в таблице

Задал я хождение трафика через usb модемное подключение в статит. маршрутах - трафик ходит через него, но потери пакетов и пинг вместо 150-170мс вот такой:

Скрытый текст

ping srv2.utgard.tv
PING srv2.utgard.tv (149.202.240.42) 56(84) bytes of data.
64 bytes from 149.202.240.42: icmp_seq=1 ttl=51 time=729 ms
64 bytes from 149.202.240.42: icmp_seq=2 ttl=51 time=352 ms
64 bytes from 149.202.240.42: icmp_seq=3 ttl=51 time=372 ms
64 bytes from 149.202.240.42: icmp_seq=4 ttl=51 time=332 ms
64 bytes from 149.202.240.42: icmp_seq=5 ttl=51 time=352 ms
64 bytes from 149.202.240.42: icmp_seq=6 ttl=51 time=450 ms
64 bytes from 149.202.240.42: icmp_seq=7 ttl=51 time=428 ms
64 bytes from 149.202.240.42: icmp_seq=8 ttl=51 time=430 ms
64 bytes from 149.202.240.42: icmp_seq=9 ttl=51 time=371 ms
64 bytes from 149.202.240.42: icmp_seq=10 ttl=51 time=410 ms
64 bytes from 149.202.240.42: icmp_seq=11 ttl=51 time=448 ms
64 bytes from 149.202.240.42: icmp_seq=12 ttl=51 time=408 ms
64 bytes from 149.202.240.42: icmp_seq=13 ttl=51 time=410 ms
64 bytes from 149.202.240.42: icmp_seq=14 ttl=51 time=411 ms
64 bytes from 149.202.240.42: icmp_seq=15 ttl=51 time=431 ms
64 bytes from 149.202.240.42: icmp_seq=16 ttl=51 time=470 ms
^C
--- srv2.utgard.tv ping statistics ---
17 packets transmitted, 16 received, 5% packet loss, time 16001ms
rtt min/avg/max/mdev = 332.238/425.788/729.850/87.284 ms
 

Один адрес не прописывал, указал лишь подключение http://joxi.ru/LmG4nRNC9d3Y2l

Edited by blackride
Link to comment
Share on other sites

  • 0

Ping — утилита для проверки целостности и качества соединений в сетях. TCP - это протокол управления для передачи данных

Цитата

Механизм TCP предоставляет поток данных с предварительной установкой соединения, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета, гарантируя тем самым, в отличие от UDP, целостность передаваемых данных и уведомление отправителя о результатах передачи.

 

Не путайте ping и работу протокола.

Link to comment
Share on other sites

  • 0
1 час назад, vasek00 сказал:

Ответил вам на ixbt со скринами

Большое Вам Спасибо! Почему я сам не догадался пустить так трафик через модем?!)))
Хотя пинг и выходит временами вот такой:
 

Скрытый текст

64 bytes from 149.202.240.42: icmp_seq=359 ttl=51 time=408 ms
64 bytes from 149.202.240.42: icmp_seq=360 ttl=51 time=367 ms
64 bytes from 149.202.240.42: icmp_seq=361 ttl=51 time=687 ms
64 bytes from 149.202.240.42: icmp_seq=362 ttl=51 time=8527 ms
64 bytes from 149.202.240.42: icmp_seq=363 ttl=51 time=7521 ms
64 bytes from 149.202.240.42: icmp_seq=364 ttl=51 time=6531 ms
64 bytes from 149.202.240.42: icmp_seq=365 ttl=51 time=5545 ms
64 bytes from 149.202.240.42: icmp_seq=366 ttl=51 time=4539 ms
64 bytes from 149.202.240.42: icmp_seq=367 ttl=51 time=3567 ms
64 bytes from 149.202.240.42: icmp_seq=368 ttl=51 time=2582 ms
64 bytes from 149.202.240.42: icmp_seq=369 ttl=51 time=1612 ms
64 bytes from 149.202.240.42: icmp_seq=370 ttl=51 time=643 ms
64 bytes from 149.202.240.42: icmp_seq=371 ttl=51 time=562 ms
64 bytes from 149.202.240.42: icmp_seq=372 ttl=51 time=503 ms
 

Но ТВ показывает без сбоев, тьфу тьфу))
Даже не понадобилась entware

Один только вопрос, что то другое не может тратить трафик с 3G, если он постоянно находится в подключенном состоянии? Ну, кроме того что ключи получаю с шаринг сервера, когда смотрю ТВ.

Edited by blackride
Link to comment
Share on other sites

  • 0

Если вы все развернули на Zyxel (так как точно без знания схемы и ваших подключ. устройств в дом.сети) опять же все зависит от маршрута, если он на один сервер то естественно любые обновления или любые приложения будут брать данные из default а не с него. Когда же у вас пропадет основной канал, то система (которая как говориться из коробки) пере настроится на резервный канал и тогда он будет default (от 3G), а вы и не заметите как он им стал.

Edited by vasek00
Link to comment
Share on other sites

  • 0

Здравствуйте,

Вопрос, насколько критична для использования данной функции моя проблемка с постоянно переподключающемся резервным IPoe каналом? http://forum.keenetic.net/topic/722-----/

Кеш маршрутов чистится этим:

ip ro flush cache

Я так понимаю еще conntrack надо чистить?

Чем грозит если не чистить?

Link to comment
Share on other sites

  • 0

Добрый день,

 

Вот задумался о подключении 2-х провайдеров в паре (100+200=300).

Почитал данную тему, и не совсем понял текущую ситуацию по настройке балансировки двух активных WAN... Поясните пожалуйста:
1) Настроить можно, через OPKG?

2) Через UI такой функционал не планируется?

3) Может кто показать пошагово какие команды/скрипты писать?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...