1. 程式人生 > >DNS反劫持的幾種方式

DNS反劫持的幾種方式

        家裡聯通寬頻到期,之前使用的時候感覺出口速度並不好,聽說移動寬頻因為用的人少,出口頻寬不錯,準備換一下試試.臨上馬之前先考察一下,普遍反映移動的DNS限制比較多,各種DNS劫持.要是能有辦法檢測到自己正在使用的DNS是哪個就好了,還好有這個:

        

        結果如下:

        

        檢測之前已經把本機DNS設定成114.114.114.114了,從結果上看果然有問題,應該是使用了透明DNS代理的技術,導致DNS洩漏.

        

        總結一下:

        DNS劫持,劫持單條DNS查詢資訊,返回不正確的結果.

        透明DNS代理,劫持所有查詢資訊,只要是經過運營商閘道器的發往53埠的UDP型別的DNS協議,全部都轉移到自己DNS伺服器上去,所以在本機上設定是沒用的.

        這樣一來,即使在內部網路中部署了DNS伺服器也只可以起到加速作用,依然無法反劫持.因為內網中的DNS伺服器向上級DNS伺服器請求時的資料同樣會被透明DNS代理劫持到ISP的DNS上.內部DNS伺服器快取的資料依然是被汙染過的.

        如果想突破這種劫持,有三種方式. 這三種方式,都需要在本機對DNS請求資料進行預處理,所以本機都需要部署處理程式,同時將本地DNS設定為127.0.0.1.

        按照約定,DNS伺服器都要同時實現TCP形式的DNS協議處理.這樣一來,只需要在本地把UDP形式的協議轉換為TCP形式就可以了.可以使用的工具有:

        (1)  socat

        socat是linux下很好用的埠轉發工具,支援UDP轉TCP,試用了一下,並不好用,經常各種錯誤.

        使用方法倒是很簡單: socat udp4-listen:53,reuseaddr,fork TCP:114.114.114.114:53

        這兩個都是專門的DNS協議轉換工具,實際使用了一下,效果都很不理想,速度很慢.

        (3)pdnsd

        這個其實是個dns伺服器,需要設定向上級伺服器請求時只使用TCP格式.貌似也就這個方案比較靠譜.

        之前還有嘗試過其他的埠轉發工具,要麼不支援UDP,要麼號稱支援UDP,但是隻支援UDP到UDP,不支援UDP到TCP.

        2.   使用加密軟體對DNS請求和回覆資料進行加密.

        這種方式的弊端是,既然內部有加密,外部必須有一個相應的解密工具.對個人來說,外部還需要部署一套專門的解密工具,需要VPS,代價有點大.

        使用這種方式的工具找到兩個:

        這個工具貌似很有名,所以本身內建的DNS伺服器地址已經大部分被封.速度很不理想,沒有嘗試自己部署伺服器端會怎麼樣.

        沒有具體試用.

        3.   使用其他埠.

        沒有具體試用,沒找到現成的工具.這種方式,需要本地轉發DNS請求到指定埠,然後還需要在外網部署使用特定埠的DNS伺服器.同樣需要一臺VPS.