IPv6 - 我的 ISP 如何知道如何將流量路由到我的委派子網?
我的問題與這個問題有些相關:什麼 ISP 需要提供才能將本地 IPv6 /56 範圍路由到多個 VLAN這個問題集中在路由器的私有端,我的問題集中在公共端,並且與如何ISP 執行其工作。
假設我的 ISP 給了我一個 IPv6 網路前綴 2001:db8:beef:a700::/56。假設我沒有對它進行子網劃分——我只是將路由器的 LAN 介面放在該子網中。假設我的路由器的 WAN 介面地址為 2001:db8:face:2000::2/64(通過 DHCP 分配),上游網關為 2001:db8:face:2000::1。當上游網關從公共 Internet 收到目標地址為 2001:db8:beef:a700::abcd 的數據包時,它必須將該數據包路由到位於 2001:db8:face:2000::2 的路由器。上游網關如何得知這是它必須做的?
這個問題是根據這些假設提出的:
- 客戶設備未執行任何動態路由協議。我沒有看到客戶設備執行路由協議,所以我必須假設上游網關通過其他一些方式獲知了 2001:db8:beef:a700::/56 網路。那可能是什麼意思?
- 分發前綴的 DHCPv6 伺服器未在上游網關上執行。相反,上游網關正在執行 DHCP 中繼。這允許單個 DHCP 伺服器為可能與社區或城鎮相關的許多網路提供服務。
我試圖用一些 Linux 主機和 pfSense 路由器對此進行測試,但我無法複製 ISP 提供的功能。我非常歡迎糾正我在學習 IPv6 時可能產生的誤解。
IPv6 到消費者網路/客戶通常是通過在 ISP 路由器和家庭路由器 (CPE) 之間使用DHCPv6-PD來提供的。PD 代表前綴委派,是對正常 DHCPv6 選項的補充。它不僅為 CPE 提供鏈路上的地址,而且還給它一個完整的前綴,然後它可以使用它在自己的網路中進一步分發。
為了能夠將前綴路由到正確的 CPE,ISP 路由器必須記住哪些前綴被委派給了哪個 CPE。為此,它會記住 DHCPv6 客戶端 ID (DUID)、其本地鏈路 (fe80:) 地址、委派前綴和租用時間。然後,它會自動為每個前綴創建一條靜態路由,並將 CPE 的鏈路本地地址作為下一跳,並在租約到期時再次刪除該路由。
如果 ISP 路由器本身不是 DHCPv6 伺服器(通常不是),那麼它會執行 DHCPv6 中繼的角色。它將來自 CPE 的 DHCPv6 請求中繼到中央 DHCPv6 伺服器,該伺服器將為每個 CPE 提供前綴。在中繼這些消息時,ISP 路由器將在其中窺探以查看是否正在委派前綴,並且它將根據該消息更新其路由。
例如,這裡是此功能的一些 Cisco 文件。
還有一些交換機可以監聽 DHCPv6 流量。這樣做是為了安全而不是路由。通過查看為哪個乙太網埠提供了哪些 IPv6 地址和前綴,交換機可以確保其他埠上的設備無法使用其他 IPv6 地址來欺騙數據包。這稱為輕量級 DHCPv6 中繼代理,並在RFC 6221中指定。