Задача - организовать на WL-550gE 2 WAN-порта.
Проблема, с которой столкнулся - отсутствует (?) функционал advanced routing'а в прошивке. Т.е. не получается выполнять команды типа ip rule add ... А без этого получается, что ответ на пакет, пришедший через один WAN-порт уходит через другой WAN-порт. В частности, при этом не вяжутся TCP-сессии (SYN & ACK приходят/уходят через разные порты).
Как сие решить?
Last edited by andycpp; 10-01-2007 at 19:13.
ну да. я себе так и сделал для премиума. у меня три wan - для мирового траффика, для ua-ix и резерв.
Если не сложно, выложи ip routing / ip rules / iptables для твоей конфигурации, да и саму прошивку тоже
зы. я пока OpenWrt юзаю (кстати, веб-интерфейс там очень и очень уже), но, как я понимаю, это не имеет значения.
Нда, который день чувствую себя идиотом.
Поставил прошивку Олега с включенным advanced routing'ом (за что ему спасибо).
Выполняю команды:
получаю следующее - с роутера пингуется как 10.0.2.10, так и gateway во вторую сеть - 10.0.2.1.Code:robocfg vlan 0 ports "2 3 4 5t" vlan 1 ports "0 5t" vlan 2 ports "1 5t" vconfig add eth0 2 ifconfig 10.0.2.10 broadcast 10.0.2.255 netmask 255.255.255.0 up
А вот с компьютера - второй гейтвей уже не пингуется... как так получается?
Делаю дальше
результат тот жеCode:iptables -R INPUT 3 -j logaccept -i vlan2 -m state --state NEW iptables -I FORWARD 2 -j logaccept -i vlan2 -o br0 iptables -I FORWARD 3 -j logaccept -i br0 -o vlan2
решил сделать tcpdump, результат вот:
не понимаю, в чём проблема?Code:Это вот с роутера пигную: IP 10.0.2.10 > 10.0.2.1: icmp 84: echo request seq 0 IP 10.0.2.1 > 10.0.2.10: icmp 84: echo reply seq 0 IP 10.0.2.10 > 10.0.2.1: icmp 84: echo request seq 1 IP 10.0.2.1 > 10.0.2.10: icmp 84: echo reply seq 1 arp who-has 10.0.2.1 tell 10.0.2.10 arp reply 10.0.2.1 is-at 00:20:2b:00:20:2b Это вот - с компьютера: IP 10.0.0.100 > 10.0.2.1: icmp 40: echo request seq 12557 IP 10.0.0.100 > 10.0.2.1: icmp 40: echo request seq 12813
зы. и ещё вопрос - я не очень понимаю, а зачем это вот в nat/POSTROUTING?:
MASQUERADE all -- * br0 10.0.0.0/24 10.0.0.0/24
Last edited by Omega; 18-08-2014 at 12:01.
а маскарадинг во вторую сеть включил?
А зачем?
По-идее, вторая сеть - там свой роутер, который уже и занимается маскарадом на границе с провайдером.
Т.е. у меня такое впечатление, что просто не роутятся пакеты из 10.0.0.0/24 в 10.0.2.0/24. А вот почему - никак понять не могу
добавил
пинги пошли. Тогда вопрос - маскарад ~= SNAT, т.е. замена адреса отправителя. А зачем его заменять в данном случае?Code:iptables -t nat -A POSTROUTING -j MASQUERADE -o vlan2 -s ! 10.0.2.10
зы. у меня такое чувство, что отмечание НГ конкретно повлияло на голову... Блин, где я туплю??
Last edited by andycpp; 09-01-2007 at 09:56.
ага
маскарадинг это замена адреса.
вопрос в том знает ли второй роутер про то что сеть 10.0.0.0/24 надо маршрутизировать не по дефолту в сторону провайдера, а на первый роутер?
второй роутер совсем тяжел в настройке...
А касательно входящих соединений - я делаю в соотв. с
http://lartc.org/howto/lartc.rpdb.mu...ks.html#AEN298
и не работает
зы. что-то у меня такое чувство, что проблема во втором роутере... Буду исследовать.
Исследовал - таки да, часть проблем была на втором роутере - Network unreachable эта падла генерировала, пока не перегрузил.
Но так и осталась проблема с тем, что при работе чс default gateway != WAN-овскому не работают входящие соединения на компьютер
Врагу не сдаётся наш...
Решил пойти другим путём - маркировать пакеты и в зависимости от флага отправлять через нужную таблицу роутинга. И нихрена
и шЫш - входящие соединения не работаютCode:iptables -t mangle -j MARK --set-mark 82 -d 82.144.206.10 <- wan1 IP ip route add 82.144.206.0/25 dev vlan1 src 82.144.206.10 table 11 ip route add 10.0.0.0/24 dev br0 table 11 <- lan ip route add 10.0.2.0/24 dev vlan2 table 11 <- wan2 subnet ip route add 127.0.0.0/8 dev lo table 11 ip route add default via 82.144.206.1 table 11 <- wan1 GW ip rule add fwmark 82 table 11 ip route delete default ip route add default gw 10.0.2.1 <- wan2 GP
Вопрос - а откуда iptables берут адрес отправителя при процедуре маскарада? может быть они его берут исходя из значения default gateway? А как же тогда быть?
Last edited by Omega; 18-08-2014 at 12:02.
маскарадинг происходит уже после выбора маршрута, гейтвея и т.д. адрес отправителя должен быть адресом интерфейса, который выбран роутингом.
Ок
Но, тем не менее, почему-то перестаёт работать "виртуальный сервер" после того, как я меняю default gateway (table main) на второй канал... Почему так происходит - никак не могу понять
Сделал по совету Олега - WAN - дефолтный машрут, и LAN1 (vlan2) - для избранного + виртуальный сервер. Краткое резюме - вирт. сервер не работает (как всегда)
Далее - от рестарта и до упора - то что я делаю.
В каком месте я дурак?Code:[Admin@gate-volia root]$ iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 657 37002 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 4 240 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 state NEW 24 1362 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 state NEW 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 7 819 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 8 packets, 1767 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 70 21198 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 logdrop all -- !br0 vlan1 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT 0 0 logdrop all -- * br0 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 1152 packets, 827K bytes) pkts bytes target prot opt in out source destination Chain MACS (0 references) pkts bytes target prot opt in out source destination Chain SECURITY (0 references) pkts bytes target prot opt in out source destination 0 0 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x16/0x02 limit: avg 1/sec burst 5 0 0 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x04 limit: avg 1/sec burst 5 0 0 RETURN udp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 0 0 RETURN icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 0 0 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 Chain logaccept (0 references) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 state NEW LOG flags 7 level 4 prefix `ACCEPT ' 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain logdrop (6 references) pkts bytes target prot opt in out source destination 7 819 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 state NEW LOG flags 7 level 4 prefix `DROP ' 7 819 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 [Admin@gate-volia root]$ iptables -nvL -t nat Chain PREROUTING (policy ACCEPT 42 packets, 4648 bytes) pkts bytes target prot opt in out source destination 7 819 VSERVER all -- * * 0.0.0.0/0 10.0.2.10 Chain POSTROUTING (policy ACCEPT 9 packets, 582 bytes) pkts bytes target prot opt in out source destination 7 1727 MASQUERADE all -- * vlan1 !10.0.2.10 0.0.0.0/0 0 0 MASQUERADE all -- * br0 10.0.0.0/24 10.0.0.0/24 Chain OUTPUT (policy ACCEPT 9 packets, 582 bytes) pkts bytes target prot opt in out source destination Chain VSERVER (1 references) pkts bytes target prot opt in out source destination [Admin@gate-volia root]$ robocfg vlan 0 ports "2 3 4 5t" vlan 2 ports "1 5t" [Admin@gate-volia root]$ vconfig add eth0 2 [Admin@gate-volia root]$ ifconfig vlan2 up [Admin@gate-volia root]$ udhcpc -i vlan2 -r 82.144.206.10 -s /bin/true -b udhcpc (v0.9.9-pre) started Sending discover... Sending select for 82.144.206.10... Lease of 82.144.206.10 obtained, lease time 3600 [Admin@gate-volia root]$ ifconfig -a br0 Link encap:Ethernet HWaddr 00:15:F2:3B:37:04 inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::215:f2ff:fe3b:3704/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1565 errors:0 dropped:0 overruns:0 frame:0 TX packets:2393 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:105463 (102.9 KiB) TX bytes:1555945 (1.4 MiB) vlan0 Link encap:Ethernet HWaddr 00:15:F2:3B:37:04 inet6 addr: fe80::215:f2ff:fe3b:3704/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1626 errors:0 dropped:0 overruns:0 frame:0 TX packets:2395 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:129304 (126.2 KiB) TX bytes:1565673 (1.4 MiB) vlan1 Link encap:Ethernet HWaddr 00:15:F2:3B:37:04 inet addr:10.0.2.10 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::215:f2ff:fe3b:3704/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:83 errors:0 dropped:0 overruns:0 frame:0 TX packets:74 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:17195 (16.7 KiB) TX bytes:21199 (20.7 KiB) vlan2 Link encap:Ethernet HWaddr 00:15:F2:3B:37:04 inet6 addr: fe80::215:f2ff:fe3b:3704/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2886 (2.8 KiB) TX bytes:1270 (1.2 KiB) [Admin@gate-volia root]$ ifconfig vlan2 82.144.206.10 netmask 255.255.255.128 broadcast 82.144.206.127 up [Admin@gate-volia root]$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 vlan1 82.144.206.0 0.0.0.0 255.255.255.128 U 0 0 0 vlan2 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 vlan1 82.144.0.0 82.144.206.1 255.255.0.0 UG 0 0 0 vlan2 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 10.0.2.1 0.0.0.0 UG 0 0 0 vlan1 [Admin@gate-volia root]$ iptables -t nat -I POSTROUTING 2 -o vlan2 -s ! 82.144.206.10 -j MASQUERADE [Admin@gate-volia root]$ iptables -t nat -A VSERVER -j DNAT -p tcp --dport 25 --to 10.0.0.101:25 [Admin@gate-volia root]$ iptables -t nat -A VSERVER -j DNAT -p tcp --dport 80 --to 10.0.0.100:80 [Admin@gate-volia root]$ ip link set br0 up [Admin@gate-volia root]$ ip addr add 10.0.0.1/24 brd + dev br0 RTNETLINK answers: File exists [Admin@gate-volia root]$ ip rule add prio 50 table main [Admin@gate-volia root]$ ip route del default table main [Admin@gate-volia root]$ ip link set vlan2 up [Admin@gate-volia root]$ ip addr flush dev vlan2 [Admin@gate-volia root]$ ip addr add 82.144.206.10/25 brd 82.144.206.127 dev vlan2 [Admin@gate-volia root]$ ip link set vlan1 up [Admin@gate-volia root]$ ip addr flush dev vlan1 [Admin@gate-volia root]$ ip addr add 10.0.2.10/24 brd 10.0.2.255 dev vlan1 [Admin@gate-volia root]$ ip rule add prio 201 from 82.144.206.0/25 table 201 [Admin@gate-volia root]$ ip route add default via 82.144.206.1 dev vlan2 src 82.144.206.10 proto static table 201 [Admin@gate-volia root]$ ip route append prohibit default table 201 metric 1 proto static [Admin@gate-volia root]$ ip rule add prio 202 from 10.0.2.0/24 table 202 [Admin@gate-volia root]$ ip route add default via 10.0.2.1 dev vlan1 src 10.0.2.10 proto static table 202 [Admin@gate-volia root]$ ip route append prohibit default table 202 metric 1 proto static [Admin@gate-volia root]$ ip rule add prio 222 table 222 [Admin@gate-volia root]$ ip route add default table 222 proto static via 10.0.2.1 dev vlan1 [Admin@gate-volia root]$ ip route add 82.144.0.0/16 via 82.144.206.1 [Admin@gate-volia root]$ ip route get 82.144.25.25 82.144.25.25 via 82.144.206.1 dev vlan2 src 82.144.206.10 cache mtu 1500 advmss 1460 [Admin@gate-volia root]$
Last edited by Omega; 18-08-2014 at 12:02.
Всё остальное работает?
Сейчас не хватает правила, которое собственно и разрешит виртуальные сервера для vlan2.
Что-то типа
iptables -t nat -A PREROUTING -d 1.1.1.1 -j VSERVER
1.1.1.1 нужно заменить на адрес vlan2.
Да, остальное работает. Добавил правило - не помогло
Если кратко, что я делаю после ребута (настройка в веб-интерфейсе - 10.0.2.10 - Static IP):
И вот так выглядит активность, когда гугль пытается зайти на 82.144.206.10:80Code:robocfg vlan 0 ports "2 3 4 5t" vlan 2 ports "1 5t" vconfig add eth0 2 ifconfig vlan2 up udhcpc -i vlan2 -r 82.144.206.10 -s /bin/true -b ifconfig vlan2 82.144.206.10 netmask 255.255.255.128 broadcast 82.144.206.127 up iptables -t nat -I POSTROUTING 2 -o vlan2 -s ! 82.144.206.10 -j MASQUERADE iptables -t nat -A VSERVER -j DNAT -p tcp --dport 25 --to 10.0.0.101:25 iptables -t nat -A VSERVER -j DNAT -p tcp --dport 80 --to 10.0.0.100:80 iptables -t nat -R PREROUTING 1 -j VSERVER -d 82.144.206.10 ip route add 82.144.0.0/16 via 82.144.206.1
До меня (кажется) начало доходить, почему проблема получается.Code:[Admin@gate-volia root]$ tcpdump -i vlan2 "not port 23" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vlan2, link-type EN10MB (Ethernet), capture size 68 bytes 00:21:20.453788 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:21.456722 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:23.467582 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:27.474981 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:35.484796 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:51.492311 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> 00:21:59.097842 IP washer.volia.net.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length: 302 00:22:23.497599 IP nf-out-f136.google.com.56396 > smart-group.biz.www: S 1169836405:1169836405(0) win 8190 <mss 1460> ...
Решение о том, куда роутить пакет, принимается до nat/POSTROUTING
Допустим, пакет пришел с 4.4.4.4 на 82.144.206.10:80, его DNAT'нуло на 10.0.0.100:80, и генерируется ответный пакет. Роутер его видит как из br0 S:10.0.0.100, D:4.4.4.4. И не знает, что его надо отроутить назад на 82.144.206.1, и роутит по дефолту на 10.0.2.1. Потом уже срабатывает SNAT и заменяет S10.0.0.100 на S10.0.2.10. Вот и получается разрыв в цепочке.
Есть чувство, что нужно использовать CONNMARK, чтобы по первому пакету отмаркировать и все относящиеся к нему, а дальше уже по fwmark определять, куда роутить. Но оно есть начиная с 2.6 ядра. Может есть ещё какие варианты? Хелп!
Хотя нашел вот - kernel-module-ipt-conntrack_2.4.22.l2.3r63-r17_ixp4xxbe.ipk... но ставить боязно, да и не факт, что встанет.
Last edited by Omega; 18-08-2014 at 11:59.
А причём тут гугль? Он находится _вне_ сети 82.144.0.0/16.
гугль - это просто пример того, что происходит, когда приходит входящий коннект откуда-нить на 82.144.206.10. Syn приходит, а Syn-ack-ответ отсылается с другого ИП И, соотв, Tcp не получается.