Ubuntu

在 Linux 上設置有狀態 DHCPv6

  • September 6, 2018

我想在我的本地網路上為 IPv6 設置一個 DHCP 伺服器,用於發布地址和 DNS/NTP 等更多資訊。從我的 ISP 那裡,我得到了 IPv6 前綴,我將在後面的片段中將其稱為 <prefix>。

我使用 isc-dhcp-server。在 /etc/dhcpd.conf 我有

option dhcp6.name-servers &lt;prefix&gt;::2;
option dhcp6.info-refresh-time 21600;

subnet6 &lt;prefix&gt;::/64 {
   range6 &lt;prefix&gt;::1 2&lt;prefix&gt;::ffff:ffff;
}

eth0 介面(連接到路由器)在 /etc/networking/interfaces 文件中靜態配置:

iface eth0 inet6 static
address &lt;prefix&gt;::2
netmask 64

客戶端具有帶有網路管理器的 Ubuntu 14.04 LTS,並通過 wlan0 介面綁定到路由器(路由器充當接入點)。在 IPv6 選項卡的 Ubuntu 網路管理器的 GUI 配置下,我選擇“方法:自動,僅 DHCP”(因此我希望客戶端的狀態 DHCPv6 配置 - 它應該獲得超出上述定義範圍的 ipv6 地址)。

但是,這不會發生。ifconfig 暗示,客戶端是使用無狀態方法配置的(配置的 ipv6 地址具有客戶端 wlan0 HW-Address 編碼)

我懷疑路由器設置了錯誤的廣告標誌。但我無法配置路由器,因為它是由 ISP 提供的。我能做些什麼?有什麼建議嗎?

簡而言之:我認為 DHCP 伺服器偵聽了錯誤的介面。

長答案: 假設您從 ISP 獲得前綴 2001:DB8:1234::/48。此外,我們假設您的路由器有兩個網路介面:eth0(到 ISP 的上行鏈路)和 wlan0(用於客戶端)。如果您現在配置 DHCPv6 伺服器,請執行以下操作:

subnet6 2001:DB8:1234::/64 {
   range6 2001:DB8:1234::10 2001:DB8:1234::ffff:ffff;
}

然後在啟動 DHCP 伺服器後,它將在伺服器上查找配置在 2001:DB8:1234::/64 範圍內的介面,並在這些介面上偵聽 DHCP 請求。

這意味著必須配置伺服器介面

  • IP不在2001:DB8:1234::/64 範圍內的 eth0(例如 2001:DB8:1234:1::2/64)
  • wlan0 的 IP 在 2001:DB8:1234::/64 範圍內(例如 2001:DB8:1234::2/64)

此外,您應該使用一些調試輸出啟動伺服器,以測試請求是否來自客戶端。對於 ISC dhcpd,您可以使用“-d -f”選項,例如

/usr/sbin/dhcpd -6 -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid -f -d

引用自:https://serverfault.com/questions/710334