Данная схема отслеживает новые соединения и равномерно распределяет их по каналам.Допустим есть 4 канала в интернет:
Linux Router ISP
|ppp0 10.0.0.1|-----|10.0.0.2|
|ppp1 10.0.0.3|-----|10.0.0.3|
|ppp2 10.0.0.5|-----|10.0.0.4|
|ppp3 10.0.0.7|-----|10.0.0.5|
Добавляем в файл /etc/iproute2/rt_tables таблицы:
108 sat2
109 sat3
110 sat4
Настраиваем маршруты (раскидываем трафик по таблицам в зависимости от nfmark):
ip rule add prio 50 fwmark 1 table sat2
ip rule add prio 51 fwmark 2 table sat3
ip rule add prio 52 fwmark 3 table sat4
ip route add default via 10.0.0.2 dev ppp0
ip rule add prio 210 from 10.0.0.3 table sat2
ip route add default via 10.0.0.4 dev ppp1 table sat2
ip rule add prio 211 from 10.0.0.5 table sat3
ip route add default via 10.0.0.6 dev ppp3 table sat3
ip rule add prio 212 from 10.0.0.7 table sat4
ip route add default via 10.0.0.8 dev ppp4 table sat4
Деление по таблицам осуществляется iptables:
iptables -t mangle -N NEW_OUT_CONN
# Выбираем новые сессии
iptables -t mangle -A PREROUTING -s 10.0.0.0/16 -m state --state NEW,RELATED -j NEW_OUT_CONN
# Восстанавливает значение nfmark из CONNMARK
iptables -t mangle -A PREROUTING -s 10.0.0.0/16 -j CONNMARK --restore-mark
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0
# Каждый четвертый пакет
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode nth --every 4 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1
# Каждый третий пакет
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode nth --every 3 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2
# Каждый второй пакет
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode nth --every 2 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 3
Модуль CONNMARK отслеживает метки для всех пакетов сессии, это значит, что если пометить пакет в сессии, то все пакеты принадлежащие ей будут иметь эту же метку. --restore-mark копирует метку в метку пакета 'nfmark'. По которой пакет попадает в соответствующую таблицу, и подвергается маршрутизации.
-m statistic --mode nth --every N соответствует каждому N-нному пакету.
URL: http://litec.ru/page.php?id=11
Обсуждается: http://www.opennet.dev/tips/info/2236.shtml