На Ubuntu Гостеприимный хост я выполняю LXD 2.12 от гостеприимных бэкпортов. В то время как легко измениться, контейнеры ipv4 адресуют к статическому адресу снаружи контейнера, я не могу изменить его адрес ipv6. Что правильный путь состоит в том, чтобы сделать это?
Я настроил lxd с мостом lxdbr0 с IPv4 и IPv6. Связанная часть в конфигурации похожа на это:
ipv4.address: 10.122.45.1/24
ipv4.nat: "true"
ipv6.address: fd42:7146:f400:1::1/64
ipv6.nat: "true"
После того, как я запустил контейнер с Гостеприимным (contxenial), его ifconfig для eth0 выглядел примерно так:
peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3e:bc:f5:8d
inet addr:10.122.45.223 Bcast:10.122.45.255 Mask:255.255.255.0
inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
:
Теперь я хотел изменить обоих, его ipv4 И его ipv6 адресуют к статическим IP адресам с помощью следующих команд:
peter@led:~$ lxc network attach lxdbr0 contxenial eth0
peter@led:~$ lxc config device set contxenial eth0 ipv4.address 10.122.45.71
peter@led:~$ lxc config device set contxenial eth0 ipv6.address fd42:7146:f400:1::71
Наконец я перезапустил свой контейнер.
peter@led:~$ lxc restart contxenial
К моему удивлению адрес IPv4, измененный как ожидалось, но адрес IPv6, не сделал!
peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3e:bc:f5:8d
inet addr:10.122.45.71 Bcast:10.122.45.255 Mask:255.255.255.0
inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
:
Однако dnsmasq.hosts содержит обоих, измененный адрес IPv4, а также измененный адрес IPv6.
peter@led:~$ sudo cat /var/lib/lxd/networks/lxdbr0/dnsmasq.hosts
00:16:3e:bc:f5:8d,id:*,10.122.45.71,[fd42:7146:f400:1::71],contxenial
Что это, я делаю неправильно? Что правильный путь состоит в том, чтобы в настоящее время достигать этого (начиная с LXC/LXD 2.3 или выше)?
От StГ©phane Graber, руководителя проекта LXC/LXD, у меня есть следующий ответ на мой выпуск :
Статическое присвоение IPv6 может только работать в режиме DHCP с сохранением информации как иначе, SLAAC используется для присвоения адреса.
можно включить DHCP с сохранением информации с:
lxc network set lxdbr0 ipv6.dhcp.stateful true
, Но примечание, что никакой дистрибутив Linux не делает DHCPv6 по умолчанию, таким образом, необходимо будет также обновить/etc/network/interfaces контейнера (или подобный на основе распределения), чтобы на самом деле сделать DHCPv6.
Это было недостающей первой частью, не мог найти ни в какой документации. Это также означает, что не возможно изменить адреса IPv6 снаружи контейнера тем же простым путем, это может быть сделано с IPv4.
В моем случае я должен был добавить следующую строку к/etc/network/interfaces.d/50-cloud-init.cfg в контейнере.
iface eth0 inet6 dhcp
Без комментариев это должно выглядеть примерно так:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
файл называют от/etc/network/interfaces. Это могло бы отличаться на других дистрибутивах.
Наконец это должно работать после перезапуска контейнера (по крайней мере, это работало на меня).
я надеюсь, что это помогает другим также.