來自 Linux 發行版的 ping = 20 秒,來自 Windows/Android 的 ping = 即時。為什麼?
我希望這對 Linux 網路愛好者來說是一個有趣的問題。總之,我有一個新的寬頻調製解調器/路由器連接到一個提供 40Mbit/s 頻寬的 ISP。但是,在 Linux 發行版上使用瀏覽器首次連接到任何網站需要 20 多秒,而在 Android 手機或 Windows 上,網站打開的速度與您預期的一樣快。ping 命令**(帶有域名)**也需要 20 秒才能顯示任何輸出(甚至是 IP 地址)。讓我們專注於ping:
- 通過ip地址ping時沒有問題。僅在通過域名 ping 時延遲 20 秒
- 20 秒的 ping 延遲顯示即使我從實時 linux USB 嘗試它 -無論是 Manjaro 還是 Linux Mint
- 即使我在另一台具有實時啟動 Linux 的電腦上嘗試也會看到延遲
- 從執行 Windows 的同一台筆記型電腦 ping 幾乎可以立即返回結果 -即使是我以前從未訪問過的域。
- 從執行 Android 的 Pixel 2XL 手機上的終端 ping 立即返回結果
- 無論我是通過 wifi 還是通過乙太網電纜將筆記型電腦連接到路由器,問題都存在
- 同一台筆記型電腦上的同一個 Linux 發行版,當連接到我的移動熱點時沒有問題
- Ping -4 強制 IPv4 沒有幫助 - 延遲仍然是 20s
- 正如 Manjaro 論壇的一位高級成員所建議的那樣,我嘗試從 openresolv 遷移到 systemd-resolved,但這會將延遲增加到 2 分鐘以上,我不得不回滾更改。
- 在描述了 ping 之後,讓我描述一下 Firefox 在 Linux 上的工作原理。第一次訪問任何網站都需要 20 秒,但此後即使我訪問了一個我之前從未訪問過的網站,它也會按預期打開 - 不到幾秒鐘,但是如果我關閉 Firefox 並打開一個新實例,我再次擁有等待我訪問的第一個網站 20 秒 - 即使它是Google。
正如你所意識到的,這不是一個“有趣”的問題,而是一個相當令人困惑的問題,對我來說幾乎是一個令人興奮的問題。問題特別在於 Linux 和這個新路由器的組合,我不知道在哪裡尋找解決方案。當然,我在 Manjaro 論壇上進行了長時間的討論,但我遇到了死胡同。
非常感謝您的閱讀!最佳 - 公羊
網路資訊
路由器內部 LANIPv4 地址:192.168.9.1
主 DNS:125.22.47.125,輔助 DNS 203.145.160.4
(還嘗試將 8.8.8.8 作為主 DNS)
我的筆記型電腦:192.168.9.6
*範例和測試輸出:
在我輸入以下命令後,以“PING”開頭的響應出現 20-30 秒:
[ramkumarr@RR-W520 ~]$ ping www.google.com PING www.google.com (142.250.192.132) 56(84) bytes of data. 64 bytes from bom12s18-in-f4.1e100.net (142.250.192.132): icmp_seq=1 ttl=118 time=25.1 ms.
[ramkumarr@RR-W520 ~]$ ping -n www.google.com PING www.google.com (142.250.192.100) 56(84) bytes of data. 64 bytes from 142.250.192.100: icmp_seq=1 ttl=59 time=29.4 m ---> Again a 20s delay before any output appears.
在 Windows 上,響應幾乎是瞬時的(不到半秒)
Pinging www.google.com [142.250.182.36] with 32 bytes of data: Reply from 142.250.182.36: bytes=32 time=11ms TTL=118
並且在具有以下 IP 地址但不具有諸如www.google.com之類的域名的 Linux 上是瞬時的:
[ramkumarr@RR-W520 ~]$ ping -W 0.001 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
/etc/nsswitch.conf 的內容
# Name Service Switch configuration file. # See nsswitch.conf(5) for details. passwd: files mymachines systemd group: files [SUCCESS=merge] mymachines systemd shadow: files publickey: files hosts: files mymachines mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns mdns4 myhostname networks: files protocols: files services: files ethers: files rpc: files netgroup: files
nslookup www.google.com的輸出- 在 Linux 和 Windows 上都以超時結束。在 Linux 上,輸出是瞬時的,直到“地址:142.250.192.132”這一行,然後是延遲,然後是超時消息。
[ramkumarr@RR-W520 ~]$ nslookup www.google.com Server: 192.168.9.1 Address: 192.168.9.1#53 Non-authoritative answer: Name: www.google.com Address: 142.250.192.132 ;; connection timed out; no servers could be reached [ramkumarr@RR-W520 ~]$
…在 Windows 上
C:\Users\ramku>nslookup www.google.com Server: TJ2100N.Home Address: 192.168.9.1 DNS request timed out. timeout was 2 seconds. Non-authoritative answer: DNS request timed out. timeout was 2 seconds. Name: www.google.com Address: 142.250.195.100
/etc/resolv.conf 的內容
# Generated by NetworkManager search Home nameserver 192.168.9.1
在 Windows 上
C:\Users\ramku>ipconfig /all | find /i "dns servers" DNS Servers . . . . . . . . . . . : 192.168.9.1 C:\Users\ramku>
在 Linux 上:
[ramkumarr@RR-W520 ~]$ sudo iptables -nvL [sudo] password for ramkumarr: Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination [ramkumarr@RR-W520 ~]$
[ramkumarr@RR-W520 ~]$ ip route get 192.168.9.1 192.168.9.1 dev wlp3s0 src 192.168.9.10 uid 1000 cache [ramkumarr@RR-W520 ~]$ --> 192.168.9.10 is my laptop ip address
**解決方法/解決方案?**正如以下答案之一所建議的,在 wifi 首選項選項卡中的客戶端設置 DNS 會強製筆記型電腦訪問 Google DNS,但如果沒有,筆記型電腦將 192.168.9.1 報告為 DNS,如下所示:
使用“自動(僅限地址)”在 wifi 首選項中設置 DNS
[ramkumarr@RR-W520 ~]$ ( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS IP4.DNS[1]: 8.8.8.8 IP4.DNS[2]: 8.8.4.4
客戶端處於“自動”且未指定 DNS
[ramkumarr@RR-W520 ~]$ ( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS IP4.DNS[1]: 192.168.9.1
`For an ordinary testing scenario, we will try to force your Linux Mint to use Google Public DNS:
- Primary DNS resolver:
8.8.8.8
(IPv4)- Secondary DNS resolver:
8.8.4.4
(IPv4)You can do that relatively simple, like this:
- Left click on your Wifi/LAN icon:
2. From the menu click on Network Connections:
3. Double click on the corresponding WiFi/LAN:
4. In the connection settings, go to the IPv4 Settings tab:
5. Change the Method to DHCP Addresses only, and fill in the mentioned DNS servers:
6. Hit Save, and turn off/on your WiFi/LAN link.
Finally, just to confirm our little experiment has been completed successfully, copy-paste to your terminal:
( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS
to show which DNS you are using now:
IP4.DNS[1]: 8.8.8.8 IP4.DNS[2]: 8.8.4.4
Now try to
ping
some domain name.Disclaimer
I hereby directly recommended the use of a Google product, which I do not use myself or recommend to others.
This answer is only for testing purposes. I do not recommend these DNS resolvers to my colleagues. If need be said one example for all, I would recommend 1.1.1.1 Cloudflare DNS service with addresses:
IPv4
- Primary:
1.1.1.1
- Secondary:
1.0.0.1
IPv6
- Primary:
2606:4700:4700::1111
- Secondary:
2606:4700:4700::1001
Cloudflare DNS resolvers are privacy-focused and even more secure in a sense. More information here.
I further decline that there would be any affiliation between me and mentioned companies.`