![原帖](https://linux22.com/image/166972/%E5%8E%9F%E5%B8%96.png)
原帖
我正在尝试为我的 Debian 容器(在 LXD 上运行)配置静态 IPv6 地址,但系统始终忽略我的配置。
目前我的/etc/network/interfaces
样子是这样的:
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
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
autoconf 0
静态 IPv4 配置和 IPv6 的 DHCP 选项(在 eth0 上)工作正常,如命令ip addr
所示:
76: eth0@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:53:50:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.0.10/16 brd 10.0.255.255 scope global dynamic eth0
valid_lft 84286sec preferred_lft 84286sec
inet6 fd00::10/128 scope global
valid_lft forever preferred_lft forever
78: eth1@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:83:c3:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.1.0.10/16 brd 10.1.255.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fd01::658:fe25:52de:cc45/64 scope global dynamic mngtmpaddr
valid_lft 3372sec preferred_lft 3372sec
但是我的系统总是忽略静态 IPv6 配置部分,并且总是生成自己的动态 IPv6 地址,而不是使用预先配置的地址。上面的输出还表明该接口上的 IP 地址是动态生成的。
但是,如果我使用该命令设置静态 IPv6 地址,ip addr add fd01::10/64 dev eth1
它可以工作,但这不是解决此问题的适当且永久的解决方案。
编辑
(1)systemd网络管理器
该命令networkctl list
返回以下输出:
IDX LINK TYPE OPERATIONAL SETUP
WARNING: systemd-networkd is not running, output will be incomplete.
(...)
16 eth0 ether n/a unmanaged
18 eth1 ether n/a unmanaged
(...)
我认为这意味着 systemd 网络管理器被禁用。
(2)/etc/init.d/networking
/etc/init.d/networking
重新启动容器并获取服务日志后,systemctl status networking.service
将显示以下消息
● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2020-02-08 00:22:06 UTC; 1min 31s ago
Docs: man:interfaces(5)
Process: 31 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Main PID: 31 (code=exited, status=1/FAILURE)
Feb 08 00:22:06 Core dhclient[112]: message status code Success: "all addresses still on link"
Feb 08 00:22:06 Core ifup[137]: RTNETLINK answers: File exists
Feb 08 00:22:06 Core ifup[31]: ifup: failed to bring up eth1
Feb 08 00:22:06 Core systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Feb 08 00:22:06 Core systemd[1]: networking.service: Failed with result 'exit-code'.
Feb 08 00:22:06 Core systemd[1]: Failed to start Raise network interfaces.
如果我将 eth0 配置为使用静态 IPv6 地址,则 eth0 也会出现错误。我通过以下方式发现了此错误消息这配置静态 IPv6 地址的教程。
(3)主机系统
我一开始没有想到的一件事是该问题可能与我的主机操作系统有关。因此,我没有写到我的主机系统是具有定制内核的 Gentoo。
我没有使用完全相同的配置。我的普通主机(Gentoo)使用 Debian 10,而我的 ArchLinux 测试机使用 Debian 11。在我的 Gentoo 主机上使用 Debian 11 时,它工作正常。而且,如果我使用 Debian 10 创建一个新容器,ip 配置也会按预期工作。
目前我还没有解决我的问题,但是在另一台主机(这次是 ArchLinux)上使用相同的设置进行的测试工作得很好。因为配置实际上是相同的,但主机系统不同,我认为我的问题与主机系统上的配置错误有关(例如,我必须启用另一个内核功能)。
答案1
最后,我通过更改文件中条目的顺序解决了我的问题/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
如果首先配置静态条目,则一切正常。
答案2
我不认为我可以给你一个完整的答案,只是一些需要调查的事情......
在我看来,这并不像是您的配置被忽略,它看起来像是被某些东西覆盖了。 IPv6地址开头FDxx::
是本地地址IP。通常,未配置的接口将具有链路本地地址(以 开头FE80::
)以及其他地址。但你的系统没有显示这些。 FDxx::
地址不会随机出现,所以某物已经配置了这些。
我之前在使用带有多个网络管理器的基于 Debian 的发行版时遇到过问题。特别是在 Debian 的一个分支上,它附带了比格犬骨黑,有一个包叫康曼以及常规 Debian 附带的 DHCP 客户端。
我会检查您的系统,看看是否有其他内容可能覆盖您的 IPv6 网络配置。
答案3
我遇到了同样的问题 – iface enp0s31f6 inet6 static
(使用地址、网络掩码和网关)在 中进行了配置/etc/network/interfaces
,但是当系统启动时,ip addr
仅显示链路本地 IPv6 地址。
我检查了以下的输出sudo systemctl status networking.service
:
root@redacted ~ # systemctl status networking.service
● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2020-09-02 14:44:47 CEST; 1min 45s ago
Docs: man:interfaces(5)
Process: 467 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Main PID: 467 (code=exited, status=1/FAILURE)
Sep 02 14:44:47 lh-mhk01 systemd[1]: Starting Raise network interfaces...
Sep 02 14:44:47 lh-mhk01 ifup[509]: /bin/sh: 1: route: not found
Sep 02 14:44:47 lh-mhk01 ifup[467]: ifup: failed to bring up enp0s31f6
Sep 02 14:44:47 lh-mhk01 systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Sep 02 14:44:47 lh-mhk01 systemd[1]: networking.service: Failed with result 'exit-code'.
Sep 02 14:44:47 lh-mhk01 systemd[1]: Failed to start Raise network interfaces.
注意这条线
Sep 02 14:44:47 lh-mhk01 ifup[509]: /bin/sh: 1: route: not found
route
解决办法:安装包含该命令的包
sudo apt install net-tools
重启后 IPv6 地址配置正确