在 Linux 上設置有狀態 DHCPv6
我想在我的本地網路上為 IPv6 設置一個 DHCP 伺服器,用於發布地址和 DNS/NTP 等更多資訊。從我的 ISP 那裡,我得到了 IPv6 前綴,我將在後面的片段中將其稱為 <prefix>。
我使用 isc-dhcp-server。在 /etc/dhcpd.conf 我有
option dhcp6.name-servers <prefix>::2; option dhcp6.info-refresh-time 21600; subnet6 <prefix>::/64 { range6 <prefix>::1 2<prefix>::ffff:ffff; }
eth0 介面(連接到路由器)在 /etc/networking/interfaces 文件中靜態配置:
iface eth0 inet6 static address <prefix>::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