У меня используется статическая схема балансировки нагрузки на 4 канала на линуксе. В правилах iptables в таблице mangle мы маркируем пакеты 4-мя метками и, в зависимости от значения метки роутим адрес в один из 4-х внешних линков. Данная конструкция работает надежно, но показала свою малоэффективность. Сейчас разрабатываю динамическую балансировку, основанную на vpn-туннелях. Адреса в сети раздаются dhcp-сервером, затем юзер устанавливает vpn-туннель. На стороне сервера выполняются скрипты /etc/ppp/ip-up /etc/ppp/ip-down В этих скриптах мы прописываем правила iptables (таблицы NAT), в которой мы роутим на выбранный заранее интерфейс и правила шейпинга для данного туннеля (tc add dev $1...) Ну, с шейпингом тут все ясно, а вот как правильно создавать маршрут для вновь созданного канала? Если мы для канала укажем явно в стартовом скрипте route add default gw $ip_eth1 как на это среагирует система? Думаю, что это не правильно. Допустим, мы опишем все 4 таблицы маршрутизации, как это предложено в http://lartc.org/howto/lartc.rpdb.multiple-links.html , а дальше опять маркировать пакеты? Может, есть соображения? Кстати, в указанной ссылке автор утверждает, что балансировка может быть реализована следующим образом: Instead of choosing one of the two providers as your default route, you now set up the default route to be a multipath route. In the default kernel this will balance routes over the two providers. It is done as follows (once more building on the example in the section on split-access): ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \ nexthop via $P2 dev $IF2 weight 1 This will balance the routes over both providers. The weight parameters can be tweaked to favor one provider over the other. Тогда в таблице nat правил iptables какой адрес мы будем указывать в качестве параметра SNAT ? iptables -t nat -A POSTROUTING -s $VPN_NET -d $EXT_NET -j SNAT --to-source $P1($P2) ???
|