Чтобы это имело смысл, мне нужно немного установить сцену.
У меня есть выделенный сервер с 5 общедоступными Ips: от ABC1 до ABC5
ABC1 управляет самим выделенным сервером, а ABC2 - 5 используются для контейнеров OpenVZ. Я хочу, чтобы каждый общедоступный IP-адрес был связан с несколькими контейнерами. Например, ABC2 должен перенаправлять трафик через порт 80 в контейнер в 192.168.2.1 и трафик через порт 21 в контейнер в 192.168.2.2.
Используя IPTables для NAT, трафик работает, если используется только один внешний IP, однако, если я пытаюсь добавить несколько общедоступных IP-адресов для маршрутизации, я теряю все сетевое подключение ко всем контейнерам, они не могут пропинговать и не могут получать входящий трафик. Однако доступ к узлу хоста остается.
Вывод iptables -t nat -L на хост-узле ниже:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT udp -- anywhere A.B.C.2 udp dpt:9987 to:192.168.2.1:9987
DNAT tcp -- anywhere A.B.C.2 tcp dpt:10011 to:192.168.2.2:10011
DNAT tcp -- anywhere A.B.C.2 tcp dpt:30033 to:192.168.2.2:30033
DNAT tcp -- anywhere A.B.C.3 tcp dpt:80 to:192.168.3.1:80
DNAT tcp -- anywhere A.B.C.4 tcp dpt:25565 to:192.168.4.1:25565
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.2.0/24 anywhere to:A.B.C.2
SNAT all -- 192.168.3.0/24 anywhere to:A.B.C.3
SNAT all -- 192.168.4.0/24 anywhere to:A.B.C.4
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Узел хоста имеет один физический NIC - eth0, который имеет IP ABC1
Хост работает под управлением Centos 6.3, а каждая виртуальная машина работает под управлением Debian 7.
Моя версия ядра OpenVZ - 2.6.32-042stab108.2