macvlanとdhcpを介してネットワークに接続するnspawnコンテナを作成したいと思います。私が見つけたすべての文書は非常に有益でしたが、それを設定するための段階的なプロセスを提供していませんでした。
これまでに私がしたことは、systemd-containerを含むdebootstrapを使用してコンテナ(debianベース)を作成することです:
debootstrap --arch=armhf --include=systemd-container stretch /var/lib/machines/raspbian-09 http://archive.raspbian.org/raspbian
ローカルホストネットワーク
ランニング:
systemd-nspawn -b -M raspbian-09
または
machinectl raspbian-09
ユニットファイル /etc/systemd/nspawn/raspbian-09.nspawn には以下が含まれます。
[Exec]
Boot=true
PrivateUsers=no
[Network]
Private=no
VirtualEthernet=no
どちらの場合も、ネットワーク接続は良好です。
マクエバーランド
macvlanの場合は、次のコマンドを実行します。
systemd-nspawn -b -M raspbian-09 --network-macvlan=eth0
または
machinectl raspbian-09
ユニットファイル /etc/systemd/nspawn/raspbian-09.nspawn には以下が含まれます。
[Exec]
Boot=true
PrivateUsers=no
[Network]
MACVLAN=eth0
どちらの場合も、ネットワーク接続は機能しません。
コンテナ内でmv-eth0インタフェースが作成されたことがわかります。
# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 mv-eth0 ether degraded configuring
しかし、IPv4アドレスはありません:
# ip a
mv-eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
ホストとコンテナでどのような設定を行う必要がありますか?
答え1
考えられる解決策の1つは次のとおりです。
次の作業はすべてコンテナで完了する必要があります。
コンテナがsystemd-networkdを使用していることを確認してください。次のコマンドを実行して、これらのケースであることを確認できます。
systemctl status systemd-networkd
サービスがアクティブで実行されていない場合は、サービスを有効にして開始する必要があります。
systemctl enable systemd-networkd
systemctl start systemd-networkd
有効化および開始されていない場合は、systemd-resolved サービスを有効化して起動する必要がある場合があります。
systemctl enable systemd-resolved
systemctl start systemd-resolved
macvlanインターフェイスで動的ipv4アドレスを生成する必要がある場合は、/etc/systemd/network/mveth0.network
次の内容でネットワーク設定ファイルを生成できます。
[Match]
Name=mv-eth0
[Network]
DHCP=ipv4
macvlanインターフェイスに固定ipv4アドレスを設定する必要がある場合。たとえば、ゲートウェイアドレスが192.168.1.1で、ipv4アドレスを192.168.1.14/24に設定する必要がある場合は、ネットワーク設定ファイルで次のものを使用できます/etc/systemd/network/mveth0.network
。
[Match]
Name=mv-eth0
[Network]
IPForward=yes
Address=192.168.1.14/24
Gateway=192.168.1.1
# DNS= ?
ファイルを生成したら、systemd-networkdサービスを再起動する必要があります。
systemctl restart systemd-networkd
コマンドを実行するには sudo を使用する必要があります。