Routing
這個 IPv6 地址來自哪裡?
**TL;DR:**是否有命令顯示為什麼每個 IPv6 地址已分配給給定的 NIC?例如,顯示哪個路由器通告了該前綴。
細節
我已將網路設置為使用帶有 ULA 前綴的 IPv6 地址
fdaa::/64
。這行得通,我有這樣的地址:$ ip addr show dev enp0s25 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether b8:ae:ed:72:7d:5f brd ff:ff:ff:ff:ff:ff inet 192.168.0.16/24 brd 192.168.0.255 scope global enp0s25 valid_lft forever preferred_lft forever inet6 fdaa::6666:b3ff:0:d1a/128 scope global noprefixroute valid_lft forever preferred_lft forever inet6 2001:4479:7caa:9372:baae:edff:fe72:7d5f/64 scope global mngtmpaddr noprefixroute valid_lft forever preferred_lft forever inet6 fdaa::baae:edff:fe72:7d5f/64 scope global mngtmpaddr noprefixroute valid_lft forever preferred_lft forever inet6 fe80::baae:edff:fe72:7d5f/64 scope link valid_lft forever preferred_lft forever
這裡我有一個公共
2001:
地址,一個本地連結fe80:
地址,但我的 ULA子網中有兩個地址。fdaa:
我只想要這個子網中的一個地址,因為我有兩個會出錯。例如,我不能將此機器用作 DNS 伺服器,因為它回復了錯誤的 IP:
host fdaa::ba27:ebff:feea:ad9d fdaa::baae:edff:fe72:7d5f ;; reply from unexpected source: fdaa::6666:b3ff:0:d1a#53, expected fdaa::baae:edff:fe72:7d5f#53 ;; reply from unexpected source: fdaa::6666:b3ff:0:d1a#53, expected fdaa::baae:edff:fe72:7d5f#53 ;; connection timed out; no servers could be reached
刪除 IP 並重新啟動網路介面會再次恢復它,所以我的網路上的某些東西似乎在宣傳前綴,但我不知道如何弄清楚它來自哪裡!
是否有一些命令列出了每個 IP 地址並解釋了它是如何分配的,哪個路由器將其作為可用前綴進行通告,等等?
經過一些實驗,我發現可以使用以下命令:
ip monitor
它將顯示正在發生的事情的列表。在一個終端中執行它,在另一個終端中重新啟動網路介面,您會看到在刪除每個 IP 地址然後重新添加時列印出一行。
它仍然沒有準確解釋 IP 的來源,但它確實告訴我這是一個
ra
(路由器廣告),它讓我可以查看我的路由器配置。在我的情況下,我宣傳的
fdaa::/64
前綴與我分配為靜態 IP 的前綴相同(假設此子網中的靜態 IP 會阻止分配動態 IP),但我最終得到了相同的靜態 IP 和動態 IP子網,這導致了問題。對於這是否是一個錯誤,我仍然有兩種看法。經過深思熟慮後,我更改了路由器以通告不同的前綴(實際上是同一 ULA 中的不同子網
/48
,所以fdaa:0:0:1/64
),因為這樣兩個子網都適合相同的 ULA 分配,但它們是不同的子網,它們不會導致機器回复當它具有屬於兩個子網的 IP 時,來自錯誤的 IP。