Доброго времени суток!
Да я знаю что не первый и не второй и даже не 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) шли только через второго провайдера, а весь остальной трафик балансировался как обычно?!