Dan*_*iel 5 networking ip ipv6 iproute network-interface
我正在尝试为我的 Debian 容器(在 LXD 上运行)配置静态 IPv6 地址,但系统始终忽略我的配置。
\n目前我的/etc/network/interfaces样子是这样的:
auto eth0\niface eth0 inet dhcp\niface eth0 inet6 dhcp\n\nauto eth1\niface eth1 inet static\n address 10.1.0.10/16\n gateway 10.1.0.1\niface eth1 inet6 static\n address fd01::10/64\n gateway fd01::1\n autoconf 0\nRun Code Online (Sandbox Code Playgroud)\n静态 IPv4 配置和 IPv6 的 DHCP 选项(在 eth0 上)工作正常,如命令ip addr所示:
76: eth0@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000\n link/ether 00:16:3e:53:50:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0\n inet 10.0.0.10/16 brd 10.0.255.255 scope global dynamic eth0\n valid_lft 84286sec preferred_lft 84286sec\n inet6 fd00::10/128 scope global\n valid_lft forever preferred_lft forever\n78: eth1@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000\n link/ether 00:16:3e:83:c3:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0\n inet 10.1.0.10/16 brd 10.1.255.255 scope global eth1\n valid_lft forever preferred_lft forever\n inet6 fd01::658:fe25:52de:cc45/64 scope global dynamic mngtmpaddr\n valid_lft 3372sec preferred_lft 3372sec\nRun Code Online (Sandbox Code Playgroud)\n但我的系统总是忽略静态 IPv6 配置部分,并始终生成自己的动态 IPv6 地址,而不是使用预先配置的地址。上面的输出还表明该接口上的 IP 地址是动态生成的。
\n但是,如果我使用该命令设置静态 IPv6 地址,ip addr add fd01::10/64 dev eth1它可以工作,但这不是解决此问题的适当且永久的解决方案。
该命令networkctl list返回以下输出:
IDX LINK TYPE OPERATIONAL SETUP\n WARNING: systemd-networkd is not running, output will be incomplete.\n (...)\n 16 eth0 ether n/a unmanaged\n 18 eth1 ether n/a unmanaged\n (...)\nRun Code Online (Sandbox Code Playgroud)\n我认为这意味着 systemd 网络管理器被禁用。
\n/etc/init.d/networking/etc/init.d/networking重新启动容器并获取服务日志后,systemctl status networking.service显示以下消息
\xe2\x97\x8f networking.service - Raise network interfaces\n Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)\n Active: failed (Result: exit-code) since Sat 2020-02-08 00:22:06 UTC; 1min 31s ago\n Docs: man:interfaces(5)\n Process: 31 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)\n Main PID: 31 (code=exited, status=1/FAILURE)\n\nFeb 08 00:22:06 Core dhclient[112]: message status code Success: "all addresses still on link"\nFeb 08 00:22:06 Core ifup[137]: RTNETLINK answers: File exists\nFeb 08 00:22:06 Core ifup[31]: ifup: failed to bring up eth1\nFeb 08 00:22:06 Core systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE\nFeb 08 00:22:06 Core systemd[1]: networking.service: Failed with result \'exit-code\'.\nFeb 08 00:22:06 Core systemd[1]: Failed to start Raise network interfaces.\nRun Code Online (Sandbox Code Playgroud)\n如果我将 eth0 配置为使用静态 IPv6 地址,则 eth0 也会出现该错误。\n我通过按照本教程配置静态 IPv6 地址发现了此错误消息。
\n我一开始没有想到的一件事是该问题可能与我的主机操作系统有关。因此,我没有写到我的主机系统是带有定制内核的 Gentoo。\n我没有使用完全相同的配置。我的普通主机(Gentoo)使用 Debian 10,我的 ArchLinux 测试机使用 Debian 11。在我的 Gentoo 主机上使用 Debian 11 时,它工作正常。而且,如果我使用 Debian 10 创建一个新容器,ip 配置也会按预期工作。
\n目前我还没有解决我的问题,但在另一台主机(这次是 ArchLinux)上使用相同的设置进行的测试工作得很好。因为配置实际上是相同的,但主机系统不同,我认为我的问题与主机系统上的配置错误有关(例如,我必须启用另一个内核功能)。
最后,我通过更改文件中条目的顺序解决了我的问题/etc/network/interfaces。现在看起来是这样的:
auto eth1
iface eth1 inet static
address 10.1.0.10/16
gateway 10.1.0.1
iface eth1 inet6 static
address fd01::10/64
gateway fd01::1
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
Run Code Online (Sandbox Code Playgroud)
如果首先配置静态条目,则一切正常。