IPv6 連接超時
我遇到了 IPv6 連接問題。只有那些。它們大約每 10 分鐘超時一次(我想是因為地址更新)。
我在一年左右的時間裡嘗試過的每一種基於 debian 的 Linux 風格都會發生,x86 和 x64,跨越不同的 PC,有線和無線。
我目前正在使用帶有核心 3.13.0-37-generic x86_64(以前是 3.2.0-60)和 NetworkManager 0.9.8.8 的 Linux Mint 17.1。有時當我嘗試立即重新啟動下載時,我得到“沒有主機路由”。因為我的 IPv6 地址似乎暫時消失了。
像這樣: http: //pastebin.com/4Xida2qu
我正在執行雙棧 IPv4 - IPv6 (PPPoE),這就是我的 Netgear DGND3700v2 路由器(韌體版本 V1.1.00.22_1.00.22)的配置方式:http: //i.imgur.com/YgxAyQb.png
有問題的網路配置文件設置為忽略IPv6,但無論如何我都會獲得全球 IPv6 地址。更改為自動沒有任何區別。這令人困惑,但我想這只是核心在做它的工作。
防火牆規則或缺少防火牆規則沒有任何區別,但它們基本上是:
iptables -P INPUT DROP ip6tables -P INPUT DROP iptables -P FORWARD DROP ip6tables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ip6tables -I INPUT -p icmpv6 -j ACCEPT
嘗試對 LAN 使用 DHCP 而不是 autoconf,現在我在 windows 上沒有超時,但在 linux 上沒有 ipv6 連接(即使我似乎有一個全域地址,但無論如何我都會收到“網路無法訪問”錯誤)。
tcpdump -vvni wlan0 icmp6
輸出的相關部分無法到達的目的地:
19:25:05.381081 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 88) {GW's ipv6 - redacted} > {My pc's ipv6 link-local addr - redacted}: [icmp6 sum ok] ICMP6, destination unreachable, beyond scope 2001:760:ffff:b1::34, source address {My pc's ipv6 link-local addr - redacted} 19:25:12.948944 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 88) {GW's ipv6 - redacted} > {My pc's ipv6 link-local addr - redacted}: [icmp6 sum ok] ICMP6, destination unreachable, beyond scope 2001:760:ffff:b1::34, source address {My pc's ipv6 link-local addr - redacted} 19:25:18.446900 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 88) {GW's ipv6 - redacted} > {My pc's ipv6 link-local addr - redacted}: [icmp6 sum ok] ICMP6, destination unreachable, beyond scope 2001:760:ffff:b1::34, source address {My pc's ipv6 link-local addr - redacted}
路由器請求:
19:25:18.775794 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) {Unknown link-local ipv6 addr - redacted} > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16 source link-address option (1), length 8 (1): {Unknown MAC - redacted} 0x0000: {Unknown MAC - redacted}
路由器廣告:
19:25:18.777825 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 112) {GW's ipv6 - redacted} > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 112 hop limit 64, Flags [other stateful], pref medium, router lifetime 1800s, reachable time 30000s, retrans time 1000s prefix info option (3), length 32 (4): 2a01:2000:2001:91b1::/64, Flags [onlink, auto], valid time 360s, pref. time 360s 0x0000: 40c0 0000 0168 0000 0168 0000 0000 2a01 0x0010: 2000 2001 91b1 0000 0000 0000 0000 unknown option (24), length 24 (3): 0x0000: 4000 0000 0168 2a01 2000 2001 91b1 0000 0x0010: 0000 0000 0000 rdnss option (25), length 24 (3): lifetime 600s, addr: 2a01:2000:2001:91b1:861b:{Gateway} 0x0000: 8800 0000 0258 2a01 2000 2001 91b1 861b 0x0010: {gateway MAC - redacted} mtu option (5), length 8 (1): 1492 0x0000: 0000 0000 05d4 source link-address option (1), length 8 (1): {gateway MAC - redacted} 0x0000: {gateway MAC - redacted}
我也時不時得到這樣的東西,不知道是否重要:
17:09:42.546840 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 1240) {GW's ipv6 - redacted} > {My pc's temp ipv6 addr - redacted}: [icmp6 sum ok] ICMP6, packet too big, mtu 1462
路由器的 radvd.conf(使用 telnet 找到)
interface group1 { AdvSendAdvert on; AdvManagedFlag off; AdvOtherConfigFlag on; MaxRtrAdvInterval 600; MinRtrAdvInterval 198; AdvSourceLLAddress on; AdvReachableTime 30000; AdvRetransTimer 1000; AdvDefaultLifetime 1800; AdvCurHopLimit 64; AdvLinkMTU 1492; prefix 2a01:2000:2001:cd96::/64 { AdvPreferredLifetime 360; AdvValidLifetime 360; AdvOnLink on; AdvAutonomous on; }; route 2a01:2000:2001:cd96::/64 { AdvRouteLifetime 360; }; RDNSS 2a01:2000:2001:cd96:XXXX:XXXX:XXXX:XXXX { AdvRDNSSOpen on; }; };
關於 IPv6 地址的自動配置
目前,IPv6 自動配置(通常)總是依賴於基於 ICMPv6 數據包交換的路由器發現。基本思想是從路由器到客戶端獲取有關網路的資訊。一旦客戶端收到帶有該資訊的路由器通告,它還將了解是否使用 DHCP,尤其是是否將其僅用於其他配置或也用於地址配置。Fedora Wiki中描述了使用 NetworkManager 測試的特定配置。
使用 NetworkManager 配置 IPv6
從 NetworkManager 0.9.6 開始,NetworkManager 中的 IPv6 支持大部分可用,但嚴重依賴於有限的核心自動配置功能。從 NetworkManager 0.9.10 開始,IPv6 配置完全由使用者空間管理,核心的配置方式更好。NetworkManager 的目前分支是 1.0。
以下部分將幫助您使用 NetworkManager 配置主機的良好測試設置,適用於調試類似問題。
連接配置
/etc/NetworkManager/系統連接/:
[ipv6] method=auto
method=ignore
當您希望 IPv6 連接正常工作時,您不得使用。雖然ignore允許基於有限核心的 IPv6 配置而沒有 DNS 和類似的東西,但首選方法是讓 NetworkManager 處理 IPv6 配置。我們實際上希望在未來消除忽略。還有$$ known bugs $$$$ 1 $$在 NetworkManager 試圖解決的 IPv6 自動配置標準中,當
method=auto
.確保您的防火牆沒有阻止重要的數據包
為了簡單的測試,讓防火牆允許:
ip6tables -P INPUT ACCEPT ip6tables -F INPUT ip6tables -P OUTPUT ACCEPT ip6tables -F OUTPUT
確保您沒有使用隱私擴展
過去存在隱私擴展(也稱為臨時地址)的問題。您正在使用 Linux Mint,它是預設打開它們的發行版之一。
注意:您遇到的問題不是因為隱私擴展。您可能可以跳過本節,但我想為任何可能正在調試具有類似症狀的另一個問題的人保留它。
/etc/sysctl.conf:
net.ipv6.conf.default.use_tempaddr = 0
通常你只會使用所有**預設的 insetad,但 NetworkManager 正在讀取文件並專門尋找預設值。這個設置應該足以說服 NetworkManager 我們不想對任何連接使用隱私擴展。NetworkManager 現在應該忽略每個連接的隱私配置。之後只需重新啟動 NetworkManager。
路由器請求和通告時間
從您更新的問題中,我可以看到當 Networkmanager 發出路由器請求時,路由器會立即響應路由器廣告,從您的主機的角度來看,這是一個很好的行為,因為您收到了必要的資訊。問題是它是否總是發生。
此外,路由器應該定期發送路由器廣告,而不是地址超時。當超時臨近時,您的主機可能應該發送路由器請求,以防您錯過來自路由器的資訊。使用您的 NetworkManager 版本,這將是核心的責任。
從另一個更新中,很明顯路由器沒有像它應該的那樣經常發送路由器廣告。有些資訊的有效期短至360秒,但路由器通告的頻率高達600秒。正確的配置是在360 秒的時間跨度內為您提供幾個路由器廣告,以防其中一些失去。
另一方面,當生命週期即將到期時,您的主機可能應該通過路由器請求請求資訊。您可以使用 tcpdump 查看請求和廣告,以查看您的核心是否在最後一次廣告後大約六分鐘內發出請求。如果不是,則可能的症狀是您的連接從最後一個廣告開始僅持續六分鐘,這意味著自建立連接以來六分鐘或更長時間。
推薦的路由器配置
這些標準似乎推薦了一些值,但我寧願使用常識。在非常糟糕的連結(適用於 wifi 和其他)上,您可能會失去許多數據包。所以我基本上會保持所有生命週期至少是最大路由器通告間隔的好倍數。
您的MaxRtrAdvInterval為600 秒,這很酷,因為您將每十分鐘或更短時間獲得更新資訊。MinRtrAdvInterval的唯一目的是稍微隨機化時間,因此您可以保留它或使用300 秒。所有生命週期都可以更改為例如最大間隔的五倍,這意味著3600 秒,這意味著所有資訊將在一個小時內有效,但大約每十分鐘更新一次。
最後的筆記
您可能需要聯繫供應商以修復他們機器中的時間。我不知道它是否可以配置。但是直接更改文件可能對您沒有幫助,因為路由器會在送出配置時重寫它。
您可能還想聯繫核心網路開發人員對發送路由器請求發表評論。隨時讓我參與任何交流。