有沒有辦法將 DNS 流量重新導向到 ssh 隧道

有沒有辦法將 DNS 流量重新導向到 ssh 隧道

我正在嘗試獲得類似於可用的不同智慧型 DNS 代理的準系統解決方案。

現在我可以透過使用 ssh 隧道和建立動態轉送來完成一部分。

host myserver
User root
    HostName MyIP
    IdentityFile <MyKey>
    DynamicForward 4444

現在,當我有瀏覽器並且能夠設定襪子代理時,這就可以了。

但什麼

  1. 我想要的是運行一個 DNS 伺服器(類似於 dnsmasq)。
  2. 在我的路由器上設定 DNS 伺服器。
  3. 透過 ssh 傳輸所有流量。

答案1

穿梭可能會有幫助:

透明代理伺服器,充當窮人的 VPN。透過 ssh 轉發。不需要管理員。適用於 Linux 和 MacOS。支援 DNS 隧道。

它允許您透過 SSH 將所有流量轉發到伺服器,包括 DNS

我自己沒有使用過它,但也許這就是您正在尋找的?

答案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

相關內容