Никак не выходит настроить ECMP. Я или не понимаю алгоритм, или что-то не так делаю.
Подскажите пожалуйста?Есть хост X. От него до хоста Y висит два ipip tunnel'а.
Со стороны хоста Х это выглядит так:
tun0 Link encap:IPIP Tunnel
inet addr:10.10.254.5 P-t-P:10.10.254.6
tun1 Link encap:IPIP Tunnel
inet addr:10.10.254.9 P-t-P:10.10.254.10Вторая сторона тоннеля с хоста X (т.е. адреса 254.6 и 254.10) пингуются, и все хорошо.
Теперь представим что за хостом Y есть подсеть 192.168.0.0/24.
Пишу на хосте Х: ip route add 192.168.0.0/24 via 10.10.254.6 - хосты в 192.168.0.0 пингуются.
Меняю на via 254.10 - тоже пингуется. Все хорошо. Оба тоннеля в порядке.Теперь удаляем все маршруты на 192.168.0.0 и делаем так:
ip route add 192.168.0.0/24 nexthop via 10.10.254.10 nexthop via 10.10.254.6
В ip route sh наблюдаю:
192.168.0.0/24
nexthop via 10.10.254.10 dev tun1 weight 1
nexthop via 10.10.254.6 dev tun0 weight 1И судя по всем документациям которые я нашел - должен включится Equal cost multi-path и траффик с хоста Х на сеть 192.168.0.0/0 должен ходить поочередно о обоим тоннелям.
Делаю пинг - хрен. Идет только по одному. Вижу в tcpdump.
Ядро скомпилено с поддержкой multipath. Пигую разные хосты - все равно идет по одному тоннелю. Ничего другого на сервере не настроено, ничего мешать не может.ЧЯДНТ?
это нормально. скорее всего ecmp распихивает трафик по интерфейсам
на основе некоего хэша (src,dst,sport,dport и пр.), так что каждая
сессия будет идти только по одному физическому интерфейсу и соответственно
для сессии суммарную скорость для двух интерфейсов никак не получится.
А в общем трафик достаточно равномерно размазывается по интерфейсам.
> это нормально. скорее всего ecmp распихивает трафик по интерфейсам
> на основе некоего хэша (src,dst,sport,dport и пр.), так что каждая
> сессия будет идти только по одному физическому интерфейсу и соответственно
> для сессии суммарную скорость для двух интерфейсов никак не получится.
> А в общем трафик достаточно равномерно размазывается по интерфейсам.Я думаю, что ваше суждение будет правильно для "сессионных" протоколов, например ТСР. А вот пинг должен распределяться по направлениям с учетом весов.
У меня Equal cost multipath работает на FreeBSD.
>> это нормально. скорее всего ecmp распихивает трафик по интерфейсам
>> на основе некоего хэша (src,dst,sport,dport и пр.), так что каждая
>> сессия будет идти только по одному физическому интерфейсу и соответственно
>> для сессии суммарную скорость для двух интерфейсов никак не получится.
>> А в общем трафик достаточно равномерно размазывается по интерфейсам.
> Я думаю, что ваше суждение будет правильно для "сессионных" протоколов, например ТСР.
> А вот пинг должен распределяться по направлениям с учетом весов.
> У меня Equal cost multipath работает на FreeBSD.даже спорить не буду, можно самому попробовать или посмотреть код в ядре.
и да - это совсем не freebsd.
>[оверквотинг удален]
> nexthop via 10.10.254.10 dev tun1 weight 1
> nexthop via 10.10.254.6 dev tun0 weight 1
> И судя по всем документациям которые я нашел - должен включится Equal
> cost multi-path и траффик с хоста Х на сеть 192.168.0.0/0 должен
> ходить поочередно о обоим тоннелям.
> Делаю пинг - хрен. Идет только по одному. Вижу в tcpdump.
> Ядро скомпилено с поддержкой multipath. Пигую разные хосты - все равно идет
> по одному тоннелю. Ничего другого на сервере не настроено, ничего мешать
> не может.
> ЧЯДНТ?А после того как прописали
ip route add 192.168.0.0/24 nexthop via 10.10.254.10 nexthop via 10.10.254.6
выполнили команду
ip route flush
если нет то плохо Вы читали доки.
> А после того как прописали
> ip route add 192.168.0.0/24 nexthop via 10.10.254.10 nexthop via 10.10.254.6
> выполнили команду
> ip route flush
> если нет то плохо Вы читали доки.Не обижайтесь, но Вы её тоже не очень читали.
Выполнение
ip route flush
приведет к _удалению_ всех маршрутов (с практически 100% необходимостью перезагрузки)Вохможно, Вы имели ввиду
ip route flush cache
>[оверквотинг удален]
>> ip route add 192.168.0.0/24 nexthop via 10.10.254.10 nexthop via 10.10.254.6
>> выполнили команду
>> ip route flush
>> если нет то плохо Вы читали доки.
> Не обижайтесь, но Вы её тоже не очень читали.
> Выполнение
> ip route flush
> приведет к _удалению_ всех маршрутов (с практически 100% необходимостью перезагрузки)
> Вохможно, Вы имели ввиду
> ip route flush cacheИменно это и имел ввиду, писал по памяти, а делал такое года 4 назад.
я бы еще подкрутил /proc/sys/net/ipv4/route/secret_interval
Да, пинги действительно должны распределятся по обоим каналам.
Я это лично видел в подобной конфигурации, тоже на линуксе.И нет - сброс кеша я не делал. Уже не следующий день тоже нашел это в доке :)
Судя по всему дело в нем.
Проверю - отпишусь.Всем спасибо!
> Да, пинги действительно должны распределятся по обоим каналам.
> Я это лично видел в подобной конфигурации, тоже на линуксе.
> И нет - сброс кеша я не делал. Уже не следующий день
> тоже нашел это в доке :)
> Судя по всему дело в нем.
> Проверю - отпишусь.
> Всем спасибо!Ну как успехи?