Маршрутизация SNAP Iptables к контейнерам openVZ

568
Adam Dodman

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

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

0

1 ответ на вопрос

0
Silvio Massina
  1. Check that all public IPs are set on the external interface of your physical host, with the correct netmask

  2. Check that all the VMs have as default gateway the IP address of the bridge they're connected to (check that the bridges correct have IPs)

  3. Check that ip_forwarding is enabled

  4. Use SNAT to mask the VMs behind the correct public IPs

  5. Use DNAT to forward incoming traffic to the correct VMs