OpenVZ, SNAT внутри контейнера?
На хосте 2 физ. интерфейса. Поднят proxmox (HN). Поднят контейнер (CT). Оба физических интерфейса HN заведены на бриджи (каждый на свой), соотв. через veth 2 устройства (тоже каждый привязан к соотв. бриджу) внутри контейнера. И на HN и на CT нормально работают оба интерфейса, всё как задуманно (т.е. и инет и локалка видны, маршруты в норме).
Задача - поднять NAT для раздачи инета (eth1) локальным пользователями (eth0). Модули загружены, в vz.conf включено:
IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT"
Везде включен ip_forward, все таблицы iptables пустые и политика ACCEPT. Внутри контейнера добавляем обычное правило для NAT'a:
# iptables -t nat -R POSTROUTING 1 -s 192.168.X.0/24 -o eth1 -j SNAT --to-source 192.168.1.3
С клиента (у которого шлюз по умолчанию стоит в адрес на интерфейсе eth0 CT) пингуем гугл и не работает. В контейнере видно, что правило не отрабатывается:
# tcpdump -vv -s 1600 -i eth1 icmp
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 1600 bytes
15:54:34.073018 IP (tos 0x0, ttl 128, id 61252, offset 0, flags [none], proto ICMP (1), length 60)
192.168.X.55 > google-public-dns-a.google.com: ICMP echo request, id 512, seq 14239, length 40
Chain POSTROUTING (policy ACCEPT 10 packets, 618 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * eth1 192.168.X.0/24 0.0.0.0/0 to:192.168.1.3
Т.е. пакет маршрутизится, но подмены адреса не происходит. Причем если я на HN добавляю аналогичные правила (что для бриджа vmbr1, что для eth1) - тоже в них пакет не попадает. Что я не так делаю?