當前位置: 首頁>>技術教程>>正文


Debian/Ubuntu中的靜態IPv6地址廣告和IPv6自動配置

, , ,

問題描述

我有一個通過IPv6自動配置發布IPv6地址的網絡。為了允許DNS查找並擁有精美的IP地址,我們通過/etc /network /interfaces設置了”static” IPv6地址:

auto eth0
iface eth0 inet dhcp
iface eth0 inet6 static
    address a:b:c:d:e::f 
    netmask 64

現在,無論何時我們現在通過IPv6連接,Linux都會使用IPv6自動配置地址:

 a:b:c:d:21d:60ff:fe4a:479

而不是靜態IPv6地址:

 a:b:c:d:e::f

另一端的服務器僅看到自動配置地址。

有沒有一種方法可以強製linux(Debian /Ubuntu)對輸出數據包使用靜態地址?這對於反向DNS和防火牆設置特別有趣。

我不想禁用IPv6自動配置,因為我無法控製路由器發布的設置。

最佳思路

當然,防止使用自動配置地址的最簡單方法是通過執行以下操作來防止內核創建地址:

echo 0 >/proc/sys/net/ipv6/conf/eth0/autoconf

請注意,這不需要您重新配置路由器,以使其停止發出該前綴的廣告。

注意在注釋中,您談論的是/etc/gai.conf,但這不適用。這是glibc的配置文件,而不是內核,它會影響目標地址的選擇而不是源地址的選擇。

如果您仍然希望擁有自動配置地址,但又不想被使用,請繼續閱讀…

用於同一網絡上主機之間的通信

我找不到一種強迫地址選擇優先於靜態地址而不是自動配置的好方法。通過查看RFC 3484的所有規則,它們都沒有真正的幫助。

您可以嘗試在路由表中為連接的子網更改/64路由,以使其具有”src”屬性,但是當子網中的任何地址添加到接口中而我不成功時,它會由內核自動生成。事後編輯它。

與互聯網上其他主機進行通信

有幾種方法可以影響出站連接的地址選擇。最明顯的是在路由上使用src屬性。例如:

ip route add ::/0 via <gateway> src <desired-source-IP-address>

但是,也許您的默認路由來自路由器公告消息,並由內核自動插入。在這種情況下,您不可能為該路由指定”src”屬性。因此,這是基於配置地址標簽的另一種方法。

默認情況下,在Linux中,內核的地址標簽表如下所示:

prefix ::1/128 label 0
prefix ::/96 label 3
prefix ::ffff:0.0.0.0/96 label 4
prefix 2001::/32 label 6
prefix 2001:10::/28 label 7
prefix 2002::/16 label 2
prefix fc00::/7 label 5
prefix ::/0 label 1

這個想法是,當將數據包啟動到帶有標簽x的目標地址時,內核傾向於使用帶有相同標簽x的源地址。因此,例如,如果您將數據包發送到具有6to4地址(即2002 :: /16中的地址)的主機,則該標簽的標簽為2,內核將更喜歡為傳出數據包選擇6to4源地址,如果有一個可用的。

常規IPv6目標的標簽為1(:: /0,與所有內容匹配)。這是您想做的:

  • 覆蓋本地子網的標簽分配,以便本地子網上的地址獲得”martian”標簽(此標簽未被其他任何人使用)。此規則將匹配整個子網,因此它將是/64。

  • Re-override所需靜態地址的標簽分配,將其設置回1(即,與其餘Internet地址獲得的標簽相同)。該規則將僅匹配特定的所需地址,因此它將為/128。

這樣,本地子網上的所有這些自動配置地址都將獲得火星人的標簽,該標簽與互聯網上的其他任何標簽都不匹配,因此將不會被使用,而所需源地址的標簽將是1,因此它將與目標地址匹配並被選擇。

如果您的前綴是2001:db8 :: /64並且您選擇的靜態地址是2001:db8 :: aaaa /128,則:

ip addrlabel add prefix 2001:db8::/64 label 99
ip addrlabel add prefix 2001:db8::aaaa/128 label 1

您可以將這兩個命令添加為/etc/network/interfaces中的up命令,以便每次接口出現時都將執行它們。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/10536.html,未經允許,請勿轉載。