引言
做Web開發必不可少與網絡連接打交道,就是運維也整天都是301,302,401,403,404,500,502,503。見的多了,你都會爛熟于胸。讓我們采用自上而下的方法,來測試Internet連接并對其進行故障排除。
下面的每個步驟,都可能為你提供有關互聯網連接可能存在的問題的關鍵點。

Step 1
如何測試互聯網連接,第一種也是最基本的方法,是打開瀏覽器,瀏覽目標網址。
如果沒有可用的圖形界面,可以嘗試使用 curl 獲取目標網址的內容。例如:
$ curl -I https://www.example.com
HTTP/1.1 200 OK
如果可以在瀏覽器上看到網站,或者在使用 curl 命令時收到 200 OK,那就可以確認連接訪問是成功的。
如果不成功,那中間環節就多的去了。操作系統可能有問題,路由可能有問題,Web服務器可能有問題,防火墻可能有問題,等等等等。
Step 2
如果第一步不能解決問題,那么是時候在網絡傳輸的底層,檢查互聯網的連接了。
請執行以下 ping 命令,該命令會使用外部服務器的 IP 地址向其發送網絡數據包。
在本例中,讓我們嘗試 ping google 的 DNS 服務器:
$ ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=10.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=10.2 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 10.157/10.291/10.425/0.134 ms
上述命令正常的情況,必須是 0% 的數據包丟失。
Step 3
如果無法 ping 通,則說明你已斷開與互聯網的連接,或者你的網絡接口的網關設置不正確。
首先檢索網關 IP 地址,并嘗試使用 ping 命令查看是否可以訪問該地址。
例如,首先使用 ip 命令獲取默認網關 IP 地址:
$ ip r
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100
接下來,嘗試 ping 此 IP 地址:
$ ping -c 1 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.77 ms
--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.765/2.765/2.765/0.000 ms
如果可以到達網關,但無法 ping 通服務器,那么很可能斷網了。
如果您無法 ping 通網關,要么是默認網關設置不正確,要么是網關阻止了 ping 請求ICMP包。
Step 4
下一步是檢查 DNS 服務器網絡配置:
$ systemd-resolve --status | grep Current
Current Scopes: DNS
Current DNS Server: 192.168.1.1
我們的系統設置為使用IP地址為 192.168.1.1 的 DNS 服務器主機。確保你可以訪問到該 DNS 服務器。
同樣,使用 ping 指令:
$ ping -c 2 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.535 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.570 ms
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 0.535/0.552/0.570/0.017 ms
同樣,上述命令的輸出需要保證 0% 的數據包丟失率。
如果無法連接到 DNS,這可能意味著它沒有響應 ping 的 ICPM 包,DNS 在防火墻后面,或者服務器已關閉。
在這種情況下,請使用備用 DNS 服務器更新 /etc/resolv.conf 文件 。
Step 5
通過嘗試使用 dig 命令解析DNS名稱,來測試DNS服務器:
$ dig @192.168.1.1 example.com
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.1 linuxconfig.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10032
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 187 IN A 104.103.102.1
example.com. 187 IN A 104.103.102.1
;; Query time: 4 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu May 07 11:01:41 AEST 2020
;; MSG SIZE rcvd: 76
Step 6
通過嘗試解析 DNS 主機名來確認系統范圍的設置。
$ resolvectl query example.com
example: 104.103.102.1 -- link: enp0s3
104.103.102.1 -- link: enp0s3
-- Information acquired via protocol DNS in 2.7ms.
-- Data is authenticated: no
寫在最后
通過本篇,我們基本厘清了路由,網關,DNS 服務器,網絡響應等知識。
Web 開發是一門綜合的技術,理解的越細致,也越容易定位故障。
HAppy coding :-)