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

Назначение IP-адресов контейнерам OpenVZ

Я недавно купил себе физический сервер и пытаюсь создать контейнеры, которые будут иметь свои IP-адреса.

Физическая машина имеет адреса IPv4 и IPv6. У меня есть доступ к другому IPv4 и некоторым другим IPv6-адресам, которые я хотел бы назначить контейнеру. Мне удалось назначить адреса следующим образом:

# vzctl set 101 --ipadd 144.76.195.252 --save

Я могу пинговать машину с физической машины, но не из внешнего мира. Это также относится и к назначенному мною IPv6.

Это ifconfig физической машины:

eth0      Link encap:Ethernet  HWaddr d4:3d:7e:ec:e0:04
          inet addr:144.76.195.232  Bcast:144.76.195.255  Mask:255.255.255.224
          inet6 addr: 2a01:4f8:200:71e7::2/64 Scope:Global
          inet6 addr: fe80::d63d:7eff:feec:e004/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:217895 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16779 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:322481419 (307.5 MiB)  TX bytes:1672628 (1.5 MiB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet6 addr: fe80::1/128 Scope:Link
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:3 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1108 (1.0 KiB)  TX bytes:1108 (1.0 KiB)

Это ifconfig контейнера OpenVZ:

# ifconfig

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: 2a01:4f8:200:71e7::3/64 Scope:Global
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1108 (1.0 KiB)  TX bytes:1108 (1.0 KiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:144.76.195.252  P-t-P:144.76.195.252  Bcast:144.76.195.252  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

Что мне нужно сделать, чтобы контейнер был доступен из внешнего мира? Что я мог забыть?

Спасибо.

Решение о маршрутизации или мостовом соединении является более функциональным, чем техническим; есть плюсы и минусы, и это выбор. Я предпочитаю маршрутизацию, если у меня только один интерфейс, потому что это позволяет мне иметь единую точку управления (HN), и на ней я могу разместить некоторые iptables или дополнительную защиту для контейнера, которые по умолчанию недоступны из Интернета. Если вы предпочитаете маршрутизацию, вам нужно убедиться, что значение net.ipv4.conf.all.forwarding = 1 (выполните команду sysctl -a | grep forward). Если нет, echo 1> / proc / sys / net / ipv4 / ip_forward; (но не переживет перезагрузку) или добавьте строку

net.ipv4.conf.all.forwarding = 1

в /etc/sysctl.conf и запустите sysctl -P после. Обычно вместо моста используется один маршрут, поскольку он позволяет использовать NAT, что помогает при отсутствии адресов IP4, но это не ваш случай, у вас их как минимум два.

С другой стороны, мост уравнивает ваши HN и VPS. Вы можете сделать это прямо в Интернете, потому что, похоже, у вас достаточно IP-адресов. Тогда вам может потребоваться дополнительная защита для каждого контейнера (например, iptables для каждого контейнера и на хосте).

Возвращаясь к вашей проблеме (маршрутизации), если установка ip_forward на 1 не помогает; попробуйте arp -an (проверяет, разрешается ли это на этом этапе) как с HN, так и с VPS и tcpdump, чтобы получить более подробную информацию, когда пакеты потеряны? на уровне 2 или 3?

Насчет IPv6 я действительно не знаю: /