Networking

Debian 忽略靜態 IPv6 配置

  • September 2, 2020

原帖

我正在嘗試為我的 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。

目前我還沒有解決我的問題,但在另一台主機(這次是 ArchLinux)上使用相同設置進行的測試工作正常。因為配置實際上是相同的,但主機系統不同,我認為我的問題與我的主機系統上的配置錯誤有關(例如,我必須啟用另一個核心功能)。~~ 我沒有使用完全相同的配置。我的普通主機(Gentoo)使用 Debian 10,我的 ArchLinux 測試機器使用 Debian 11。在我的 Gentoo 主機上使用 Debian 11 時,它執行良好。但是,如果我使用 Debian 10 創建一個新容器,則 ip 配置會按預期工作。

最後,我通過更改文件中條目的順序解決了我的問題/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

如果首先配置靜態條目,則一切正常。

我不認為我可以給你一個完整的答案,只是一些調查…

在我看來,這不像您的配置被忽略了,它看起來像是被某些東西覆蓋了。 IPv6 地址FDxx::以本地地址 IP開頭。通常未配置的介面將具有連結本地地址(開始FE80::)以及其他地址。但是您的系統沒有顯示這些。 FDxx::地址不只是隨機出現,所以有些東西已經配置了這些。

我以前曾遇到過多個網路管理器附帶的基於 Debian 的發行版的問題。特別是在Beagle Bone Black附帶的 Debian 分支上,安裝了一個名為connman的軟體包,以及普通 Debian 附帶的 DHCP 客戶端。

我會檢查您的系統,看看是否有其他任何東西可能覆蓋您的 IPv6 網路配置。

引用自:https://unix.stackexchange.com/questions/565770