Приведенные команды - практически вся настройка роутера# iptables --line -nvL
Chain INPUT (policy ACCEPT 2326 packets, 240K bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 32 packets, 4687 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2931 packets, 369K bytes)
num pkts bytes target prot opt in out source destination
# iptables --line -nvL -t mangle
Chain PREROUTING (policy ACCEPT 118 packets, 11926 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 MARK tcp -- vlan10 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 MARK set 0xc
Chain INPUT (policy ACCEPT 86 packets, 7239 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 32 packets, 4687 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 53 packets, 5557 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 85 packets, 10244 bytes)
num pkts bytes target prot opt in out source destination
# iptables --line -nvL -t nat
Chain PREROUTING (policy ACCEPT 34 packets, 3171 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 314 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 5 packets, 314 bytes)
num pkts bytes target prot opt in out source destination
1 2 108 SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:192.168.2.2
2 0 0 SNAT all -- * vlan256 0.0.0.0/0 0.0.0.0/0 to:192.168.42.251
# ip ro sh table prov2
default via 192.168.42.249 dev vlan256
# ip ro sh table main
192.168.42.248/29 dev vlan256 proto kernel scope link src 192.168.42.251
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.2
10.10.10.0/24 dev vlan10 proto kernel scope link src 10.10.10.1
169.254.0.0/16 dev eth0 scope link metric 1004
169.254.0.0/16 dev vlan10 scope link metric 1009
169.254.0.0/16 dev vlan256 scope link metric 1010
default via 192.168.2.1 dev eth0
# ip ro sh table default
пусто
других таблиц нет
вместо tcpdump предпочитаю пользоваться журналированием в iptables (для меня нагляднее)
iptables -t mangle -A PREROUTING -d 77.88.21.3 -j LOG --log-prefix "pre_to_yandex "
iptables -t mangle -A FORWARD -d 77.88.21.3 -j LOG --log-prefix "fw_to_yandex "
iptables -t mangle -A POSTROUTING -d 77.88.21.3 -j LOG --log-prefix "post_to_yandex "
iptables -t mangle -A PREROUTING -s 77.88.21.3 -j LOG --log-prefix "pre_from_yandex "
iptables -t mangle -A FORWARD -s 77.88.21.3 -j LOG --log-prefix "fw_from_yandex "
iptables -t mangle -A POSTROUTING -s 77.88.21.3 -j LOG --log-prefix "post_from_yandex "
если добавить правило
ip rule add from 10.10.10.40 table prov2
то
# ip ru sh
0: from all lookup local
32765: from 10.10.10.40 lookup prov2
32766: from all lookup main
32767: from all lookup default
tail -f /var/log/messages | grep yandex
Mar 12 16:08:41 fedora kernel: [ 2392.511394] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0
Mar 12 16:08:41 fedora kernel: [ 2392.511422] fw_to_yandex IN=vlan10 OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0 MARK=0xc
Mar 12 16:08:41 fedora kernel: [ 2392.511439] post_to_yandex IN= OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0 MARK=0xc
Mar 12 16:08:41 fedora kernel: [ 2392.551352] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=40 TOS=0x00 PREC=0x00 TTL=57 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0
Mar 12 16:08:41 fedora kernel: [ 2392.551381] fw_from_yandex IN=vlan256 OUT=vlan10 SRC=77.88.21.3 DST=10.10.10.40 LEN=40 TOS=0x00 PREC=0x00 TTL=56 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0
Mar 12 16:08:41 fedora kernel: [ 2392.551395] post_from_yandex IN= OUT=vlan10 SRC=77.88.21.3 DST=10.10.10.40 LEN=40 TOS=0x00 PREC=0x00 TTL=56 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0
т.е. все работает
а вот если добавить правило
ip rule add fwmark 12 table prov2
то
# ip ru sh
0: from all lookup local
32765: from all fwmark 0xc lookup prov2
32766: from all lookup main
32767: from all lookup default
tail -f /var/log/messages | grep yandex
Mar 12 16:25:03 fedora kernel: [ 3373.812830] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
Mar 12 16:25:03 fedora kernel: [ 3373.812866] fw_to_yandex IN=vlan10 OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0xc
Mar 12 16:25:03 fedora kernel: [ 3373.812884] post_to_yandex IN= OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0xc
Mar 12 16:25:03 fedora kernel: [ 3373.852495] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=48 TOS=0x00 PREC=0x00 TTL=57 ID=28184 DF PROTO=TCP SPT=80 DPT=4201 WINDOW=65535 RES=0x00 ACK SYN URGP=0
Mar 12 16:25:06 fedora kernel: [ 3376.821614] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=20018 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
Мистика?