什麼是DNS?什麼是DNS污染?什麼又是DNS劫持?

2019-09-02     程式設計師聖經
作者 漫話編程
來源公眾號:漫話編程

下午,我正在公司瘋狂的擼著代碼,沉浸在我的代碼世界中,正在欣賞著自己剛剛寫下的一行lambda表達式,突然微信上傳來女朋友的消息。



在瀏覽器輸入cn.bing.com,顯示結果如下:




於是,我打開我的terminal,準備ping一下,看看到底怎麼回事:

 mhcoding ping cn.bing.com
PING cn.bing.com (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.098 ms

於是,我再微信上給女朋友回覆:


晚上下班回到家,還沒等我脫下我的雙肩包,女朋友就快速的跑過來找我。





DNS

DNS,是Domain Name System的縮寫,翻譯成域名系統。它作為將域名和IP位址相互映射的一個分布式資料庫,能夠使人更方便地訪問網際網路。

DNS最主要的作用就是將域名翻譯成ip地址。

IP位址

IP位址是IP Address的縮寫,指網際網路協議地址(英語:Internet Protocol Address,又譯為網際協議地址)。IP位址是IP協議提供的一種統一的地址格式,它為網際網路上的每一個網絡和每一台主機分配一個邏輯地址,以此來屏蔽物理地址的差異。

網際網路上的每一台計算機,都會分配到一個IP位址。

IP位址被用來給Internet上的電腦一個編號。大家日常見到的情況是每台聯網的PC上都需要有IP位址,才能正常通信。

IP位址是一個32位的二進位數,通常被分割為4個「8位二進位數」(也就是4個位元組)。IP位址通常用「點分十進位」表示成(a.b.c.d)的形式。如:208.80.152.2

域名

域名,這個是很多人都熟悉的概念,我們大多數情況下,在瀏覽器上訪問某個網站的時候,都是通過域名訪問的。

域名是由一串用點分隔的字符組成的網際網路上某一台計算機或計算機組的名稱,用於在數據傳輸時標識計算機的電子方位。

域名可以說是一個IP位址的代稱,目的是為了便於記憶後者。

例如,wikipedia.org是一個域名,和IP位址208.80.152.2相對應。人們可以直接訪問wikipedia.org來代替IP位址,然後域名系統(DNS)就會將它轉化成便於機器識別的IP位址。

這樣,人們只需要記憶wikipedia.org這一串帶有特殊含義的字符,而不需要記憶沒有含義的數字。



域名、IP和DNS

在現實生活中,我們可能經常需要通過電話找人,每一台接入網絡的電話都有一個自己獨一無二的號碼。

有的時候,我們想要打某個公司的客服電話,如想要給工商銀行的客服打電話,想查詢帳戶餘額。但是我們不知道具體號碼,我們可以撥打114,告訴他們自己想要撥打工商銀行的電話。然後114的客服會幫你查詢到工商銀行的電話,並幫你自動轉接到工商銀行的客服電話。

這個過程就和域名、IP位址以及DNS之間的關係比較像了。

每一台接入網絡的電話 -> 每一台接入網絡的計算機
工商銀行 -> 域名
電話號碼 -> ip地址
114諮詢台 -> DNS

有了DNS,我們不需要記住每一個網站的多個IP位址,我們只需要之道這個網站的域名就可以了。就像我們不關心工商銀行的客服電話,我們只需要知道我們要找工商銀行就可以了。

而且,對於一個網站來說,一個域名會對應其無數個IP位址。會通過負載均衡等方式進行調配。就像工商銀行的客服中心也有很多分機的道理是一樣的。





某些網絡運營商為了某些目的,可能會限制某些用戶訪問某一些特定的網站,而限制手段最常用的就是DNS污染和DNS劫持。

正常情況下,當我們訪問某個域名的時候,會跳轉到失敗頁面,但是如果爬到牆外,就可以正常訪問。比如所謂的qiang。

還有一種典型場景,當我們的寬頻欠費的時候,訪問某個網站時,被自動跳轉到運營商網站,提示充值。

這都是運營商在DNS上做了手腳。其目的是為了讓域名無法解析到正常的IP位址。

而此次必應無法訪問期間,通過ping可以發現,cn.bing.com被DNS解析成127.0.0.1。這是無法訪問bing的直接原因原因。

127.0.0.1是回送地址,指本地機,一般用來測試使用。

DNS污染

網域伺服器緩存污染(DNS cache pollution),又稱域名伺服器緩存投毒(DNS cache poisoning),是指一些刻意製造或無意中製造出來的域名伺服器數據包,把域名指往不正確的IP位址。

其工作方式是:由於通常的DNS查詢沒有任何認證機制,而且DNS查詢通常基於的UDP是無連接不可靠的協議,因此DNS的查詢非常容易被篡改,通過對UDP埠53上的DNS查詢進行入侵檢測,一經發現與關鍵詞相匹配的請求則立即偽裝成目標域名的解析伺服器(NS,Name Server)給查詢者返回虛假結果。

DNS污染指的是用戶訪問一個地址,國內的伺服器(非DNS)監控到用戶訪問的已經被標記地址時,伺服器偽裝成DNS伺服器向用戶發回錯誤的地址的行為。為了減免網絡上的交通,一般的域名都會把外間的域名伺服器數據暫存起來,待下次有其他機器要求解析域名時,可以立即提供服務。一旦有關網域的局域域名伺服器的緩存受到污染,就會把網域內的電腦導引往錯誤的伺服器或伺服器的網址。


簡單點說,DNS污染是指把自己偽裝成DNS伺服器,在檢查到用戶訪問某些網站後,使域名解析到錯誤的IP位址。

DNS劫持

DNS劫持又稱域名劫持,是指在劫持的網絡範圍內攔截域名解析的請求,分析請求的域名,把審查範圍以外的請求放行,否則返回假的IP位址或者什麼都不做使請求失去響應,其效果就是對特定的網絡不能訪問或訪問的是假網址。


簡單點說,DNS劫持指的是通過非法手段,獲取DNS伺服器的權限,然後把DNS配置進行修改,使域名解析到錯誤的IP位址。

DNS污染和DNS劫持的區別

DNS劫持是劫持了DNS伺服器,進而修改其解析結果。

DNS污染是國內的某些伺服器對DNS查詢進行入侵檢測,發現與黑名單上匹配的請求,該伺服器就偽裝成DNS伺服器,給查詢者返回虛假結果。它利用了UDP協議是無連接不可靠性。

一個是劫持了DNS伺服器,一個是偽裝成DNS伺服器。造成的結果都是返回錯誤的IP位址。



如何解決DNS污染和劫持

對於 DNS劫持,可以通過手動更換DNS伺服器為第三方公共DNS解決。

公共DNS 是一種面向大眾的免費的 DNS 網際網路基礎服務。更換 DNS 伺服器地址為 公共DNS 後,可以在一定程度上加快域名解析速度、防止 DNS劫持、加強上網安全,還可以屏蔽大部分運營商的廣告。

下圖就是常用的公共DNS:


(圖源:http://www.yunweipai.com/archives/5175.html)

對於 DNS污染,可以說,個人用戶很難單單靠設置解決,通常可以使用 VPN 或者域名遠程解析的方法解決。



必應掛了如何訪問


一、用必應(Bing)臨時域名

www2.bing.com 或者 www4.bing.com

二、強制綁定host

用戶只需要暫時修改下host然後坐等微軟伺服器恢復後再刪除即可。即強制指定cn.bing.com指向的IP位址。

13.107.21.200 cn.bing.com

修改後如果瀏覽器依然無法正常打開請直接重啟系統,重啟後再嘗試打開必應搜索看看能否恢復正常訪問。

三、修改DNS伺服器

把DNS修改成公共DNS,如8.8.8.8 或者 114.114.114.114。

參考:https://laod.cn/news/cn-bing-com-404.html






事件後續

1月23日下午,有網友發現微軟搜尋引擎網站必應(Bing)出現無法訪問故障。打開之後顯示,「無法訪問此網站」。

1月24日,微軟發言人先後回復記者稱,「正在展開調查」以及「我們正在積極應對,以確定下一步相關措施」。

1月25日早上,微軟發言人回復記者稱,「我們確認必應網站之前在中國無法訪問,但是現已恢復正常」。不過,微軟並未透露此前不能正常訪問的原因。

本文的重點是分析必應無法被正常訪問的原因,關於域名、DNS等並未深入和展開介紹,如果讀者感興趣,後面會繼續逐一展開介紹。

文章來源: https://twgreatdaily.com/zh-hk/qTdh8mwBJleJMoPMSBib.html