Я новичок в iptables, и я хочу понять, как работает iptables nat.
У меня есть машина linux с контейнером lxc.
Конфигурация сети машины выглядит следующим образом: интерфейс eth0, который соединяет машину с интернетом (это IPv4-адрес 10.9.63.173) и интерфейс veth-1 (192.168.2.1) для контейнера lxc.
На контейнере lxc имеется интерфейс eth0 (192.168.2.2), подключенный к veth-1.
на машине linux я добавил две iptables правила:
1) iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.9.63.173
2) iptables -t nat -A PREROUTING -d 10.9.63.173 -j DNAT --to-destination 192.168.2.2
Если я делаю ping 8.8.8.8 из контейнера lxc все работает (исходный IP переводится на 10.9.63.173 при выходе из машины linux). Но второе правило никогда не совпадает с ответами Эха ping. Я наблюдал входящие пакеты на eth0 (10.9.63.173), используя tcpdump, и выход выглядит следующим образом:
23:34:33.151565 IP google-public-dns-a.google.com > host.local: ICMP echo reply, id 536, seq 174, length 64
поэтому пакеты с назначением 10.9.63.173 поступают на интерфейс eth0.
у меня три вопросы:
1) Почему следующее правило Нат не совпали?
2) как iptables умеет изменять ответы таким образом, чтобы пересылать их в 192.168.2.2?
3) может ли целевой объект SNAT изменить исходный порт (без явного указания перевести на определенный порт)?
спасибо!