Я недавно купил себе физический сервер и пытаюсь создать контейнеры, которые будут иметь свои 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 я действительно не знаю: /