設定繼承委託前綴的靜態 IPv6 位址

設定繼承委託前綴的靜態 IPv6 位址

我的 ISP (comcast) 委託了一個前綴,我的路由器將前綴委託 (pd) 傳遞到 LAN。我的 Debian 機器正在獲取前綴並使用 EUI-64 位址進行附加。這很好,但不太令人難忘。我更喜歡在 PD 前綴中添加一個額外的“虛榮”地址。

一些特殊性:

  • PD 為(例如 2601:8:abcd:abcd/64)
  • 我的 Linux 機器自動設定 eui-64: 2601:8:abcd:abcd:DEAD:BEff:feEF:CAFE (對於 MAC DE:AD:BE:EF:CA:FE)

我想要的是手動建立一個介面: 2601:8:abcd:abcd::2 作為靜態全域位址,但如果 Comcast 前綴委託發生變化,請讓介面採用新的委託前綴並使用靜態後綴。

答案1

我認為您正在尋找的是:

ip token set ::dead:beef/64 dev eth0

據我了解,您在運行通常運行的任何內容之前運行它來獲取 IP6 位址,並將0:0:dead:beef使用它而不是正常的 EUI-64。

奇怪的是,這似乎沒有添加相應的連結本地地址,而是添加了普通的 EUI-64 前綴fe80::/64。您可以透過以下方式手動修復此問題:

ip addr flush scope link dev eth0
ip addr add fe80::dead:beef/64 dev eth0

根據需要替換後綴、前綴大小和介面 ( ::dead:beef, /64, )。eth0

答案2

同時,幾乎所有 GNU/Linux 發行版都預設使用網路管理器(根據http://news.softpedia.com/news/networkmanager-1-4-adds-support-for-setting-ipv6-tokenized-interface-identifiers-507601.shtml)我認為其他討論在https://unix.stackexchange.com/a/403541/259695可能會有幫助。令牌可以透過以下方式設置

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::dead:beef" # or "::2" - as you like

它將寫入IPV6_TOKEN=::dead:beef/etc/sysconfig/network-scripts/ifcfg-eth0 以在重新啟動後繼續存在。若要立即套用此功能,請重新啟動介面

nmcli connection up id eth0  # restart

答案3

除了公佈網路前綴之外,您還需要使用有狀態 DHCPv6 服務。

與DHCPv4 類似,有狀態模式下的DHCPv6 伺服器為主機分配您想要的範圍內的位址- 它可以是一個非常小的範圍,例如2601:8:abcd:abcd::10-2601:8:abcd: abcd:: 99.我一直在使用網域解析在我的路由器中。

通常,除了 DHCPv6 分配的位址之外,主機仍會自主產生單播 IPv6 位址 - 每個介面將有兩個(甚至更多)單播 IPv6 位址。您可以透過修改路由器的設定來關閉該行為 - 停用自治位址設定標誌即可解決問題。但也會導致大多數 Android 裝置無法取得 IPv6 位址; Android(至少使用 KitKat 4.4.4)仍然無法正確支援 DHCPv6...

答案4

我不敢相信這個問題還沒得到解答!

偉大的於爾根的回答但不適用於使用networkd而不是NetworkManager來呈現網路的伺服器。

對於需要自我調整、半靜態 IPv6 的伺服器,我們必須新增以下行

ipv6-address-token: "::ace:face"

到netplan yaml中的介面描述。例如

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      ipv6-address-token: "::ace:face"
      addresses:
        - <ipv4 static address>
      nameservers: ...

但是,如果啟用了 IP 轉發,則必須新增以下行/etc/sysctl.conf以覆蓋accept_ra網路預設禁用的情況。這個邏輯(如果我們是路由器,我們不應該接受其他路由器的 ra)是有道理的,但在某些情況下並不適用。

net.ipv6.conf.eth0.accept_ra=2

儘管有 ip 轉送設置,sysctl conf 中的行仍強制接受路由器公告 (ra)。這是至關重要的,因為 ra 通知我們委託的前綴。

netplan 中的 IPv6 位址令牌範本行用於產生 IPv6 位址,該位址使用路由器提供的前綴和我們指定的位址來產生位址。因此,我們最終得到以下形式的地址

<delegated prefix>::ace:face/<bit length of netmask>

儘管如此,不是完全靜態的,而是可預測的,並且當前綴更改時我不必重新配置每個伺服器。

相關內容