修改Hosts訪問被DNS污染的網站


Github 訪問失敗或者緩慢?

為什么會訪問失敗或者速度很慢?

國內網絡訪問 Github 速度過慢的原因有許多,但其中最直接和原因是其 CND 域名遭到 DNS 污染,導致我們無法連接使用 GitHub 的加速服務,因此訪問速度緩慢。

簡單理解:CDN「Content Delivery Network」,即內容分發網絡,依靠部署在各地的邊緣服務器,平衡中心服務器的負荷,就近提供用戶所需內容,提高響應速度和命中率。DNS 污染,是指一些刻意或無意制造出來的數據包,把域名指向不正確的 IP 地址,阻礙了網絡訪問。

我們默認從目標網址的最近 CDN 節點獲取內容,但當節點過遠或 DNS 指向錯誤時,就會操成訪問速度過慢或無法訪問的問題。

訪問慢、無法加載還是無法通訊?

這三種情況是有區別的,含義不一樣:

  • 訪問慢:連接延遲高,內容能夠被加載但需要較長的時間。
  • 無法加載:瀏覽器無法打開網址。
  • 無法通訊:無法進行直接的網絡通訊,包括了上一種情況。

自然導致這三種情況的原因也不盡相同:

  • 訪問慢:服務器或 CDN 節點的地理位置相對較遠,難以物理超度。注意這里的表現是延遲高,不一定是每秒傳輸速度慢。
  • 無法加載:可能由於長時間的未響應,即訪問慢的情況,導致瀏覽器判定無法加載內容;可能由於網址對應內容不能被直接訪問,即無可訪問內容或無權限訪問。
  • 無法通訊:這類情況往往是 IP 解析錯誤,即遭受 DNS 污染;否則就是 IP 服務器出現了內部錯誤。

檢測一下

可以利用兩個工具來判斷不同域名或 IP 地址是上述那種情況。筆者以github.com為例,實際操作一遍檢測的過程,看看是什么情況:

  • 首先利用網絡上的ping工具,例如這個,檢測網址、IP 地址的通訊情況。輸入要檢測的網址github.com,點擊「Ping 檢測」。工具提供的服務是利用自己分布在各地的網絡節點的本機ping工具,執行對網址的ping操作,匯總結果,統計響應網址的服務器 IP。
  • 檢測結果如下圖示。共計 106 個檢測點,其中接受響應速度最快的節點在加拿大,目標服務器對其響應時間為 14ms;最慢在中國香港,響應時間 243ms。在成功訪問的所有節點中,目標服務器的平均響應時間是 163.5ms。地圖與顏色響應了國內不同省市的訪問時間,紅色說明訪問超時,白色說明沒有參與節點;約偏向綠色則響應時間越短。右側還有一個統計表。這里的情況是:國內節點無法pinggithub.com,即無法建立網絡通訊。

  • 再往下便是具體的每個節點的響應信息。

網絡上的ping工具能為我們提供三個重要的信息:首先,如果存在ping通的節點,那么 IP 服務器沒有宕機;其次,響應 IP 匯總表提供了所有可能的服務器與 CDN 的 IP 地址;最后,具體信息部分可以點擊響應時間排序,我們可以找到響應最快的服務器 IP。

  • 接着我們使用自己電腦的ping工具來測試網絡。打開終端,輸入ping [ip address],替換其中的 IP 地址或域名即可。我們不ping域名,那樣會ping向設置的 DNS 解析出來的 IP 地址。我們ping上一步得到的響應最快的服務器。
ping 140.82.114.4  # 這個IP是響應最快的,來自加拿大
ping 192.30.253.112  # 這個IP也可以響應,來自中國香港

這一步說明,如果我們網絡設置的 DNS 解析出的github.com的 IP 無法在本機ping通,我們便不能夠訪問該網址。這也是后面通過修改系統 Hosts 文件來解決訪問失敗問題的原因。

最后我們可以用瀏覽器嘗試直接打開ping通的 IP 地址。其結果是:140.82.114.4無法被瀏覽器加載;192.30.253.112可以加載出 Github 首頁。

檢測結果

上一步操作的結果就是我們判斷三種情況的依據。

  • 通過192.30.253.112響應的github.com,屬於「訪問慢」,可以連接但延遲較高;IP 可以被瀏覽器加載。
  • 通過140.82.114.4響應的github.com,同樣屬於「訪問慢」;但被瀏覽器直接加載時,屬於「無法加載」,即可以ping通但無法直接訪問。
  • 通過13.229.188.59響應的github.com,屬於「無法通訊」,無法建立鏈接。

域名,網址與 IP 地址

上面提到的這些東西有點亂了,整理一下。

  • 「IP 地址」:每個連接到互聯網的主機都會被分配一個 IP 地址,用來唯一標識該主機,節點之間的訪問通過 IP 地址來進行,形如192.30.253.112
  • 「域名」:IP 地址使用數字標識,使用時不好記憶書寫,因此在 IP 地址的基礎上又發展出一種符號化的地址方案,來代替數字型的 IP 地址。每一個符號化的地址都與特定的 IP 地址對應。IP 地址相對應的字符型地址,就被稱為域名。形如github.com
  • 「網址」:URL「統一資源定位符」,俗稱為網址。瀏覽器地址欄輸入的字符串,服務器上儲存文件的位置。格式為:<協議>://<域名或IP>:<端口>/<路徑><協議>://<域名或IP>是必需的,<端口>/<路徑>有時可省略。形如https://www.github.com
  • 「DNS」:域名雖然便於人們記憶,但節點之間通過 IP 地址通訊。兩者之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析服務器來完成,即 DNS 服務器。域名的最終指向是 IP 地址。

注意,IP 地址和域名是一對多的關系。一個 IP 可以對應多個不同的域名,但是一個域名只能對應一個 IP 地址。就跟人的名字一樣,你可以有多個名字。但這些名字都是指的你。

然而我們利用網絡工具測試時,發現github.com有多個響應 IP 服務器。這就是開頭提到的 CDN 服務。多個平行的服務器響應,均勻了中心服務器的負載,使得網絡通訊更加迅速。

現實的情況是,github.com啟用的 CDN 節點遭到了 DNS 污染,錯誤的 IP 指向,包括錯誤 IP、響應過慢的 IP,都會造成我們訪問 Github 失敗。

方案:修改 Hosts 文件

再總結一下 Github 訪問失敗或者緩慢的原因:本機網絡設置的 DNS 服務器解析 Github 相關域名到遭受污染的 IP 地址,這些 IP 地址要么本身無法訪問,要么節點過遠,從而導致了訪問失敗或者速度緩慢。

那么我們修改的方案可以是:

  • 修改本機 Hosts 文件,主動建立域名與 IP 的映射關系,訪問到這些域名時直接使用 Hosts 指定的 IP,繞過 DNS 解析。
  • 修改網絡的 DNS 服務器,換到能夠解析出合適 IP 的 DNS 服務器。

顯然第一種方案更加方便。因為 DNS 服務器儲存的映射關系是動態更新的,無法直接控制。直接修改本機 Hosts 文件,鎖定域名對應的 IP,更加有效方便。當然,Hosts 文件的作用就是綁定域名與 IP 的映射關系。

Windows 修改 Hosts 文件

  • 打開 cmd,修改 Hosts 文件:
C:\Windows\System32\drivers\etc\hosts
  • 刷新網絡 DNS 緩存:
ipconfig /flushdns

當前 IP 值

列出當前使用的 Github 相關域名比較合適的 IP 值。其中的設置可以解決github.com頭像無法顯示的問題:

#Github xj
52.192.72.89 github.com
54.251.140.56 nodeload.github.com
203.208.39.99 api.github.com
203.208.39.99 github.global.ssl.fastly.net
140.82.113.9 codeload.github.com
185.199.108.133 raw.github.com
185.199.108.153 training.github.com
185.199.108.153 assets-cdn.github.com
185.199.108.153 documentcloud.github.com
185.199.108.154 help.github.com
185.199.108.153 githubstatus.com
185.199.111.133 raw.githubusercontent.com
185.199.108.133 cloud.githubusercontent.com
185.199.108.133 gist.githubusercontent.com
185.199.108.133 marketplace-screenshots.githubusercontent.com
185.199.108.133 repository-images.githubusercontent.com
185.199.108.133 user-images.githubusercontent.com
185.199.108.133 desktop.githubusercontent.com
185.199.108.133 avatars.githubusercontent.com
185.199.108.133 avatars0.githubusercontent.com
185.199.108.133 avatars1.githubusercontent.com
185.199.108.133 avatars2.githubusercontent.com
185.199.108.133 avatars3.githubusercontent.com
185.199.108.133 avatars4.githubusercontent.com
185.199.108.133 avatars5.githubusercontent.com
185.199.108.133 avatars6.githubusercontent.com
185.199.108.133 avatars7.githubusercontent.com
185.199.108.133 avatars8.githubusercontent.com

不一定保證每一項都是正確、有效的,但目前來說實測能夠穩定訪問 Github。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM