
Во-первых, моему выделенному серверу выделен специальный адрес IPv6, всего 1. Адрес ::1/128.НоЯ могу назначить адреса eth0 (например, ::2/128, ::3/128 и т.д.).
Теперь я хотел бы запустить контейнеры LXC на этом сервере, но я хотел бы, чтобы они были гражданами первого класса, я хотел бы, чтобы у них был собственный адрес IPv6.
LXC с IPv4 работает отлично. Я могу запустить контейнер и из него пинговать мир. У меня есть устройство-мост, которое называется lxcbr0
.
Честно говоря, я не знаю, как действовать. В конкретной конфигурации LXC, которая у меня есть ('prefix' означает назначенный мне, ну, префикс):
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. Я назначил ему prefix::2/128, это я использую в конфигурации LXC выше. В 'interfaces':
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.
Буду признателен за некоторые указания!
решение1
Мне кажется, что вы тут смешиваете несколько разных вещей. Во-первых, я сомневаюсь, что сетевая маска на порту 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 и назначить адрес каждого контейнера этому интерфейсу моста.
Опять же, это всего лишь лучшее предположение, основанное на предоставленных вами данных. Не зная фактической конфигурации вашего провайдера, невозможно сказать наверняка.