有没有办法将 DNS 流量重定向到 ssh 隧道

有没有办法将 DNS 流量重定向到 ssh 隧道

我正在尝试获取与可用的不同智能 DNS 代理类似的准系统解决方案。

现在我可以通过使用 ssh 隧道和创建动态转发来完成一部分。

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

现在,当我有浏览器并且能够设置 sock 代理时,它就可以工作了。

但什么

  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

感谢 Saaru回答,我能够让 sshuttle 代理仅有的DNS 请求使用如下命令:

sshuttle --dns -r username@host \
    --ns-hosts=dns01.example.com,dns02.example.com \
    0/0:53 ::/0:53

相关内容