我在具有橋接網路的主機上有一個虛擬機器(因此具有自己的 MAC 位址)。主機和虛擬機器都運行 CentOS。他們的網路由/etc/sysconfig/network-scripts/ifcfg-enpXsY
包含靜態 IP 位址的簡單檔案進行管理。 IPv4 運作得很好。
我已為虛擬機器分配了一個 IPv6 位址(主機也有一個),該位址在資料中心中正確路由。不過,大多數連線都使用 IPv4(該機器還沒有 DNS AAAA 條目,仍在測試 IPv6)。
當我啟動虛擬機器時,它具有完整的 IPv6 連線。然而,一段時間後 IPv6 連線停止運作(IPv6 魔法?)。我已將問題範圍縮小到鄰居(ARP/NDISC 快取)資料:
IPv6 不工作,無法透過 IPv6 輸入或輸出 ping 或連接,然後我看到:
# ip -6 neighbour
fe80::1 dev enp1s2 lladdr 0c:86:72:2e:04:28 router STALE
刷新快取的修復/解決方法:
# ip -6 neighbour flush dev enp1s2
# ip -6 neighbour
(empty, as expected)
然後ping6
主機從VM內部填充快取:
# ping6 2912:1375:23:9a6c::2
PING 2912:1375:23:9a6c::2(2912:1375:23:9a6c::2) 56 data bytes
64 bytes from 2912:1375:23:9a6c::2: icmp_seq=1 ttl=64 time=2.35 ms
64 bytes from 2912:1375:23:9a6c::2: icmp_seq=2 ttl=64 time=0.468 ms
^C
# ip -6 neighbour
fe80::1 dev enp1s2 lladdr 0c:86:72:2e:04:28 router REACHABLE
2912:1375:23:9a6c::2 dev enp1s2 lladdr 08:21:4b:b7:f8:31 DELAY
IPv6 鄰居/ARP 表已恢復有效性,並且連接正常工作!
所以我的問題是:
- 為什麼快取會過時?
- 我可以做什麼來避免它?
- 上面的命令為什麼/如何修復它?
當然,我可以在cron
作業中執行這些命令(多久一次?),但我認為 IPv6 一般情況下並不需要這樣做?
PS:我使用了一個腳本進行測試:IPv6 堆疊大約每 20 分鐘就會崩潰一次。 RFC 可以解釋嗎?
PPS:防火牆配置(縮短輸出,希望所有相關位元):
# ip6tables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
9023 709K ACCEPT icmpv6 !lo * ::/0 ::/0
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
9360 785K ACCEPT icmpv6 * !lo ::/0 ::/0
因此,ICMPv6 在虛擬機器上接受輸入/輸出。我需要檢查主機上的過濾嗎?
答案1
一般來說,過時狀態是一件好事,實際上我們擁有一個過時狀態是可以接受的。
讓我們來看看 RFC 4861,第 5.1 節。 :
STALE The neighbor is no longer known to be reachable but until traffic is sent to the neighbor, no attempt should be made to verify its reachability.
鄰居不再被認為是可達的(計時器過期,最近沒有流量,等等),一旦流量再次發送到鄰居,可及性將被「驗證」。
因此,如果您可以再次向鄰居發送流量,則沒有任何問題。