bind + DNSCrypt 實現安全加密轉發,避免DNS污染

首先我先貼倆圖,看看現象bash

我解析下敏感域名
服務器

wKiom1SxXjfBy2RwAAFZl8p2dRM389.jpg

wKioL1SxXvyhv0ucAAELq4_NVjk694.jpg

巧了,我瞎蒙的隨便一個國外地址都特麼是DNS ?  
tcp

固然不是,由於祖國的出口佇立着一套高端設備,,,,   不說了,敏感了!ide



    此法的基本思路是避免DNS污染和DNS劫持。(不關心原理的同窗請跳過此段)衆所周知,GFW的一大凶器是在DNS上作文章。關於DNS污染和DNS劫持的區別,請參考這篇文章。歸納地說,DNS劫持是經過DNS服務器返回虛假的IP地址實現的,咱們只需將本機使用的DNS服務器改爲8.8.8.8等國外服務器便可。但這種方法沒法避免DNS污染,由於DNS查詢默認使用UDP協議,而牆能夠干擾咱們與DNS服務器的通訊。今天介紹的dnscrypt-proxy,則開設本地的DNS服務器,對DNS請求進行加密(牆沒法干擾加密後的請求),從國外的DNS服務器獲取正確的IP地址後反饋回來,是爲DNS代理的基本原理。工具

但這也就決定了,此法不可能成爲通用的×××方法,由於GFW對於有些網站是直接經過IP地址屏蔽的。網站


平臺:RHEL 6.6 x64 (CentOS)
ui

dns服務器:Bind Server
google


yum源並無dnscrypt-proxy,因此只能編譯安裝了加密

首先下載 dnscrypt-proxy代理

下載地址http://download.dnscrypt.org/dnscrypt-proxy/  (巧,這也被qiang了)


另外須要安裝 libsodium依賴庫 (我這裏選擇的是libsodium-0.5.0-mingw.tar.gz)

下載地址http://download.libsodium.org/libsodium/releases/ 

wget http://download.libsodium.org/libsodium/releases/libsodium-0.5.0-mingw.tar.gz 
tar xf libsodium-0.5.0-mingw.tar.gz
cd cd libsodium-0.5.0
CFLAGS="-O3 -fPIC" ./configure
make  &&  make install
ldconfig

依賴庫裝好了,下面來安裝 dnscrypt

上傳dnscrypt-proxy-1.4.0.tar.gz至服務器

tar xf dnscrypt-proxy-1.4.0.tar.gz
cd dnscrypt-proxy-1.4.0
cd src/libevent-modified/
CFLAGS="-O3 -fPIC" ./configure
make && make install
cd ..
cd ..
./configure 
make -j 2 && make install

安裝好了

 dnscrypt-proxy -h   //顯示幫助信息可用選項
 -a	--local-address=...   //監聽的本地地址[端口] (不指定端口默認監聽在53端口)
 -d	--daemonize        //後臺運行(不提示錯誤信息)
 -R	--resolver-name=...  //選定的國外加密解析服務器
 -T	--tcp-only         //僅以TCP協議運行(默認監聽在udp tcp上)
 -k                        //手動指定密鑰串
 -V	--version          //版本信息

經常使用就這幾個選項   更多詳細幫助 man  dnscrypt-proxy


wKiom1SxZ_2w68e9AAHBqXg8j40082.jpg

運行 dnscrypt-proxy 提示有錯誤,可是請注意這一條

這個文件中有默認的已經支持dnscrypt查詢的公共dns  opendns也在其中。

咱們來查看下這個文件  dnscrypt-resolvers.csv

wKioL1SxacbCny1rABww3Phd_9s146.jpg

第一行定義的是列標題,每一個字段用逗號隔開,每一行開頭就是 resolver_name  


用法以下

dnscrypt-proxy --resolver-name=resolver_name --local-address=127.0.0.1:40 --daemonize
dnscrypt-proxy -R resolver_name -a 127.0.0.1:40 -d   //簡寫,監聽在本地udp tcp40端口,遠端加密dns選用resolver_name


wKioL1SxbPnCGpsNAAHDzT3ESsc865.jpg

不加-d參數 默認是前臺運行


而後若是須要局域網開啓加密訪問,記得在iptables開啓相應端口

最後在其餘電腦上查詢一下看是否生效,

dig www.youtube.com @*.*.*.* -p 3535
; <<>> DiG 9.10-P2 <<>> www.youtube.com @*.*.*.* -p 3535
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32356
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.youtube.com.               IN      A
;; ANSWER SECTION:
www.youtube.com.        86400   IN      CNAME   youtube-ui.l.google.com.
youtube-ui.l.google.com. 900    IN      CNAME   youtube-ui-china.l.google.com.
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.138
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.102
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.100
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.113
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.101
youtube-ui-china.l.google.com. 180 IN   A       173.194.72.139
;; Query time: 872 msec
;; SERVER: *.*.*.*#3535(*.*.*.*)
;; WHEN: Sun Jan 11 99:29:00 ?D1ú±ê×?ê±?? 2015
;; MSG SIZE  rcvd: 205

解析是對了,可是並不表明 FQ  因此,這主要是搭配其餘工具來實現FQ 。

相關文章
相關標籤/搜索