代理你的 DNS 伺服器 – dnsproxy

前言廢話

之前有一篇文章,我們教學了如何自架一個 DNS 伺服器,其中也包括很新興的 DoH 以及 DOT。但是這其中有一個問題,很多裝置根本沒辦法用 DoH 或 DoT 啊!那有沒有一個辦法,我們可以代理這個 DoH 伺服器成一般的 DNS?

AdGuard 就針對這個情況出了一款 dnsproxy,這裡 是他的 Github。即便他現在看起來還算是在開發階段,但是仍然可以使用。

下載程式

我們可以到 這裡 下載最新釋出的版本,請選擇對應的系統下載。

001.jpg

這篇文章會在 Linux 上示範,我們執行以下命令:

sudo wget https://github.com/AdguardTeam/dnsproxy/releases/download/v0.49.1/dnsproxy-linux-amd64-v0.49.1.tar.gz

解壓縮這個檔案

sudo tar zxvf dnsproxy-linux-amd64-v0.49.1.tar.gz

解壓縮後,他會生出一個名為 linux-amd64 的資料夾,裡面大概長得像這樣:

002.jpg

其中,dnsproxy 這個檔案就是主程式,我習慣將他移到 /etc/ 底下

sudo mv dnsproxy /etc/

接著,我們就可以來測試他啦!

如何使用

一般 DNS

他的使用方式很簡單,假設我們只要代理一般 DNS(8.8.8.8),可以這麼做:

/etc/dnsproxy -u 8.8.8.8:53

003.jpg

你也可以代理多個上游:

/etc/dnsproxy -u 8.8.8.8:53 -u 1.1.1.1:53

但是這些操作其實都不是我們要的,我們要的是:代理 DoH、DoT 伺服器,所以可以這麼做:

DoH

/etc/dnsproxy -u https://your.dns-server.com/dns-query -b 1.1.1.1:53

其中,-b 的意思是,第一次要去哪裡查找這個網域名稱,之後就會都詢問這個 DoH 伺服器囉!

DoT

如果你是要代理 DoT 伺服器,那就這麼做:

/etc/dnsproxy -u tls://your.dns-server.com -b 1.1.1.1:53

這邊 -b 的意思與上方 DoH 一樣。

更多用法

你可以在 https://github.com/AdguardTeam/dnsproxy 找到更多使用方式!

包成服務

上面的做法,都是直接在命令列執行。但我們不可能無時無刻都開著這個命令列,對吧!所以我們現在要將他包成一個服務。

使用 vim 編輯檔案,最後方名字可以改成你喜歡的

sudo vim /lib/systemd/system/dnsproxy.service

我們貼上以下內容,ExecStart 請使用你自己的伺服器:

[Unit]
Description=DNS Proxy
After=multi-user.target

[Service]
Type=simple
ExecStart=/etc/dnsproxy -u https://your.dns-server.com/dns-query -b 1.1.1.1:53
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

存檔退出後,使用以下命令生效

sudo systemctl daemon-reload

這下子就完成啦,你現在可以使用以下指令控制這個服務:

sudo systemctl start dnsproxy.service  //啟動服務
sudo systemctl restart dnsproxy.service  //重新啟動服務
sudo systemctl stop dnsproxy.service  //停止服務
sudo systemctl enable dnsproxy.service  //開機自動執行此服務
sudo systemctl disable dnsproxy.service  //開機不執行此服務(預設)

結語

這就是一款簡便代理 DoH 或 DoT 伺服器的工具啦!當初我也是找了好一段時間才找到他,現在我可以為我家的各種設備指向這台 Linux 主機,就可以享用到我安全的 DoH 伺服器!