前言廢話
之前有一篇文章,我們教學了如何自架一個 DNS 伺服器,其中也包括很新興的 DoH 以及 DOT。但是這其中有一個問題,很多裝置根本沒辦法用 DoH 或 DoT 啊!那有沒有一個辦法,我們可以代理這個 DoH 伺服器成一般的 DNS?
AdGuard 就針對這個情況出了一款 dnsproxy,這裡 是他的 Github。即便他現在看起來還算是在開發階段,但是仍然可以使用。
下載程式
我們可以到 這裡 下載最新釋出的版本,請選擇對應的系統下載。
這篇文章會在 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
的資料夾,裡面大概長得像這樣:
其中,dnsproxy
這個檔案就是主程式,我習慣將他移到 /etc/
底下
sudo mv dnsproxy /etc/
接著,我們就可以來測試他啦!
如何使用
一般 DNS
他的使用方式很簡單,假設我們只要代理一般 DNS(8.8.8.8),可以這麼做:
/etc/dnsproxy -u 8.8.8.8:53
你也可以代理多個上游:
/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 [2606:4700:4700::1111]:53 -b 1.1.1.1:53 --edns --cache --cache-optimistic --cache-size=64000 --ratelimit=10 --refuse-any --udp-buf-size=2048
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 伺服器!