Имеется интерфейс с внешним IP и один интерфейс pppoe. Вдобавок две сетевые, смотрящими в две локальные сети:
eth0 Link encap:Ethernet HWaddr 00:44:55:66:ff:e1
inet addr:192.168.4.2 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14120544 errors:0 dropped:0 overruns:0 frame:0
TX packets:8151690 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20026916706 (20.0 GB) TX bytes:1029229328 (1.0 GB)
Interrupt:20
eth1 Link encap:Ethernet HWaddr 00:44:55:66:77:22
inet addr:192.168.1.242 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10801053 errors:0 dropped:0 overruns:0 frame:0
TX packets:15673177 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3214827795 (3.2 GB) TX bytes:20107578428 (20.1 GB)
Interrupt:44 Base address:0x8000
eth1:1 Link encap:Ethernet HWaddr 00:44:55:66:77:22
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:44 Base address:0x8000
eth2 Link encap:Ethernet HWaddr 00:44:55:66:11:11
inet addr:11.22.33.44 Bcast:11.22.33.44 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1372 Metric:1
RX packets:765444 errors:0 dropped:0 overruns:0 frame:0
TX packets:936019 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:168304895 (168.3 MB) TX bytes:673732402 (673.7 MB)
Interrupt:19 Base address:0x2000
lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:915 errors:0 dropped:0 overruns:0 frame:0
TX packets:915 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:95395 (95.3 KB) TX bytes:95395 (95.3 KB)
ppp0 Link encap:Протокол PPP (Point-to-Point Protocol)
inet addr:55.55.55.55 P-t-P:77.77.77.77 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:14118582 errors:0 dropped:0 overruns:0 frame:0
TX packets:8149724 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:19659702274 (19.6 GB) TX bytes:817205129 (817.2 MB)
Суть маршрутизации сводится к тому, чтобы основной трафик ходил через ppp0. А внешний 11.22.33.44 обслуживает web-сервер и IPSec. То есть, пакеты, поступившие на него, должны с него же и уходить. Плюс ко всему, трафик на некоторые адреса, которые записываются в iptables должны ходить через 11.22.33.44.
# ip route
default dev ppp0 scope link
10.1.1.0/24 dev eth1 proto kernel scope link src 10.1.1.2
77.77.77.77 dev ppp0 proto kernel scope link src 55.55.55.55
11.22.33.0/24 dev eth2 proto kernel scope link src 11.22.33.44
172.16.130.0/24 via 172.16.130.2 dev tun0
172.16.130.2 dev tun0 proto kernel scope link src 172.16.130.1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.242
192.168.3.0/24 dev eth2 scope link src 192.168.1.242
192.168.4.0/24 dev eth0 proto kernel scope link src 192.168.4.2
# ip rule
0: from all lookup local
32764: from all fwmark 0xa lookup 100
32765: from 11.22.33.44 lookup 100
32766: from all lookup main
32767: from all lookup default
# ip route show table 100
default via 11.22.33.44 dev eth2
192.168.1.0/24 via 192.168.1.242 dev eth1
В iptables делается маскарадинг на всё, кроме подсети 192.168.3.0/24, которая подключена через IPSec. Плюс имеется список адресов, которые помечаются маркером 0xa, чтобы уйти через интерфейс 11.22.33.44. Плюс, входящие соединения на 11.22.33.44 при помощи CONNMARK помечаются тем же 0xa, чтобы ответ на них уходил правильно.
До недавнего времени всё работало идеально. Но в один момент отвалилась IPSec. И перестали ходить пинги на те адреса из iptables. Проверка показала, что перестал идти и такой пинг:
# ping -I eth2 8.8.8.8
Попробовал заменить в 100 таблице маршрут по-умолчанию:
# ip route show table 100
default via 11.22.33.1 dev eth2
192.168.1.0/24 via 192.168.1.242 dev eth1
IPSec стала работать. Пинги на список адресов стали ходить. Но только на них. Если же сделать
# ping -I eth2 8.8.8.8
10:20:32.592759 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 8.8.8.8 tell 11.22.33.44, length 28
10:20:33.589528 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 8.8.8.8 tell 11.22.33.44, length 28
10:20:34.589527 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 8.8.8.8 tell 11.22.33.44, length 28
10:20:35.606686 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 8.8.8.8 tell 11.22.33.44, length 28
Сообщение бы и не публиковал, если бы IPSec не отваливалась каждый час. Грешу на маршрутизацию.
Как задать дефолтный маршрут при пинге с конкретного интерфейса, если default route итак уже имеется в системе, но через другой интерфейс (в данном случае ppp0)?
Вот iptables:
#!/sbin/iptables-restore
# Generated by iptables-save v1.4.12 on Sat Sep 14 18:44:55 2013
*mangle
:PREROUTING ACCEPT [3536:933906]
:INPUT ACCEPT [534:653649]
:FORWARD ACCEPT [3002:280257]
:OUTPUT ACCEPT [508:170349]
:POSTROUTING ACCEPT [3510:450606]
:LIST_IP - [0:0]
-A PREROUTING -s 192.168.1.0/24 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -s 10.1.1.0/24 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -d 11.22.33.44/32 -m state --state NEW -j CONNMARK --set-xmark 0xa/0xffffffff
-A PREROUTING -s 192.168.1.0/24 -d 213.180.204.11/32 -j LIST_IP
-A PREROUTING -s 192.168.1.0/24 -d 93.158.134.11/32 -j LIST_IP
-A PREROUTING -s 192.168.1.0/24 -d 213.180.193.11/32 -j LIST_IP
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -d 178.159.255.97/32 -j LIST_IP
-A OUTPUT -d 93.158.134.11/32 -j LIST_IP
-A OUTPUT -d 213.180.193.11/32 -j LIST_IP
-A LIST_IP -s 192.168.1.210/32 -j RETURN
-A LIST_IP -s 192.168.1.211/32 -j RETURN
-A LIST_IP -j MARK --set-xmark 0xa/0xffffffff
COMMIT
# Completed on Sat Sep 14 18:44:55 2013
# Generated by iptables-save v1.4.12 on Sat Sep 14 18:44:55 2013
*nat
:PREROUTING ACCEPT [309:22196]
:INPUT ACCEPT [277:20360]
:OUTPUT ACCEPT [205:12448]
:POSTROUTING ACCEPT [0:0]
:ROUTING - [0:0]
-A PREROUTING -d 11.22.33.44/32 -p tcp -m tcp --dport 111 -j DNAT --to-destination 10.1.1.1:443
-A PREROUTING -d 11.22.33.44/32 -p tcp -m tcp --dport 222 -j DNAT --to-destination 10.1.1.1:80
-A PREROUTING -d 11.22.33.44/32 -p tcp -m tcp --dport 333 -j DNAT --to-destination 192.168.1.111:902
-A POSTROUTING -j ROUTING
-A ROUTING -d 192.168.3.0/24 -j RETURN
-A ROUTING -j MASQUERADE
COMMIT
# Completed on Sat Sep 14 18:44:55 2013
# Generated by iptables-save v1.4.12 on Sat Sep 14 18:44:55 2013
*filter
:INPUT ACCEPT [3625:3767322]
:FORWARD ACCEPT [6001:470080]
:OUTPUT ACCEPT [3392:998412]
COMMIT
# Completed on Sat Sep 14 18:44:55 2013