我需要在本地实现类似于 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