天天看點

你需要知道的網絡故障排查常用指令集

作者:Linux碼農

route

route指令可以檢視目前系統的路由表資訊,包括預設網關。

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.10.23.2 0.0.0.0 UG 100 0 0 ens33
192.10.12.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.10.23.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
           

route後的-n選項不會嘗試将這些IP位址解析成主機名, 列出速度會比route 快。

ping

使用ping指令來确認能否與網關通信:

# ping -c 5 10.12.13.1 
PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 
64 bytes from 10.12.13.1: icmp_seq=1 ttl=64 time=3.13 ms 
64 bytes from 10.12.13.1: icmp_seq=2 ttl=64 time=1.43 ms 
64 bytes from 10.12.13.1: icmp_seq=3 ttl=64 time=1.79 ms 
64 bytes from 10.12.13.1: icmp_seq=5 ttl=64 time=1.50 ms --- 10.1.1.1 ping statistics --- 5 packets transmitted, 4 received, 20% packet loss, time 4020ms rtt min/avg/max/mdev = 1.436/1.966/3.132/0.686 ms
           

能ping通說明本機和10.12.13.1網絡是通的。

也可以 ping 域名:

# ping -c 4 www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=9.89 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=10.4 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=128 time=10.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=128 time=10.4 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 9.899/10.284/10.471/0.253 ms
           

dig

Dig是一個在類Unix指令行模式下查詢DNS包括NS記錄,A記錄,MX記錄等相關資訊的工具。

# dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23430
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com. IN A

;; ANSWER SECTION:
www.baidu.com. 706 IN CNAME www.a.shifen.com.
www.a.shifen.com. 110 IN A 110.242.68.4
www.a.shifen.com. 110 IN A 110.242.68.3

;; Query time: 3 msec
;; SERVER: 202.106.0.20#53(202.106.0.20)
;; WHEN: Sat Jan 22 10:18:55 CST 2022
;; MSG SIZE rcvd: 90
           

nslookup

nslookup用于查詢DNS的記錄,查詢域名解析是否正常,在網絡故障時用來診斷網絡問題。

# nslookup www.baidu.com
Server: 202.106.0.20
Address: 202.106.0.20#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.4
Name: www.a.shifen.com
Address: 110.242.68.3
           

traceroute

通過traceroute我們可以知道資訊從你的計算機到網際網路另一端的主機是走的什麼路徑。當然每次資料包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統中,我們稱之為traceroute,在MS Windows中為tracert。traceroute通過發送小的資料包到目的裝置直到其傳回,來測量其需要多長時間。一條路徑上的每個裝置traceroute要測3次。輸出結果中包括每次測試的時間(ms)和裝置的名稱(如有的話)及其IP位址。

在大多數情況下,我們會在linux主機系統下,直接執行指令行:

traceroute hostname

而在Windows系統下是執行tracert的指令:

tracert hostname

# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms
2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms
3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms
4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms
5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms
6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms
8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms
9 * * *
30 * * *
           

說明:

記錄按序列号從1開始,每個紀錄就是一跳 ,每跳表示一個網關,我們看到每行有三個時間,機關是 ms,其實就是-q的預設參數。探測資料包向每個網關發送三個資料包後,網關響應後傳回的時間;如果您用 traceroute -q 4 www.baidu.com ,表示向每個網關發送4個資料包。

有時我們traceroute 一台主機時,會看到有一些行是以 * 表示的。出現這樣的情況,可能是防火牆封掉了ICMP的傳回資訊,是以我們得不到什麼相關的資料包傳回資料。

有時我們在某一網關處延時比較長,有可能是某台網關比較阻塞,也可能是實體裝置本身的原因。當然如果某台DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出資料。

如果在區域網路中的不同網段之間,我們可以通過traceroute 來排查問題所在,是主機的問題還是網關的問題。如果我們通過遠端來通路某台伺服器遇到問題時,我們用到traceroute 追蹤資料包所經過的網關,送出IDC服務商,也有助于解決問題;

telnet/nmap

telnet 協定是 TCP/IP 協定族中的一員,是 Internet 遠端登陸服務的标準協定和主要方式。

具體用法格式如下:

# telnet serverIP port           

例如:

//連接配接一個存在的端口,連接配接成功
# telnet 10.198.25.126 5546
Trying 10.198.25.126...
Connected to 10.198.25.126.
Escape character is '^]'.

//連接配接一個不存在的端口,連接配接被拒絕
# telnet 10.198.25.126 1234
Trying 10.198.25.126...
telnet: connect to address 10.198.25.126: Connection refused

//連接配接一個不存在的網絡,出現逾時
# telnet 10.198.25.13 6
Trying 10.198.25.13...
telnet:connected to 10.198.25.126: Connection timed out


           

Nmap,也就是Network Mapper,中文為“網絡映射器”。

Nmap是不局限于僅僅收集資訊和枚舉,同時可以用來作為一個漏洞探測器或安全掃描器。

Nmap是一款非常強大的實用工具,可用于:檢測活在網絡上的主機(主機發現)、檢測主機上開放的端口(端口發現或枚舉)、檢測到相應的端口(服務發現)的軟體和版本檢測作業系統,硬體位址,以及軟體版本檢測脆弱性的漏洞(Nmap的腳本)。

"PT"選項可以對網絡上指定端口進行掃描(本文例子中指的預設端口是80(http)号端口),它将可能通過目标邊界路由器甚至是防火牆。

# nmap -sP -PT80 192.168.7.0/24
TCP probe port is 80

Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)
Host (192.168.7.11) appears to be up.
Host (192.168.7.12) appears to be up.
Host (192.168.7.76) appears to be up.
Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second
           

netstat

netstat指令用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料,一般用于檢驗本機各端口的網絡連接配接情況。netstat是在核心中通路網絡及相關資訊的程式,它能提供TCP連接配接,TCP和UDP監聽,程序記憶體管理的相關報告。

比如檢視某個端口号是否打開,若服務端口沒有打開,自然client也就連接配接不上。

# netstat -tunlp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1109/sshd
tcp6 0 0 :::22 :::* LISTEN 1109/sshd

           

iptables

netfilter/iptables(簡稱為iptables)組成Linux平台下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包和重定向以及網絡位址轉換(NAT)等功能。

該指令會以清單的形式顯示出目前使用的 iptables 規則,并不做解析,每一條規則前面的編号可以用來做為其它操作。

# iptables -n -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps

...

           

tcpdump

當需要測試封包是否發送到對端,也可以使用 tcpdump 指令進行抓包分析。

通常使用的方式是通過 tcpdump 指令抓取資料包,然後通過 wireshake 工具進行分析。

使用方式如下:

//監視指定網絡接口、某個具體端口号接收的tcp封包的資料包
# tcpdump -i eth0 -n tcp port 2443

//也可以指定ip, 例如擷取所有210.27.48.1 的主機收到的和發出的所有資料包
# tcpdump host 210.27.48.1 

//也可以把抓取的資料包儲存到cap格式的檔案中,通過使用wireshark進行分析
# tcpdump tcp -i eth0 -w /test.cap
           

如果想捕捉到所有流經端口80或端口443的Web流量,可以執行如下指令:

# tcpdump -n port 80 or port 443           

可以使用指令行把抓包結果重定到檔案中進行儲存

# tcpdump -n host 110.242.68.4 > outfile           

也可以儲存使用-w把資料結果儲存到pcap格式的檔案中,然後通過Wireshark 打開該檔案對資料包進行分析。

# tcpdump -n host 110.242.68.4 -w output.pcap
           

繼續閱讀