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

Сделайте контейнеры LXC напрямую доступными с помощью ipv6

Во-первых, у меня есть специальный IPv6-адрес, назначенный моему выделенному серверу, всего 1. A :: 1/128. Но Я могу назначить адреса для eth0 (например, :: 2/128, :: 3/128 и т. Д.).

Теперь я хотел бы запустить контейнеры LXC на этом сервере, но я бы хотел, чтобы они были первоклассными гражданами, я бы хотел, чтобы у них был собственный IPv6-адрес.

LXC с IPv4 работает нормально. Я могу запустить контейнер и от него пинговать мир. У меня есть мостовое устройство под названием lxcbr0.

Честно говоря, я не знаю, что делать дальше. В конкретной конфигурации LXC, которая у меня есть («префикс» означает мой назначенный, ну, префикс):

lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct

На хосте я настроил sysctl для использования пересылки:

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1

Теперь я сбиваюсь с пути. я считать Мне нужно назначить мосту IP. Я назначил ему префикс :: 2/128, который я использую в конфигурации LXC выше. В "интерфейсах":

iface lxcbr0 inet6 static
        address prefix::2
        netmask 128
        # use arp proxy? Read that somewhere. 
        post-up /sbin/ip -6 neigh add proxy prefix::3 dev eth0 #container 1
        post-up /sbin/ip -6 neigh add proxy prefix::4 dev eth0 #container 2

Излишне говорить, что это не работает. Я могу запустить контейнер и войти в систему, но ничего не могу проверить. Я также не могу пропинговать контейнер с хоста. Я знаю, что с маршрутизацией есть какие-то дела ...?

Некоторые выходные данные текущего состояния: Хост 'ip -6 a':

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever

Контейнер 'ip -6 a':

20: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::3/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe59:679f/64 scope link 
       valid_lft forever preferred_lft forever

Хост 'ip -6 r':

2607:5300:60:714::1 dev eth0  proto kernel  metric 256 
2607:5300:60:714::2 dev lxcbr0  proto kernel  metric 256 
2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev lxcbr0  proto kernel  metric 256 
fe80::/64 dev vethPVJQ6M  proto kernel  metric 256 
fe80::/64 dev vethWT7OPQ  proto kernel  metric 256 
default via 2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 

Контейнер 'ip -6 r':

2607:5300:60:714::2 dev eth0  metric 1024 
2607:5300:60:714::3 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2607:5300:60:714::2 dev eth0  metric 1024 

Хост работает под управлением Ubuntu 15.04, LXC версии 1.1.2.

Буду признателен за несколько указателей!

Мне кажется, что вы здесь смешиваете несколько разных вещей. Во-первых, я сомневаюсь, что сетевая маска на Ethernet-порту вашего сервера действительно равна / 128. Я подозреваю, что это что-то еще (возможно, / 64) и что вы находитесь в общем сегменте с кучей других клиентов.

Судя по выводу вашей команды "ip -6 a":

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever

Я бы сказал, что / 128 на интерфейсах - это ошибка. Ваш префикс выглядит как 2607: 5300: 60: 714 :: / 64 (скорее всего).

Предполагая, что это правильно, вам необходимо настроить файл интерфейсов следующим образом (при необходимости добавьте свой IPv4):

auto lxcbr0
iface lxcbr0 inet6 static
  bridge_ports eth0
  bridge_fd 0
  address 2607:5300:60:714::1
  net mask 64
  gateway 2607:5300:60:7ff:ff:ff:ff:ff

Примечание. Непонятно, как достичь 2607: 5300: 60: 7ff :: / 64, чтобы перейти к шлюзу по умолчанию. Было бы очень полезно узнать, как ваш провайдер ожидает от вас настройки сети, или лично ознакомиться с любой предоставленной им документацией. Лучше всего предположить, что сеть 2607: 5300: 60: 714 :: / 64 находится на том же канале, что и 2607: 5300: 60: 7ff :: / 64. Этот 2607: 5300: 60: 7ff :: / 64 используется для инфраструктуры провайдера. Неясно, получаете ли вы все 2607: 5300: 60: 714: / 64 целиком или же они передаются другим клиентам по той же ссылке.

Предполагая, что у вас есть свобода назначать адреса из этого диапазона, все, что вам действительно нужно сделать, это подключить ваши контейнеры к одному интерфейсу lxcbr0 и назначить адрес каждого контейнера этому интерфейсу моста.

Опять же, это всего лишь предположение, основанное на предоставленных вами данных. Невозможно точно сказать, не зная фактическую конфигурацию вашего провайдера.