LINUX.ORG.RU
ФорумAdmin

Разный трафик по разным аплинкам

 ,


1

2

Добрый день! Не могу сообразить как отправлять разные типы трафика по разным аплинкам.

Например весь udp слать в одного провайдера, а остальное в другое.

# iptables -A OUTPUT -p udp -j MARK --set-mark 100
# ip route sh
default via 192.168.110.129 dev eth1
192.168.210.0/24 dev eth0  proto kernel  scope link  src 192.168.210.6 
192.168.110.128/26 dev eth1  proto kernel  scope link  src 192.168.110.135
# ip ru ls
0:	from all lookup local 
32763:	from all fwmark 0x64 lookup gw-d 
32764:	from 192.168.110.135 lookup gw-a 
32765:	from 192.168.210.6 lookup gw-d
# ip ro sh table gw-d
default via 192.168.210.1 dev eth0

# ip ro sh table gw-a
default via 192.168.110.129 dev eth1
# ip a sh dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether ******* brd ff:ff:ff:ff:ff:ff
    inet 192.168.210.6/24 brd 192.168.210.255 scope global eth0
       valid_lft forever preferred_lft forever
# ip a sh dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether ********* brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.135/26 brd 192.168.110.191 scope global eth1
       valid_lft forever preferred_lft forever

Не смотря на то, что трафик маркируется меткой 100, он всё равно отправляется по дефолту на 192.168.110.129


Мне в своё время помогло уберания дефолт роута из главной таблицы маршрутизации, а также добавление direct-маршрута в доп.таблицы (маршрут на 192.168.210.1 в gw-d и на 192.168.110.129 в gw-a)

И да, ты маркируешь трафик в таблице filter. Ку-ку, решение о роутинге уже давным-давно принято. Маркируй в mangle

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Как ты проверил что он точно маркируется ?

Попробуй CONNMARK.

И добавь в gw-a и gw-d

 ip_network_interface dev eth[01]  scope link 

pyatak123
()
Ответ на: комментарий от Pinkbyte

сделал, теперь с сервера output вообще не уходит.

# ping 8.8.8.8
connect: Сеть недоступна
# ip ro sh ta gw-a
default via 192.168.110.129 dev eth1 
192.168.110.128/26 dev eth1  scope link  src 192.168.110.135 
# ip ro sh ta gw-d
default via 192.168.210.1 dev eth0 
192.168.210.0/24 dev eth0  scope link  src 192.168.210.6

quntm
() автор топика
Ответ на: комментарий от pyatak123

Сорьки. думал это часть -j ROUTE от iptables.

заработало так:

iptables -A OUTPUT -t mangle -p icmp -j MARK --set-mark 100
iptables -A POSTROUTING -t nat -p icmp -j SNAT --to-source 192.168.110.135

from all fwmark 0x64 lookup gw-a 
from 192.168.210.6 lookup gw-d
from 192.168.110.135 lookup gw-a

# ip ro
default via 192.168.210.1 dev eth0 
192.168.210.0/24 dev eth0  scope link  src 192.168.210.6 
192.168.110.128/26 dev eth1  scope link  src 192.168.110.135

# ip ro sh table gw-a
default via 192.168.110.129 dev eth1 
192.168.110.128/26 dev eth1  scope link  src 192.168.110.135 

# ip ro sh table gw-d
default via 192.168.210.1 dev eth0 
192.168.210.0/24 dev eth0  scope link  src 192.168.210.6

quntm
() автор топика

Для транзитного трафика проблемы нет.

А для локального трафика все совсем не просто. Чтоб оно работало, нужно чтобы приложение в явном виде выполняло bind() на нужный адрес или устанавливало метку на сокет.

vel ★★★★★
()
Ответ на: комментарий от vel

Почему проблема , вот у меня апач на всех интерфейсах висит.
Пришел ему запрос, он на него отвечает , смотрим в rules , идем на нужную таблицу маршрутизации , SNAT и все.

pyatak123
()
Ответ на: комментарий от pyatak123

апач отвечает на запрос - ip адрес с которого нужно отвечать известен и проблем нет, как и для транзитного трафика.

А я говорю об локальном исходящем трафике. Там есть проблема, которую только средствами ip ro & ip ru не всегда можно решить.

Если приложение не сделало bind() на определенный ip адрес или не установило метку или ToS через setsockopt(), то ядро выбирает адрес источника по таблицам маршрутизации и потом его через «ip ru» уже не перебить. Возможно используя цепочку nat/output можно исправить эту ситуацию, но это IMHO кривое решение.

vel ★★★★★
()
Ответ на: комментарий от pyatak123

Что-то всё сломалось после ребута. проверяю что всё работает через один аплинк:

# traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.210.1  0.220 ms  0.243 ms  0.234 ms
 2  192.168.105.101  20.163 ms  20.188 ms  20.224 ms
 3  192.168.66.131  1.653 ms  1.718 ms  2.050 ms
 4  193.106.112.21  8.025 ms  7.841 ms  8.005 ms
 5  216.239.47.145  8.984 ms 216.239.47.149  8.520 ms 216.239.47.151  8.927 ms
 6  8.8.8.8  9.259 ms  8.713 ms  9.580 ms
добавляю правила:
 # ip ru a fwmark 1 tab 1077
 # ip ro sh tab 1077
default via 192.168.110.129 dev eth1
# iptables -A OUTPUT -t mangle -d 8.8.8.8 -j MARK --set-mark 0x1
# iptables -A POSTROUTING -t nat -d 8.8.8.8 -j SNAT --to-source 192.168.110.135
# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.110.129 (192.168.110.129)  1.771 ms  2.202 ms  4.950 ms
 2  * * *
 3  * * *
 4  * * *

и не работает. причём tcpdump ловит пакеты в обоих направлениях

# tcpdump -i eth1 icmp and host 8.8.8.8 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
17:18:29.578352 IP 192.168.110.135 > 8.8.8.8: ICMP echo request, id 4077, seq 1, length 64
17:18:29.586762 IP 8.8.8.8 > 192.168.110.135: ICMP echo reply, id 4077, seq 1, length 64

адреса реальные, просто законспирированные

куда глядеть?

quntm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.