眾所周知,在國內上網(wǎng)會遇到各種各樣不同的人為網(wǎng)絡故障,使得我們無法正常訪問很多網(wǎng)站。但由于很多人并不熟悉網(wǎng)絡,很多時候會無法區(qū)分不同的網(wǎng)絡故障,導致明明是網(wǎng)絡故障,卻認為是服務器故障;或明明是服務器故障,卻認為是網(wǎng)絡故障的情況。我覺得有必要說明一下不同網(wǎng)絡故障的特征,以及區(qū)分它們并解決它們的方法。
在國內上網(wǎng)環(huán)境中,我們經(jīng)常遇到的網(wǎng)絡故障有:DNS劫持、DNS污染、IP封鎖、服務器防火墻IP過濾、服務器宕機、基于關鍵詞的TCP連接重置、無狀態(tài)的TCP連接重置、SSL證書過濾、SSL劫持、HTTP會話劫持等網(wǎng)絡故障。下面我就依次進行說明:
1、DNS劫持
DNS劫持會導致我們訪問了一些不存在的或不穩(wěn)定的網(wǎng)站的時候,訪問到的卻是電信114搜索(詳見月光博客《斷網(wǎng)后互聯(lián)星空的瀏覽器劫持》)或訪問Google卻顯示了Baidu的主頁(詳見月光博客《Google博客搜索搖身一變成百度》)。
如果需要確認自己是否處在DNS劫持的環(huán)境中,我們可以在Windows命令行cmd中使用Windows自帶的網(wǎng)絡診斷工具nslookup查找一個不存在或不穩(wěn)定的域名進行一下網(wǎng)絡診斷:
C:>nslookup www.SomeRandomDomainName.com
Server: ns-pd.online.sh.cn
Address: 202.96.209.133
Non-authoritative answer:
Name: www.SomeRandomDomainName.com
Address: 218.83.175.155
我們看到,www.SomeRandomDomainName.com本應該是一個不存在的域名,DNS服務器應該告訴我們這個域名不存在,但我們卻看到DNS服務器告訴我們這個域名的IP為218.83.175.155(不同地區(qū)的114搜索的IP都不同,可能得到的IP并不是218.83.175.155,而是自己所在地區(qū)的114搜索的服務器IP地址),而這個IP卻是114搜索的IP,導致我們在瀏覽器中訪問這個網(wǎng)站時看到的是114搜索的網(wǎng)頁。
如果需要解決DNS劫持的問題,可以把自己的域名解析服務器換乘國外的,比如OpenDNS(詳見月光博客《使用OpenDNS解決DNS域名劫持》)或Google DNS(詳見月光博客《Google推出免費DNS服務》)。
解決之后我們再次使用nslookup查找一下這個網(wǎng)站:
C:>nslookup www.SomeRandomDomainName.com
Server: google-public-dns-a.google.com
Address: 8.8.8.8
*** google-public-dns-a.google.com can't find www.SomeRandomDomainName.com: Non-existent domain
我們看到DNS服務器正確的告訴了我們這個域名不存在,我們不會被劫持到114搜索了。
不過,正如《使用OpenDNS解決DNS域名劫持》中最后一段所說的那樣,“但是對于DNS污染的劫持,使用OpenDNS也無法解決問題”。那么接下來,我就介紹一下DNS污染。
2、DNS污染
由于DNS劫持可以通過把域名解析服務器更換為國外的來解決問題,所以系統(tǒng)需要使用DNS污染來封鎖一些域名。這樣,即使使用國外的域名服務器也得不到服務器的正確IP,所以也就無法訪問這些服務器了。比如現(xiàn)在著名的微博客始祖twitter主頁就遭到了DNS污染。
如果需要確認域名遭到了DNS污染而不是其他的故障,首先要了解,DNS劫持是由國內的域名服務器完成的,所以我們把域名服務器換成國外的就可以解決問題;而DNS污染是由系統(tǒng)完成的,所以即使更換了域名服務器,系統(tǒng)仍舊可以發(fā)送偽造的域名解析結果替換正確的解析結果。所以我們可以通過使用一個不存在的國外IP作為我們的域名服務器進行診斷究竟是DNS劫持還是DNS污染。我們仍舊通過使用nslookup進行網(wǎng)絡診斷,選一個不存在的國外IP為144.223.234.234:
C:>nslookup twitter.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
Name: twitter.com
Address: 93.46.8.89
我們看到,由于144.223.234.234不存在,理應沒有任何返回。但我們卻得到了一個錯誤的IP:93.46.8.89。我們再測試一下剛才被DNS劫持的IP的情況:
C:>nslookup www.SomeRandomDomainName.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
我們看到,www.SomeRandomDomainName.com 沒有返回結果,那么它沒有被DNS污染。
如果要解決DNS污染,我們只能使用各種加密代理進行遠程DNS解析、VPN或利用系統(tǒng)的漏洞了。
3、IP封鎖
這里IP封鎖指的是國內把國外服務器的IP加入了系統(tǒng)的黑名單,導致大部分地區(qū)甚至全國無法直接訪問服務器。由于系統(tǒng)是分布式的,所以有可能出現(xiàn)部分地區(qū)可以訪問,部分地區(qū)不能訪問的情況。比如現(xiàn)在知名的云存儲服務Dropbox的主頁,就是遭到了IP封鎖。
首先我們把域名服務器設置為國外的,排除了DNS劫持的問題。之后我們診斷一下dropbox的域名是否遭到了DNS污染:
C:>nslookup www.dropbox.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
顯然也沒有遭到DNS污染。那么接下去我們可以在沒有過濾ICMP協(xié)議的網(wǎng)絡環(huán)境中(有些小區(qū)寬帶和有些公司的內部網(wǎng)絡過濾了ICMP協(xié)議,無法使用tracert),我們可以在Windows命令行cmd中使用Windows自帶的網(wǎng)絡診斷工具tracert進行一下網(wǎng)絡診斷是網(wǎng)站遭到了IP封鎖還是其他的故障:
C:>tracert -d www.dropbox.com
Tracing route to www.dropbox.com [174.36.30.70]
over a maximum of 30 hops:
1 18 ms 19 ms 26 ms 58.35.240.1
2 15 ms 20 ms 29 ms 58.35.240.1
3 13 ms 10 ms 14 ms 124.74.20.45
4 14 ms 14 ms 15 ms 124.74.209.137
5 10 ms 15 ms 14 ms 61.152.86.58
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
……