利用DNS隧道免費上網
一.原理
1.1.dns概述
dns協議最基本的作用是將域名對映為ip地址,讓我們在訪問網頁的時候無需記住複雜的ip地址。
在一些地方,需要我們認證才能上網。假如我們沒有認證,大部分的流量都會被過濾,但是往往都會放行dns流量,windows下可通過nslookup或者ping命令檢視dns流量是否被過濾:
C:\>nslookup 預設伺服器:UnKnown Address:2001:250:6801:5501:2e0:4cff:fe51:c4 > baidu.com 伺服器:UnKnown Address:2001:250:6801:5501:2e0:4cff:fe51:c4 非權威應答: 名稱:baidu.com Addresses:123.125.115.110//能夠返回ip地址則說明dns流量沒有被過濾 220.181.57.216 C:\>ping baidu.com 正在 Ping baidu.com [220.181.57.216] 具有 32 位元組的資料: //如果沒有認證,一般icmp流量也會被禁用,但是我們可以看到域名成功解析為ip地址,則dns流量沒有被過濾。
如果放行了dns流量,就可以使用dns隧道免費上網。在我們學校,可以突破晚上十一點斷網的限制,如果對網速沒什麼要求,連網費都可以不用交。
1.2.dns隧道原理
- dns隧道工具將進入隧道的其他協議流量封裝到dns協議內,在隧道上傳輸。這些資料包出隧道時進行解封裝,還原資料。
-
在建立隧道之前,我們需要讓dns隧道的客戶端找到隧道的服務端,其過程大致如下:
①本地主機A傳送一條dns請求,查詢一個我們設定好的域名。
②因為沿途的dns伺服器都沒有這個域名的相關資訊,最終這條請求被轉發到權威域名伺服器B(假如是騰訊雲上註冊的域名,騰訊的域名伺服器就是針對你的域名的權威伺服器)。
③我們添加了一條NS記錄,關於要查詢的域名,需要轉到我們的公務伺服器C做解析,B就會把C的地址返回給A。
④A知道了C的地址,就可以建立起dns隧道了。
二.實現步驟
2.1.工具準備
2.2.新增域名解析
我申請的域名是slickghost.com
a.slickghost.com和b.slickghost.com都是子域名(三級域名)
這裡需要新增兩條記錄:
主機記錄記錄型別記錄值 bA雲主機公網IP aNSb.slickghost.com

兩條記錄組合的含義如下:
當我們的主機去查詢a.slickghost.com時,由於該域名對應的是一條NS記錄,記錄值是b.slickghost.com,此時,dns查詢請求就會轉發到b.slickghost.com這個域名伺服器,而這個域名對應一條A記錄,該記錄值為雲主機的公網地址,所以最終dns查詢請求最會轉發到我們的伺服器。
2.3.安裝iodine
iodine(點選下載) 是一個整合客戶端和服務端的工具。這裡使用的服務端為linux,客戶端為windows,要下載兩個版本。

2.3.1.iodine服務端

伺服器直接使用wget下載即可,如果有問題,可以先下載好壓縮包再傳到伺服器上。
wget https://code.kryo.se/iodine/iodine-0.7.0.tar.gz//下載iodine tar -zxvf iodine-0.7.0.tar.gz//解壓 cd iodine-0.7.0//解壓後進入該目錄 make install //安裝
安裝後之後就會出現一個bin目錄,該目錄下有兩個iodine應用程式,iodine(客戶端)和iodined(服務端)。

接著執行命令: ./iodined -f -c -P Password123 192.168.0.1 a.slickghost.com & 引數說明: -f to keep running in foreground -c to disable check of client IP/port on each request -P password used for authentication (max 32 chars will be used) Password123就是客戶端連線伺服器時需要用到的密碼

此時DNS隧道服務端就部署完成了,等待客戶端的連線。
可以使用iodine官方提供的工具測試服務端是否搭建成功: 測試工具2.3.1.iodine客戶端
客戶端需要一個TAP網絡卡,下載一個六快撥或者openvpn,安裝完之後就會多出一塊網絡卡。
六快撥下載地址解壓windows版iodine後在 管理員模式下 執行命令:
iodine -P Password123 -f 公網地址 a.slickghost.com

至此,DNS隧道就搭建完成了。這時候應該要能夠ping通剛剛我們在伺服器指定的IP:192.168.0.1。

建立dns隧道客戶端時,其與服務端協商,並自動幫我們配置好了TAP網絡卡的IP地址。

剛剛ping的時候使用的就是這個虛擬網絡卡。

2.4.使用代理
我們已經把dns隧道搭建好了。但是現在應用程式的流量沒有被指定通過這個隧道來走,我們使用 ssr全域性代理+Proxifier 來解決這個問題。
2.4.1.伺服器安裝ssr
具體安裝步驟參照:ssr搭建教程
2.4.2.客戶端ssr設定
網上下載一個ssr客戶端,進行如下配置

伺服器ip是使用iodine建立隧道服務端時指定的ip。
伺服器埠是安裝ssr服務端時指定的埠。
將客戶端ssr設定為 全域性代理之後,瀏覽器就可以繞過認證上網了。
2.4.2.Proxifier設定
ssr只能讓我們使用瀏覽器訪問網頁的時候繞過認證,其他的應用程式還是不能上網,我們需要用Proxifier將本地應用程式的流量轉到ssr代理,從而能夠利用dns隧道。
開啟Proxifier之後,會自動檢測可走ssr代理:

點選確定後就會自動建立一個規則——直連到SSR
若檢測不到,我們可以手動建立:配置檔案——代理規則——新增。

這時候電腦所有的應用程式都通過Proxifier走ssr代理,而原來我們的瀏覽器已經走ssr代理了,導致衝突,需要再新增一條規則,讓你用到的瀏覽器不需要通過Proxifier。我平時使用的是firefox

新增好以上兩條規則之後,所有的應用程式就都可以上網了。
登個tim,聽聽音樂,刷個網頁啥還是沒問題的。如果你的隧道伺服器在香港或者國外,還可以過GFW。
