http-трафик через второй (из двух) внешних каналов

Здесь можно задать вопросы не связанные с работой АСР. FreeBSD/Linux
Ответить
fjey
Сообщения: 99
Зарегистрирован: Сб дек 29, 2007 5:51 pm

http-трафик через второй (из двух) внешних каналов

Сообщение fjey »

Есть сервер abills+pptp под linux. Нужно направить http-трафик по второму (eth2) каналу.
Три интерфейса:
eth0 - локальная сеть, IP:192.168.0.2;
eth1 - ISP1, IP:82.207.101.26, GW: GW_eth1;
eth2 - ISP2, IP:192.168.1.101, GW: GW_eth2.

Посоветовали сделать так:
Пометить пакеты:
# iptables -A PREROUTING -t mangle -i eth0 -p tcp -m multiport --dport 53,80,443 -j MARK --set-mark 2
За-SNAT-ить, чтобы пакеты на след. маршрутизаторе прошли
# iptables -t nat -A POSTROUTING -s $LAN -p tcp -m multiport --dport 53,80,443 -j SNAT --to-source 192.168.1.101
Задать им маршрут:
# echo 200 eth2-out >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table eth2-out
# ip route add default via GW_eth2 dev eth2 table eth2-out
# ip route add default via GW_eth1 dev eth1
# ip route flush cache

Итог -- пакеты идут от клиента в internet, а обратно доходят до сервера и... всё.
# tcpdump port 80 -i eth2

Код: Выделить всё

15:03:08.264934 IP 192.168.1.101.1749 > 91.203.4.17.www: S 798220991:798220991(0) win 64240 <mss 1360,nop,wscale 0,nop,nop,sackOK>
15:03:08.343839 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:11.353925 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:11.446478 IP 192.168.1.101.1749 > 91.203.4.17.www: S 798220991:798220991(0) win 64240 <mss 1360,nop,wscale 0,nop,nop,sackOK>
15:03:11.532261 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:14.534287 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
Вывод команд:
# ip ro sh
...
10.0.1.113 dev ppp17 proto kernel scope link src 10.0.0.3
10.0.1.76 dev ppp31 proto kernel scope link src 10.0.0.3
10.0.1.70 dev ppp10 proto kernel scope link src 10.0.0.3
10.0.1.91 dev ppp7 proto kernel scope link src 10.0.0.3
10.0.1.86 dev ppp53 proto kernel scope link src 10.0.0.3
10.0.1.81 dev ppp16 proto kernel scope link src 10.0.0.3
82.207.101.24/30 dev eth0 proto kernel scope link src 82.207.101.26
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.101
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
default via 82.207.101.25 dev eth1 metric 100
# ip ru sh
0: from all lookup local
32765: from all fwmark 0x2 lookup eth2-out
32766: from all lookup main
32767: from all lookup default
# ip ro sh table eth2-out
default via 192.168.1.1 dev eth2

Как сделать чтоб пакеты шли к клиенту, а не останавливались на сервере?

mak062
Сообщения: 5
Зарегистрирован: Пн июл 06, 2009 7:42 am

Re: http-трафик через второй (из двух) внешних каналов

Сообщение mak062 »

Видимо, на обратном пути ваши пакеты опять попадают в табоицу маршрутизации eth2-out.
Поэтому,
- либо добавьте нужные маршруты в таблицу eth2-out (теперь она будет не только "out" :) ), например, ip route add 192.168.0.0/24 dev eth0 table eth2-out
- либо снимайте с возвращающихся пакетов свои маркеры, чтобы они попали в дефолтную таблицу
- либо меняйте rule, чтобы он направлял в eth2-out пакеты только _от_ локальных адресов, но не к ним
- либо делайте новый rule, чтобы направить входящие пакеты в дефолтную таблицу

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: http-трафик через второй (из двух) внешних каналов

Сообщение NiTr0 »

А что tcpdump на eth2 говорит? ;)

fjey
Сообщения: 99
Зарегистрирован: Сб дек 29, 2007 5:51 pm

Re: http-трафик через второй (из двух) внешних каналов

Сообщение fjey »

Спасибо за ответы. Подредактировал правила, чтоб на обратном пути ничего не SNAT-илось. Провёл детальный анализ прохождения пакета. Идёт он примерно по такой схеме:
От клиента на сервер, а там прямиком в '-A PREROUTING -t mangle' получает метку (для маршрутизации), проходит FORWARD, и в '-A POSTROUTING -t nat' получает замену адреса отправителя (SNAT). Затем, уходит в интернет и приходит ответный пакет на сервер в '-A PREROUTING -t mangle' с, пока ещё, не замененным адресом на адресс настоящего получателя пакета, а дальше (внимание!:-) тишина. Т.е. ни в -A POSTROUTING -t nat ни в FORWARD-е (обоих таблицах) ни в INPUT-е (мало ли) -- нету пакета. Короче говоря пакету адрес настоящего получателя (клиента) не возвращается.
Вещ. док.:
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -m mark --mark 11 -j LOG --log-level debug --log-prefix="mangle PREROUTING:"
Nov 5 13:48:02 flashlighter kernel: [ 4205.593464] mangle PREROUTING:IN=eth0 OUT= MAC=08:00:27:b4:4e:2c:00:11:5b:67:21:3d:08:00 SRC=194.0.131.18 DST=IP_сервера(выданый с помощью SNAT при отправке) LEN=52 TOS=0x00 PREC=0x00 TTL=58 ID=0 DF PROTO=TCP SPT=80 DPT=3185 WINDOW=5840 RES=0x00 ACK SYN URGP=0 MARK=0xb
в остальных цепочках тихо, на любых --log-level.

ps: мне кажется подвох в недостаточной (или неточной) маркировке.
Смотрите какие наблюдения:
Если я завожу в таблицу eth2-out пакетики с маркой 2 (-p tcp -m multiport --dport 53,80,443 $MARK2) то пакеты садятся по обратному пути на сервере,
Если же я только задам правило # ip route add from IP_клиента table eth2-out т.е. все пакеты с нужного адреса (а не только пакеты на указанный маркой порт) направлю в таблицу table eth2-out -- то все пакеты побегут по маршруту в который нужно направить только пакеты на 80 порт.
Вывод с моей точки зрения: маршрутизация в table eth2-out настроена правильно, но какой-то необходимый тип пакетов не попадает в неё, или попадает но не знает что делать.
А что вы думаете по этому поводу?

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Re: http-трафик через второй (из двух) внешних каналов

Сообщение ran »

А что вы думаете по этому поводу?
думаю что что-то перемудрил с правилами иптейбл в целом вывод iptables-save целиком покажи
Любой тупик - это тщательно замаскированный выход.

Ответить