Здравствуйте товарищи. Не могу разобраться с работой iproute + iptables.
Возьмем простую задачку.
Интерфейс: eth0
IP-адрес: 192.168.3.5
Маска: 255.255.255.0
Шлюз: 192.168.3.1
Издеваться будем с помощью пинга до узла 8.8.8.8
1. Ситуация(стандартная.)
trunk@ubuntu:~$ sudo ip r s
[sudo] password for trunk:
default via 192.168.3.1 dev eth0 metric 100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.5
trunk@ubuntu:~$ sudo ip ru s
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
2я. Ситуация без шлюза по-умолчанию, и без iptables.
trunk@ubuntu:~$ sudo ip r d default
trunk@ubuntu:~$ sudo ip r s
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.5
trunk@ubuntu:~$ sudo ip ru a to 8.8.8.8 table test
trunk@ubuntu:~$ sudo ip ru s
0: from all lookup local
32765: from all to 8.8.8.8 lookup test
32766: from all lookup main
32767: from all lookup default
trunk@ubuntu:~$ sudo ip r a default via 192.168.3.1 dev eth0 table test
trunk@ubuntu:~$ ip r s t test
default via 192.168.3.1 dev eth0
trunk@ubuntu:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=50 time=37.2 ms
3я сиуация. Будем выставлять марку через iptables, а в ip rule проверять ее наличие. iptables чистая за исключением ниже прописанных правил(все ACCEPT).
trunk@ubuntu:~$ sudo ip ru d to 8.8.8.8
trunk@ubuntu:~$ sudo ip ru a fwmark 1 table test
trunk@ubuntu:~$ sudo ip ru s
0: from all lookup local
32765: from all fwmark 0x1 lookup test
32766: from all lookup main
32767: from all lookup default
trunk@ubuntu:~$ sudo iptables -t mangle -A OUTPUT -d 8.8.8.8 -j CONNMARK --set-mark 1
trunk@ubuntu:~$ sudo iptables -t mangle -Z
trunk@ubuntu:~$ ping 8.8.8.8
connect: Network is unreachable
trunk@ubuntu:~$ sudo iptables -t mangle -v
Chain OUTPUT (policy ACCEPT 51 packets, 5172 bytes)
pkts bytes target prot opt in out source destination
0 0 CONNMARK all -- any any anywhere google-public-dns-a.google.com CONNMARK set 0x1
trunk@ubuntu:~$ sudo ip r a default via 192.168.3.2 dev eth0
trunk@ubuntu:~$ sudo ip r s
default via 192.168.3.2 dev eth0
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.5
trunk@ubuntu:~$ sudo ip r s t test
default via 192.168.3.1 dev eth0
trunk@ubuntu:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.3.5 icmp_seq=1 Destination Host Unreachable
From 192.168.3.5 icmp_seq=2 Destination Host Unreachable
From 192.168.3.5 icmp_seq=3 Destination Host Unreachable
Chain OUTPUT (policy ACCEPT 260 packets, 25872 bytes)
pkts bytes target prot opt in out source destination
5 420 CONNMARK all -- any any anywhere google-public-dns-a.google.com CONNMARK set 0x1
Пакеты маркируются, но уходят(скорей всего) через 192.168.3.2.
В чем проблема, объясните пожалуйста?