У меня проблема с правилом POSTROUTING iptables, похоже, что правило SNAT не меняет исходный IP-адрес. Я хотел бы настроить следующую систему для маршрутизации всего трафика из LAN 2 через VPN-туннель. В системе есть две таблицы маршрутизации настроен.
+-----------------+
LAN 2 ----> |eth1 eth0 +-----> LAN 1 ---> Gateway ---> Internet
| tun1 |
+-------------|---+
`--------------- VPN tunnel ------>
iptables
root@misio:~# iptables -n -L --line-numbers -v -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 122 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1 packets, 122 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 SNAT all -- * * 192.168.124.0/24 0.0.0.0/0 to:192.168.124.1
маршрутизация (две таблицы маршрутизации)
root@misio:~# ip route list
default via 192.168.123.1 dev eth0
192.168.123.0/24 dev eth0 proto kernel scope link src 192.168.123.3
root@misio:~# ip route list table frankenjura
default via 10.10.11.4 dev tun1
10.10.11.0/24 dev tun1 scope link
192.168.124.0/24 dev eth1 scope link
root@misio:~# ip rule
0: from all lookup local
32761: from 192.168.124.0/24 lookup frankenjura
32762: from all to 192.168.124.0/24 lookup frankenjura
32766: from all lookup main
32767: from all lookup default
Вход (eth1) - система принимает пакеты от хостов в LAN 2 (192.168.124.17):
root@misio:~# tcpdump -n -i eth1 icmp and host 8.8.8.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
12:39:25.134315 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1181, length 40
12:39:30.142011 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1182, length 40
Выход (tun1) - пакеты направляются на правильный интерфейс (tun1), но исходный IP-адрес не изменяется:
root@misio:~# tcpdump -n -i tun1 icmp and host 8.8.8.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun1, link-type RAW (Raw IP), capture size 262144 bytes
12:40:20.140953 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1192, length 40
12:40:25.148605 IP 192.168.124.17 > 8.8.8.8: ICMP echo request, id 1, seq 1193, length 40
... но количество пакетов / байтов для следующего правила не увеличивается!
Chain POSTROUTING (policy ACCEPT 1 packets, 122 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 SNAT all -- * * 192.168.124.0/24 0.0.0.0/0 to:192.168.124.1
Версия таблиц IP: 1.4.21
Не могли бы вы помочь, пожалуйста?
Я настроил логирование iptables во всех цепочках и узнал, что пакеты вообще не проходят через таблицу NAT!
пакеты проходят: - raw (PREROUTING) - mangle (PREROUTING) - filter (FORWARD) - mangle (POSTROUTING)
Jul 15 12:36:04 misio kernel: [ 7913.969872] raw-PRE IN=eth1 OUT= MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022
Jul 15 12:36:04 misio kernel: [ 7913.969894] mangle-PRE IN=eth1 OUT= MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022
Jul 15 12:36:04 misio kernel: [ 7913.969908] filter-FW IN=eth1 OUT=tun1 MAC=00:1e:2a:49:9d:ad:00:17:a4:da:13:09:08:00 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022
Jul 15 12:36:04 misio kernel: [ 7913.969914] mangle-POST IN= OUT=tun1 SRC=192.168.124.17 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=7668 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=1022
С уважением, Гжегож