Чтобы это имело смысл, мне нужно немного установить сцену.

У меня есть выделенный сервер с 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

1 ответ1

0
  1. Убедитесь, что все публичные IP-адреса установлены на внешнем интерфейсе вашего физического хоста с правильной маской сети

  2. Убедитесь, что все виртуальные машины имеют в качестве шлюза по умолчанию IP-адрес моста, к которому они подключены (убедитесь, что мосты правильные имеют IP-адреса)

  3. Убедитесь, что ip_forwarding включен

  4. Используйте SNAT для маскировки виртуальных машин за правильными публичными IP-адресами

  5. Используйте DNAT для пересылки входящего трафика на правильные виртуальные машины

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .