我正在嘗試獲得類似於可用的不同智慧型 DNS 代理的準系統解決方案。
現在我可以透過使用 ssh 隧道和建立動態轉送來完成一部分。
host myserver
User root
HostName MyIP
IdentityFile <MyKey>
DynamicForward 4444
現在,當我有瀏覽器並且能夠設定襪子代理時,這就可以了。
但什麼
- 我想要的是運行一個 DNS 伺服器(類似於 dnsmasq)。
- 在我的路由器上設定 DNS 伺服器。
- 透過 ssh 傳輸所有流量。
答案1
答案2
是和不是。 Dnsmasq 不能只要求 SOCKS 代理來解析名稱,因為沒有這樣的 SOCKS 協定指令;代理只有一個需要網域+埠的指令和立即連接到它,而客戶端實際上永遠不會知道所使用的 IP 位址。 (此外,DNS 是多一點不只是IP位址查找,所以即使這樣的功能曾是可用,但您仍然無法在其上正確模擬 DNS。
然而,一些 DNS 解析器(不是 Dnsmasq)可以與真實的透過 SSH 隧道的 DNS 伺服器。 DNS 伺服器需要支援 TCP,因此您可以使用標準ssh -L
隧道並將其指向某個遠端伺服器。 Dnsmasq 將無法運作(它總是先嘗試 UDP),但可以告訴 Unbound 始終透過 TCP 進行查詢。使用 DoT(基於 TLS 的 DNS)或 DoH 的解析器也可以工作,因為這些解析器目前也是基於 TCP 的。
不過,我確實推薦使用 IP 層隧道(VPN)而不是 SOCKS。雖然僅使用 TCP 就可以生存很長一段時間,但許多程式也需要 UDP,總體而言,透過 IP 隧道路由所有內容比透過 SOCKS 路由要簡單得多。
答案3
感謝薩魯的回答,我能夠透過 sshuttle 進行代理僅有的使用以下命令進行 DNS 請求:
sshuttle --dns -r username@host \
--ns-hosts=dns01.example.com,dns02.example.com \
0/0:53 ::/0:53