Назад | Перейти на главную страницу

Соединение двух внутренних сетей OpenVZ, чтобы контейнеры могли видеть друг друга

У меня есть два хоста OpenVZ с контейнерами. Это текущий макет:

Хост-A: (eth0 (подключен к Интернету), eth1 (подключен к Host-B))

Хост-B: (eth0 (подключен к Интернету), eth1 (подключен к Host-A))

На Host-A и Host-B есть контейнеры OpenVZ. Host-A и Host-B имеют по одному общедоступному IPv4-адресу (каждый), контейнеры не имеют общедоступных IP-адресов, они должны находиться во внутренней частной сети.

Как настроить сеть, чтобы контейнеры на обоих хостах могли связываться друг с другом и получать доступ к Интернету.

Получив огромное количество откликов на SF ... нет!?!, Я провел собственное исследование, чтобы понять это. Вот как я это сделал.

Конфигурация

-SSH на хост A и обновите / etc / network / interfaces, как показано ниже:

auto lo
iface lo inet loopback

iface eth1 inet manual

auto vmbr1
iface vmbr1 inet static
        address 10.0.2.99
        netmask 255.255.255.0
        bridge_ports eth1
        bridge_stp off
        bridge_fd 0

auto eth0
iface eth0 inet static
        address public_ip_here
        netmask 255.255.255.0
        gateway public_ip_gateway_here

auto vmbr0
iface vmbr0 inet static
        address 10.0.1.1
        netmask 255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE

-SSH на хост B и обновил / etc / network / interfaces, как показано ниже:

auto lo
iface lo inet loopback

iface eth1 inet manual

auto vmbr1
iface vmbr1 inet static
        address 10.0.2.199
        netmask 255.255.255.0
        bridge_ports eth1
        bridge_stp off
        bridge_fd 0

auto eth0
iface eth0 inet static
        address public_ip_here
        netmask 255.255.255.0
        gateway public_ip_gateway_here

auto vmbr0
iface vmbr0 inet static
        address 10.0.1.1
        netmask 255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE

-Во всех новых контейнерах создайте eth0 (-> vmbr0) и eth1 (-> vmbr1) и назначьте каждому интерфейсу eth статический IP-адрес из соответствующего блока.

-Во всех новых контейнерах убедитесь, что маршрут по умолчанию указывает на 10.0.1.1, в противном случае обновите файлы конфигурации сети в контейнере соответствующим образом.

Топология сети сервера:

  • Хост A (eth0: общедоступный IP-адрес, vmbr0: 10.0.1.0/24) (eth1 / vmbr1: 10.0.2.99/24)

  • Хост B (eth0: общедоступный IP-адрес, vmbr0: 10.0.1.0/24) (eth1 / vmbr1: 10.0.2.199/24)

  • Контейнеры (eth0-mapped-to-> vmbr0: 10.0.1. [CT #] / 24) (eth1-mapped-to-> vmbr1: 10.0.2. [CT # если на хосте-a, иначе CT # + 100 ] / 24)

  • Контейнеры на обоих хостах могут иметь одинаковый IP-адрес в IP-блоке 10.0.1.x, но не в IP-блоке 10.0.2.x

Пример конфигурации контейнера:

  • Контейнер № 100 на хосте A (eth0-> vmbr0: 10.0.1.100/24, шлюз: 10.0.1.1) (eth1-> vmbr1: 10.0.2.100/24, шлюз: 10.0.2.99)

  • Контейнер № 100 на хосте B (eth0-> vmbr0: 10.0.1.100/24, шлюз: 10.0.1.1) (eth1-> vmbr1: 10.0.2.200/24, шлюз: 10.0.2.199)

  • Контейнер № 101 на хосте A (eth0-> vmbr0: 10.0.1.101/24, шлюз: 10.0.1.1) (eth1-> vmbr1: 10.0.2.101/24, шлюз: 10.0.2.99)

  • Контейнер № 101 на хосте B (eth0-> vmbr0: 10.0.1.101/24, шлюз: 10.0.1.1) (eth1-> vmbr1: 10.0.2.201/24, шлюз: 10.0.2.199)