通过 SOCKS 代理运行 SSH?

通过 SOCKS 代理运行 SSH?

我需要在本地实现类似于 VPN 的行为,而不使用 VPN。

我已经为可从 WAN 访问的给定服务器创建了 SOCKS 代理,并且我希望所有流量都通过该代理转发,以便我可以访问该网络内的主机。

我的 SOCKS 代理如下所示:

ssh -t -D 8088 user@proxy-host 'watch -n 1 date'

我已经使用系统设置将我的系统设置为代理:

在此输入图像描述

我已经验证我的环境变量设置正确:

naftuli@macbook-nkay:~$ env | grep socks_proxy
socks_proxy=socks://127.0.0.1:8088/

但是,当我通过 SSH 连接到给定服务器时,我无法访问它:

$ ssh internal-host
ssh: Could not resolve hostname internal-host: Name or service not known

我认为问题在于 DNS 没有通过 SOCKS 隧道转发。有办法设置吗?我能够将 Firefox 配置为手动使用远程 DNS,效果非常好。有这个的环境变量吗?

答案1

类似的主题在:

openssh 本身不理解socks_proxy环境变量。您需要使用例如 netcat 来通过代理引导流量:

 ssh -o ProxyCommand='nc -X 5 --proxy 127.0.0.1:8088 %h %p' user@host

转发DNS请求会更复杂,因为openssh中的低级函数不尊重环境变量。您可能需要设置本地 DNS 解析器,它将请求转发到代理。有dns-tcp-socks-代理,应该处理。

./dns_proxy --socks_port=8088 --listen_port=53

当您运行此守护程序时,您应该设置您的/etc/resolv.conf(希望 Mac 尊重这一点)以使用此 DNS。

nameserver 127.0.0.1

应该可以dig再次使用简单的测试,但是当此解析器功能正常时,您将不需要代理部分:

dig example.com

作为跳转盒的替代方案:

作为一个简单的替代方案,我建议使用普通主机作为跳转主机,跳过代理部分并使用-W开关进行 IO 重定向:

ssh -oProxyCommand="ssh -W %h:%p jumpbox" destination_host

它应该在跳线盒上进行 DNS 解析和路由。该选项可以轻松地合并到您的~/.ssh/config

相关内容