如何在 16.04 中獲得穩定的 IPv6 位址?

如何在 16.04 中獲得穩定的 IPv6 位址?

我有一個指向我的家庭伺服器的網域。在透過 Wily 發布的每個 Ubuntu 版本中,預設情況下我都有一個穩定的 EIU-64 位址,可以用於我的 AAAA 記錄。然而,安裝Xenial後,我似乎預設沒有獲得穩定的位址。

joejoe@myserver:~$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:24:1d:d2:e3:f4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.101/24 brd 192.168.0.255 scope global enp2s0
       valid_lft forever preferred_lft forever
    inet6 2601:280:3068:2945:74ed:b303:6474:6e29/64 scope global temporary dynamic
       valid_lft 6965sec preferred_lft 3363sec
    inet6 2601:280:3068:2945:ac34:ea15:4340:29a4/64 scope global temporary deprecated dynamic
       valid_lft 6965sec preferred_lft 0sec
    inet6 2601:280:3068:2945:bdfd:6253:b07e:1308/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 6965sec preferred_lft 6965sec
    inet6 fe80::dc3e:6127:bd4e:18b/64 scope link
       valid_lft forever preferred_lft forever

正如您所看到的,所有inet6地址的scope global生命週期都是有限的。有沒有辦法取回我的 EIU-64 地址,或者是否有其他方法可以獲得可以在網域記錄中使用的穩定地址?

答案1

我剛剛想通了這一點。對於 中的每個連接/etc/NetworkManager/system-connections/,您需要設定以下屬性:

[ipv6]
addr-gen-mode=eui64

16.04 中的 NetworkManager 似乎設定了預設stable-privacyaddr-gen-mode

答案2

這裡的其他答案有點不完整:如果不這樣做,更改 NetworkManager 設定沒有幫助其中之一(這實際上是問題所在,請參見下文),並且禁用IPv6 隱私擴展實際上有些無關(同樣,如果您所謂的穩定IPv6 位址在每次啟動時發生變化,則刪除額外的隱私位址也無濟於事)。

詳見這個線程,如果您使用有線連接,則預設的新安裝 16.04 會略有疏忽。 NetworkManager 會自動產生一個「臨時」配置,效果很好,但也是臨時的。這意味著用於散列成假定一致的 IPv6 位址的 GUID 不會被存儲,因此每次啟動時您都會獲得一個新的 GUID。只需進入NetworkManager,在有線連接上按“編輯”,然後不做任何更改地保存它,就會產生一個實際的NM 配置,並帶有保存的GUID,因此每次啟動時您都會獲得相同的IPv6地址。

該位址是一個 RFC7217 位址(GUID、您的前綴等的加密雜湊)——因此,儘管每次啟動都很穩定,但它並不是直接將您的 MAC 位址包含在位址中的類型。如果您想要這些 EUI64 位址之一,這個問題的另一個答案詳細說明如何改變這一點。

答案3

Ubuntu 16.04 和之前的版本一直預設為 EIU-64,因此對於伺服器我必須停用它。我很高興在我的桌面上使用隱私地址。

所以你需要類似的東西:

    sysctl -w net.ipv6.conf.all.use_tempaddr=0
    sysctl -w net.ipv6.conf.default.use_tempaddr=0
    sysctl -w net.ipv6.conf.default.use_tempaddr=0
    sysctl -w net.ipv6.conf.<devname>.use_tempaddr=0

然後是ifdown/ifup。我的結果是,注意 MAC/IPv6 關係:

$ ifconfig enp3s0 | egrep 'HWaddr|Global'
enp3s0    Link encap:Ethernet  HWaddr 74:d0:2b:90:8b:90  
          inet6 addr: 2501:300:d008:61c8:76d0:2bff:fe90:8b90/64 Scope:Global

如果您需要在某些介面而不是其他介面上啟用它,您可以命名特定介面。您可以透過以下方式查看該清單:

$ sysctl -a | grep tempaddr

我不推薦網路管理器用於生產服務。例如,它不能很好地發揮其他作用,例如/etc/sysctl.conf。如果您想這樣做,您將需要在 /etc/networking/interfaces 中新增一個靜態位址或自動配置的條目。我只是使用:

auto enp3s0 
iface enp3s0 inet dhcp
iface enp3s0 inet6 auto
pre-up modprobe ipv6

當然要依口味調整。

相關內容