Итак, у нас установлено из репо ядро 2.6.26-2-openvz-686.
Чтобы заработал натинг внутри виртуала, нужно сделать 2 вещи:
1. загрузить недостающие модули в HN.
2. прописать в конфиг нужного виртуала, какие модули iptables нам нужны.
Добавляем в /etc/modules такие модули:
xt_tcpudp
ip_conntrack
xt_state
iptable_nat
#ipt_MASQUERADE - если нам нужен маскарадинг, а не source-nat
Теперь, рассмотрим конфиг виртуала:
root@HN# cat /etc/vz/conf/108.conf
[ ... секция с лимитами... ]
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat"
HOSTNAME="nat.domain.ua"
NAME="nat"
BRIDGEDEV="vzbr525"
VETH_IP_ADDRESS="100.100.232.1"
VE_DEFAULT_GATEWAY="100.100.232.4"
MASK="255.255.255.240"
NETIF="ifname=eth108.525,mac=00:18:51:31:A2:CD,host_ifname=veth108.525,host_mac=00:18:51:C7:C4:63"
NAMESERVER="100.100.232.34"
SEARCHDOMAIN="domain.ua"
VLAN="525"
ADDITIONAL_VLANS="200"
NETIF_200="ifname=eth108.200,bridge=vzbr200,mac=00:18:51:31:A2:CC,host_ifname=veth108.200,host_mac=00:18:51:C7:C4:62"
VETH_IP_ADDRESS_200="192.168.1.1"
MASK_200="24"
Обратим внимание на параметр IPTABLES - в нём перечислены те же модули iptables, что и в конфиге vz.conf, плюс дополнительно - необходимые для поднятия натинга модули.
Далее, либо ребутаем HN, либо догружаем модули с помощью modprobe в HN и рестартим демона vz (+ vzvlans).
Если после данных манипуляций, войдя в виртуал (vzctl enter 108), и выполнив iptables -t nat -nvL, мы не получим ругани на отсутствие модуля - или чего похуже :), значит, натинг будет работать, и пора писать правила для фаерволла.
nat:/# cat /etc/init.d/firewall.nat
#!/bin/sh
iptables -F
iptables -t nat -F
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -A INPUT -m state --state INVALID -j REJECT
iptables -t nat -A POSTROUTING -o eth108.525 -j SNAT --to-source 100.100.232.1
Создаем симлинки в /etc/rcN.d/ на нужных уровнях.
Поскольку в нат-правиле упоминается интерфейс eth108.525, который является "основным" для виртуала и создается при старте виртуала, то такие правила фаерволла так же будут загружены сразу же, ещё до поднятия доп.влана для "серой" сети. Если понадобится более сложный набор правил, где будет фигурировать интерфейс eth108.200, - придётся хорошо продумать, как в этом случае подгружать фаерволл.