Доброго времени суток, товарищи!
Есть задача сделать шлюз на базе Ubuntu с 2-мя провайдерами. Отказоустойчивость, балансировка.
Сервер:
uname -a
Linux Gateway 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Для проверки работоспособности провайдера использовал скрипт
https://habrahabr.ru/post/54748/Балансирую грубо 50\50, с помощью iproute2 используя 2 шлюза по-умолчанию с одинаковым приоритетом:
default
nexthop via $ISP1_GW dev eth1 weight 1
nexthop via $ISP2_GW dev eth2 weight 1
10.8.0.0/23 dev tun0 proto kernel scope link src 10.8.0.1
$ISP1_NET dev eth1 proto kernel scope link src $ISP1_MY_IP
$ISP2_NET dev eth2 proto kernel scope link src $ISP2_MY_IP
$LOCAL_NET dev eth0 proto kernel scope link src $LOCAL_IP
Для балансировки http использую Squid3 acl random:
acl halftraf random 0.5
tcp_outgoing_address $ISP1_MY_IP halftraf
tcp_outgoing_address $ISP2_MY_IP
После экспериментов с traceroute обнаружилось, что кэш iproute2 всегда пустой. Гугл огорчил меня вот этой презентацией
http://vger.kernel.org/~davem/columbia2012.pdf, рассказывающей почему из ядра выше 3.6 удалена поддержка ip route cache.
Теоретически я могу создать табличку маршрутизации для банк-клиентов, куда запихаю все IP банков и буду менять её в случае падения одного из провайдеров, но хотелось бы более красивого решения.
Возможно есть какие-либо альтернативы?
Заранее благодарен всем ответившим.