一、源碼下載
Iodine下載地址 GitHub:https://github.com/yarrick/iodine
二、源碼編譯
執行make命令以編譯服務端和客戶端二進制文件。運行make install以將二進制文件復制到目標目錄。運行make test以編譯并運行單元測試。
編譯以后文件如下:
在bin目錄下,有iodine和iodined兩個文件,分別為服務端和客戶端。
三、隧道工具運行
(1)、參數說明
-4 使用IPv4請求
-6 使用IPv6請求
-f 保持前臺運行
-r 強制使用DNS隧道進行傳輸
-P password
-m 最大傳輸大小
-M 最大傳輸長度
-T 傳輸類型
-O 編碼類型
Iodine支持多種DNS請求類型,并且NULL和PRIVATE類型期望提供最大的下載帶寬。該PRIVATE類型在專用范圍內使用值65399。其他可用的類型有TXT,SRV, MX,CNAME和A(返回CNAME)。通常Iodine會自動檢測并使用“最佳”請求類型,但是,DNS中繼可能會對NULL和TXT施加限制,從而使SRV或MX實際上是最佳選擇。但是可以使用該-T選項強制使用設定類型。
(2)、運行
服務端運行,執行 iodined -f 10.0.0.1 test.com
Listening to DNS for domain test.com,服務端開始監聽所有 test.com的DNS請求,所有指令數據等均通過請求域名的子域進行傳輸。
客戶端運行,執行 iodine -f -r 192.168.XXX.XXX (服務端IP地址)
Connected setup complete, transmitting data,客戶端運行后,可以發送指令、連接ssh進行數據傳輸等等。
四、命令傳輸
新開窗口,運行tcpdump -i dns0 port 53 -w file.pcap,其中參數-i 指定網卡, port 指定端口,DNS使用53端口,-w 寫入文件。
ssh連接,執行 ssh root@10.0.0.1
顯示抓取了166個包
使用wireshark打開保存的pcap文件,因為我們監聽的是ens33網卡,所以會有正常的DNS流量,比如192.168.221.2與192.168.221.129之間的通信,其中192.168.221.129是無服務端,192.168.221.2為網關地址,192.168.221.130為客戶端地址。
可以看到DNS查詢和響應使用了多種類型,包括A、AAAA、PTR、NULL等。打開一個響應報文,如下: