通过远程计算机的 SSH 代理(SOCKS)-TCP 和 DNS

通过远程计算机的 SSH 代理(SOCKS)-TCP 和 DNS

我的问题:需要通过我的远程机器解析 DNS,同时将其用作代理。

因此,我有一个可以通过服务器从本地访问的 REMOTE。此 REMOTE 可以访问主机 TARGET_HOST。TARGET_HOST 在 REMOTE 的主机文件中设置如下:123.123.123.123 TARGET_HOST

我希望能够从 LOCAL 访问(在浏览器和我的应用程序中)TARGET_HOST。我已设置了一个“代理”,如下所示:

本地至服务器:
ssh -L 4567:LOCAL:4568 user@SERVER

服务器至远程:
ssh -D 4568 user@REMOTE

LOCAL 的网络配置设置为通过端口 4567 在本地主机上使用代理。

所以,一切都很好,我可以在浏览器中看到 TARGET_HOST。我遇到的问题是 DNS 无法从 LOCAL 解析,因此我在应用程序中运行的一些代码失败了。有人能帮我吗?有人能建议更好的方法吗?

答案1

据我理解,您希望在远程计算机上解析 DNS 请求。这可以做到,但返回的地址不能保证使用您的 ssh 隧道。它将传出本地网络。这是您真正想要的吗?最简单的解决方案是将地址名称及其 ip 地址硬编码到 /etc/hosts 中。困难的方法是转发 DNS 请求,您需要修改 /etc/resolv.conf 以使用名称服务器 127.0.0.1,以便可以在本地捕获 dns 请求。然后使用 ssh,您需要将本地端口 53 转发到远程端口 53。其中 remote 是可以解析您的 dns 请求的计算机的 ip 地址。问题是您不能以非 root 用户身份转发此端口。您可以通过转发一些随机端口(例如 20000)到远程端口 53 来解决这个问题。然后以 root 身份使用 netcat 将 udp 53 转发到本地主机 20000。

相关内容