Маршрутизация нескольких публичных IP-адресов во внутренние подсети

801
Adam Dodman

Мне был назначен блок / 29 ips для выделенного сервера, который я арендую. Я хочу иметь возможность сохранить один из этих IP-адресов для управления самим сервером и перенаправить каждый из остальных в свою внутреннюю подсеть, чтобы несколько контейнеров OpenVZ могли совместно использовать публичные IP-адреса.

Например, у меня может быть два веб-сервера и два файловых сервера в 4 контейнерах. Это не те службы, которые будут запущены, но для удобства я буду их использовать. Я хочу, чтобы один из моих общедоступных IP-адресов (XX.XX.XX.2) указывал на два контейнера в подсети 192.168.2.0/24, а другой общедоступный IP-адрес (XX.XX.XX.3) указывал на контейнеры. в подсети 192.158.3.0/24. Связь между подсетями не требуется, но каждый контейнер должен иметь доступ к сети.

Я попытался использовать маршрутизацию на основе источника, как описано здесь, и NAT, как описано в вики OpenVZ, здесь безуспешно. Хост работает под управлением Centos 6, а каждая виртуальная машина работает под управлением Debian 7, если это имеет значение.

1
Можете ли вы подробно описать, что вы подразумеваете под * без успеха *? Что терпит неудачу? Сообщения об ошибках? MariusMatutiae 9 лет назад 0
Нет ошибок как таковых, но просто нет подключения к Интернету на виртуальных машинах - невозможно пропинговать что-либо за узлом узла, адресом или IP-адресом, происходит сбой трассировки на узле узла. Имена серверов верны - для проверки используется публичный DNS Google. Adam Dodman 9 лет назад 0
Просьба опубликовать вывод * ip addr show * и * ip route show *, спасибо. MariusMatutiae 9 лет назад 0
Слишком долго для комментария, поэтому загружено в pastebin [здесь] (http://pastebin.com/rPiStCKD) Adam Dodman 9 лет назад 0
Из `ip addr show` вывод 216.126.193.235 и 216.126.193.236, похоже, имеют неправильные маски Silvio Massina 9 лет назад 0
Я предполагаю, что маски должны быть изменены на / 29. Как бы я поступил так? Adam Dodman 9 лет назад 0
Можете ли вы пинговать любой из контейнеров с хоста, прямо сейчас? MariusMatutiae 9 лет назад 0
Да, хост может пропинговать контейнеры, и контейнеры могут пропинговать хост. Adam Dodman 9 лет назад 0
@ Адам: Я полагаю, вы установили их с помощью ifconfig. Используйте ifconfig eth0: 0 216.126.193.235 маска сети 255.255.255.248 (и повторите для eth0: 1) Silvio Massina 9 лет назад 0

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

0
Silvio Massina
  1. Set up your openvz containers to use bridged networking (using veth interfaces).

  2. Create a bridge for each of the internal networks you want to connect your containers to (in your case 2 bridges, one for 192.168.2.0/24 and one for 192.168.3.0/24. Let's call them br2 and br3).

  3. Give to each bridge an ip address on the correct network (for example br2 could be 192.168.2.1 and br3 192.168.3.1)

  4. Configure the containers connecting them to their respective bridges.

    For example connect to br2 the containers that should reside on network 192.168.2.0/24 (let's say they are CT1 and CT2) and to br3 the ones that you want on 192.168.3.0/24 (let's say they are CT3 and CT4).

  5. Give to each container an IP address on the same network of the bridge they are connected to. Set the ip address of the bridge ad the default gateway.

    For example: CT1 and CT2 with IP 192.168.2.101 and 192.168.2.102. Their gateway will be 192.168.2.1 (IP address of br2)

  6. Enable ip forwarding on the physical host

  7. Configure all the public IPs on the physical host's interface connected to the Internet (let's say it's eth0), with the correct subnet mask.

  8. Configure NAT for your CTs as follows:

    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to first.pulic.ip.address iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j SNAT --to second.pulic.ip.address