LINUX.ORG.RU
ФорумAdmin

OpenVZ, SNAT внутри контейнера?


0

1

На хосте 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) - тоже в них пакет не попадает. Что я не так делаю?


Ответ на: комментарий от nstorm

Решил проблему. В шаблоне (centos-6) не было установлено policycoreutils и видимо из-за этого SELinux'ом что-то блокировалось, что пакет не попадал в цепочку POSTROUTING. После установки пакета и зависимостей всё заработало.

nstorm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.