LINUX.ORG.RU

Избранные сообщения Uranus

2 провайдера, балансировка...и т.д.

Форум — Admin

Доброго времени суток!

Да я знаю что не первый и не второй и даже не 10 кто создаёт подобную тему, так что заранее прошу прощения за свой плач Ярославны!

Для начала исходные данные, имеется два провайдера, к обоим подключение через PPPoE.
Подключения делаются на роутере, за роутером локальная сеть, на данный момент для тестов подключен только один компьютер.
На роутере никаких серверов имеющих доступ снаружи нет, более того доступ снаружи вообще заблокирован (ну по крайней мере сейчас).
Решил сделать балансировку исходящего трафика, что от роутера, что из локалки.

Для понимания чего и куда лепить использовал много ссылок, но в основном код заимствовал с двух мест тут и тут.(с маркировкой пакетов, структура цепочек взята из второй ссылки, нужное место можно найти по тексту «tprov1»)

rt_tables

100 static
101 prov1
102 prov2


ip rule

0: from all lookup local
1: from all lookup static
10: from all fwmark 0x2 lookup prov1
11: from all fwmark 0x4 lookup prov2
32766: from all lookup main
32767: from all lookup default


ip route

default nexthop via 109.195.208.69 dev ppp0 weight 1 nexthop via 212.57.162.84 dev ppp1 weight 1
109.195.208.69 dev ppp0 proto kernel scope link src 109.195.211.10
192.168.0.0/24 dev enp4s0f0 proto kernel scope link src 192.168.0.1
212.57.162.84 dev ppp1 proto kernel scope link src 178.46.164.246


ip route show table static

109.195.208.69 dev ppp0 scope link
192.168.0.0/24 dev enp4s0f0 scope link
212.57.162.84 dev ppp1 scope link


ip route show table prov1

default via 109.195.208.69 dev ppp0


ip route show table prov2

default via 212.57.162.84 dev ppp1


выбор провайдера

iptables -t mangle -N select_prov
iptables -t mangle -A select_prov -j CONNMARK --set-mark 2
iptables -t mangle -A select_prov -m statistic --mode nth --every 2 --packet 0 -j RETURN
iptables -t mangle -A select_prov -j CONNMARK --set-mark 4
iptables -t mangle -A select_prov -m statistic --mode nth --every 2 --packet 1 -j RETURN


сортировка соединений

iptables -t mangle -N sort_connect
iptables -t mangle -A sort_connect -o lo -j RETURN
iptables -t mangle -A sort_connect -o $loc_eth -j RETURN
iptables -t mangle -A sort_connect -m conntrack --ctstate NEW -j select_prov


трафик проверяем в...

iptables -t mangle -I OUTPUT -j sort_connect
iptables -t mangle -I FORWARD -j sort_connect


В общем то всё работает, но я не пойму как принудительно заставить какой-либо трафик идти через определённого провайдера, скажем чтобы все запросы HTTP (или какой-то определённый IP) шли только через второго провайдера, а весь остальной трафик балансировался как обычно?!

 ,

Uranus
()