web-dev-qa-db-ja.com

LXDコンテナーの静的IPv6アドレスを設定する方法

Ubuntu Xenialホストでは、xenial-backportsからLXD 2.12を実行しています。コンテナーの外部からコンテナーのipv4アドレスを静的アドレスに変更するのは簡単ですが、そのipv6アドレスを変更することはできません。これを行う正しい方法は何ですか?

IPv4とIPv6のlxdbr0ブリッジでlxdを構成しました。構成の関連部分は次のようになります。

ipv4.address: 10.122.45.1/24
ipv4.nat: "true"
ipv6.address: fd42:7146:f400:1::1/64
ipv6.nat: "true"

Xenial(contxenial)でコンテナーを起動した後、eth0のifconfigは次のようになりました。

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以降)。

3
Peter Gloor

LXC/LXDのプロジェクトリーダーであるStéphaneGraberから、次の情報が得られました 私の問題への回答

静的IPv6割り当ては、ステートフルDHCPモードでのみ機能します。そうでない場合、アドレスの割り当てにSLAACが使用されます。

次の方法でステートフルDHCPを有効にできます。

lxc network set lxdbr0 ipv6.dhcp.stateful true

ただし、デフォルトでDHCPv6を実行するLinuxディストリビューションはないため、実際にDHCPv6を実行するには、コンテナーの/ etc/network/interfaces(またはディストリビューションに基づいた同様のもの)を更新する必要もあります。

これは、私がドキュメントで見つけることができなかった欠落した部分でした。また、IPv4で実行できるのと同じ簡単な方法で、コンテナの外部からIPv6アドレスを変更することはできないことも意味します。

私の場合、コンテナ内の/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から呼び出されます。他のディストリビューションでは異なる場合があります。

最後に、コンテナの再起動後に動作するはずです(少なくとも動作しました)。

これが他の人にも役立つことを願っています。

3
Peter Gloor