systemd-nspawn/machinectl 和 macvlan

systemd-nspawn/machinectl 和 macvlan

我想创建一个通过 macvlan 和 dhcp 连接到网络的 nspawn 容器。我找到的所有文档都非常有指导性,但没有提供此设置的分步过程。

到目前为止我所做的是使用 debootstrap 包括 systemd-container 创建容器(debian base):

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

一种可能的解决方案如下:

以下所有操作均需在容器中完成。

检查您的容器是否正在使用 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 来运行命令

相关内容