route
)route命令能夠顯示你當前的路由表信息,包括你的默認網關。html
$ sudo route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.1.1.0 * 255.255.255.0 U 0 0 0 eth0 default 10.1.1.1 0.0.0.0 UG 100 0 0 eth0
咱們須要重點關注的是最後一行,即以default開始的那一行。這一行顯示主機的網關是10.1.1.1。注意route命令後面跟着-n選項,這樣route命令不會嘗試將這些IP地址解析成主機名。web
ping
)使用ping命令來確認可否與網關通訊:apache
$ ping -c 5 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=3.13 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=1.43 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=1.79 ms 64 bytes from 10.1.1.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.1.1.0正常通訊。ubuntu
dig
)apt-get install dnsutils root@e82ce1ff2b8d:/# dig sina.com ; <<>> DiG 9.9.5-3ubuntu0.9-Ubuntu <<>> sina.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20004 ;; flags: qr rd ad; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;sina.com. IN A ;; ANSWER SECTION: sina.com. 300 IN A 111.13.129.31 sina.com. 300 IN A 111.13.129.36 sina.com. 300 IN A 111.13.129.34 sina.com. 300 IN A 211.179.180.75 sina.com. 300 IN A 211.179.180.77 sina.com. 300 IN A 111.13.129.32 sina.com. 300 IN A 111.13.129.37 sina.com. 300 IN A 111.13.129.35 sina.com. 300 IN A 211.179.180.76 sina.com. 300 IN A 111.13.129.33 sina.com. 300 IN A 111.13.129.38 ;; Query time: 18 msec ;; SERVER: 10.0.2.3#53(10.0.2.3) ;; WHEN: Sun Oct 16 12:21:51 UTC 2016 ;; MSG SIZE rcvd: 202
nslookup
)使用nslookup檢查DNS是否能夠將域名web1解析成IP:服務器
$ nslookup web1 Server: 10.1.1.3 Address: 10.1.1.3#53 Name: web1.example.net Address: 10.1.2.5
在這個例子中,DNS正常工做。Web1的主機名擴展爲web1.example.net,解析到地址10.1.2.5。 沒有配置域名服務器或沒法訪問域名服務器若是看到下面的錯誤,這代表要麼你的主機沒有配置域名服務器,或者沒法訪問域名服務器。網絡
$ nslookup web1 ;; connection timed out; no servers could be reached
不管是哪一種狀況,你都須要檢查配置文件/etc/resolv.conf中是否配置了域名服務器。若是沒有配置任何IP地址,則須要在這個文件中添加一個域名服務器配置信息。tcp
traceroute
)apt-get install traceroute
traceroute是用來測試路由問題的最好的工具之一。只須要提供給traceroute一臺主機的名稱,它就能夠測試你和這臺主機間的每一跳路由。例如,在dev1與web1間的一個成功的路由信息看起來像是這樣:工具
$ traceroute 10.1.2.5 traceroute to 10.1.2.5 (10.1.2.5), 30 hops max, 40 byte packets 1 10.1.1.1 (10.1.1.1) 5.432 ms 5.206 ms 5.472 ms 2 web1 (10.1.2.5) 8.039 ms 8.348 ms 8.643 ms
從上面的信息中能夠看到,數據包先從dev1到網關(10.1.1.1),而後路由下一跳到web1。這意味着10.1.1.1可能同時是這兩個子網的網關。 若是在輸出信息中看到星號,則說明問題出在網關。你須要檢查這條線路,排查不能在兩個網絡中傳遞數據包的緣由。測試
root@e82ce1ff2b8d:/# traceroute -n www.baidu.com traceroute to www.baidu.com (111.13.100.91), 30 hops max, 60 byte packets 1 172.17.0.1 0.039 ms 0.012 ms 0.012 ms 2 10.0.2.2 0.263 ms 0.248 ms 0.218 ms 3 * * * 4 * * * 5 120.197.47.245 10.753 ms 11.182 ms 120.197.47.209 12.555 ms 6 221.183.24.145 10.320 ms 9.789 ms 221.183.24.141 10.761 ms 7 221.176.21.114 10.861 ms 221.176.15.209 40.284 ms 221.176.21.114 10.791 ms 8 * 221.183.19.54 40.254 ms * 9 * * 111.13.188.69 49.446 ms 10 111.13.98.253 48.990 ms 111.13.98.249 52.568 ms 111.13.98.253 48.478 ms 11 * 111.13.108.26 61.761 ms 111.13.108.1 67.219 ms
telnet/nmap
)驗證該端口是否已經開放。有許多不一樣的方法能夠作到這一點。首先,你能夠嘗試telnet命令:.net
$ telnet 10.1.2.5 80 Trying 10.1.2.5... telnet: Unable to connect to remote host: Connection refused
若是你看到Connection refused,那要麼是端口沒有開啓(好比遠程服務器上的apache服務沒有啓動或者沒有監聽端口),要麼是防火牆的限制。
比起telnet,我更喜歡使用nmap來測試端口,由於它常常能夠檢測到防火牆的存在。若是沒有安裝nmap,使用你的軟件管理包來安裝nmap。
apt-get install nmap
要測試web1,請輸入如下內容:
$ nmap -p 80 10.1.2.5 Starting Nmap 4.62 ( http://nmap.org ) at 2009-02-05 18:49 PST Interesting ports on web1 (10.1.2.5): PORT STATE SERVICE 80/tcp filtered http
nmap真是足夠聰明,它一般能夠分辨出端口關閉的真正緣由,是真正的關閉仍是端口被防火牆阻擋。一般狀況下,一個端口真正關閉時,nmap將聲明其爲關閉。 這裏它的狀態爲過濾。這告訴咱們某個防火牆阻擋了數據包的經過並拋棄了這些數據包。你須要檢查網關(10.1.1.1)和web1上的防火牆規則,確認80端口是否被阻擋。
netstat
)測試80端口是否被監聽。netstat-lnp命令能夠列出全部正在被監聽的端口以及打開這些端口的進程。能夠僅運行這個命令,而後經過解析輸出獲得獲取監聽80端口的全部信息,或者能夠經過使用grep命令僅顯示與監聽80端口有關的信息。
$ sudo netstat -lnp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 919/apache
第一列告訴你端口所使用的網絡協議。第二列和第三列顯示接受和發送的隊列(這裏均設置爲0)。你須要注意的是第四列,它列出了主機監聽的本地地址。這裏0.0.0.0:80告訴咱們主機監聽全部ip的80端口流量。
iptables
)使用iptables命令能夠列出全部防火牆規則,若是你的防火牆被禁用,那麼輸出看起來就像這樣:
$ sudo /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
注意,默認的規則是接收(ACCEPT)。不過,即便任何規則都沒有,防火牆也極可能默認丟棄收到的全部數據包。若是是那樣的話,你看到的輸出可能與下面的相似:
$ sudo /sbin/iptables -L Chain INPUT (policy DROP) target prot opt source Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination
另外一方面,若是存在一個限制80端口的防火牆規則,輸出可能看起來像這樣:
$ sudo /sbin/iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source dest
iftop
)apt-get install iftop
iftop自己不關心進程,而是列出了主機與遠程IP之間佔用大部分帶寬的網絡鏈接。 在iftop屏幕最上方一行顯示了接口的總體流量情況。在它的正下方,第一列是源IP地址,緊接着是目標IP地址,它們之間的箭頭顯示它們之間是否正在傳輸數據,是從你的主機發出的仍是從遠端主機接收的。這些列後面的三列分別表示2s、10s、40s時兩個主機之間的數據傳輸速率。就像平均負載同樣,你能夠看到帶寬是從如今開始飆升,仍是在過去的一段時間飆升的。在屏幕最下方,你能夠看到發送數據(TX)和接收數據(RX)的統計以及數據傳輸總計。與top相似,接口會按期更新。 默認狀況下,iftop會試圖將IP地址解析成主機名。這麼作的一個缺點是,當一個遠程DNS服務器響應很慢的時候,它可能減緩報表的輸出速度。另外一個缺點是iftop中的DNS解析增長了額外的網絡流量。若想要禁用網絡解析,只需運行帶有-n選項的iftop命令。 可經過按S或D鍵切換分別只顯示源主機或目標主機的端口。當你在服務器上運行iftop時,只顯示源端口十分奏效。
tcpdump
)限於tcpdump的工做機制,你必須在root權限下使用它。默認狀況下,它會經過掃描網絡接口,選擇第一個可用接口,而後將捕獲、解析並輸出它看到的數據包信息。執行命令tcpdump -n(不將IP解析爲主機名,因此不會下降速度)。 每次抓取數據包完畢,只需按Ctrl-C組合鍵來退出tcpdump程序。當tcpdump退出時,它會告訴你抓到多少數據包,內核丟棄了多少數據包。
例如,若是想排除主機與主機名爲web1的服務器之間的故障,能夠告訴tcpdump,只顯示到達該主機或從該主機發送的報文:
$ sudo tcpdump -n host web1
若是想要作相反的事情,即顯示web1以外的全部流量,你能夠用:
$ sudo tcpdump -n not host web1
還能夠過濾特定端口的流量。好比,若是隻想看到DNS的流量(端口53),能夠輸入:
$ sudo tcpdump -n port 53
若是想捕捉到全部流經端口80或端口443的Web流量,能夠輸入:
$ sudo tcpdump -n port 80 or port 443
可使用命令行重定向把tcpdump的輸出保存到文件中:
$ sudo tcpdump -n host web1 > outputfile
保存原始數據包轉儲最簡單的方法是運行帶有-w選項的tcpdump命令:
$ sudo tcpdump -w output.pcap
若是你想在文件達到10MB後將文件分卷,你能夠輸入:
$ sudo tcpdump -C 10 -w output.pcap
你能夠將它限制爲最多建立5個分卷文件:
$ sudo tcpdump -C 10 -W 5 -w output.pcap
你可使用tcpdump的-r選項進行數據包實時重播。只須要指定原始數據包輸出文件做爲參數。能夠指定過濾器和-n等其餘選項,就像使用tcpdump對實時流量進行監控:
$ sudo tcpdump -n -r output.pcap