如何在 Windows WSL2 上使用 sshuttle

How to Use sshuttle on Windows WSL2

我们有一个 Jenkins 服务器,只能从云上的 VPC 内访问。在 Mac 和 Linux 上,我使用 sshuttle 建立到堡垒实例的 ssh 连接(充当代理)并在浏览器中打开 Jenkins 控制台。一切正常。
现在我在 Windows 并尝试在 WSL2 上做同样的事情。如果我之前没记错的话,sshuttle 在 WSL1 上没有工作(失败并出现一些错误消息),但我设法在 WSL2 上 运行 它没有任何问题。 ssh 连接已建立,我可以访问我的 Jenkins(使用 curl)。
然后我尝试通过 WSL2:
在 Windows 上访问我的 Jenkins 1. 我找到了 WSL2 的 IP 地址和 ssh 隧道的端口:

# lsof -i -n | grep ssh
sshuttle 1234  rad    5u  IPv4  39270      0t0  TCP *:socks (LISTEN)
ssh      5678  rad    3u  IPv4  40252      0t0  TCP 172.25.236.84:57578->bastion:ssh (ESTABLISHED)

2。我将 Firefox (v77) 的网络代理设置配置为使用我的 ssh 隧道:

 Manual proxy configuration
 SOCK host: 172.25.236.84
 Port: 1080
 SOCKS V5 (tested with V4 as well)

但是在 Firefox 上加载页面失败并出现 "The connection was reset" 错误。我通过 Powershell 测试了 SOCKS 端口打开并响应(使用 Test-NetConnection)。
1.知道问题是什么吗?如何让它发挥作用?
2. 如果不行,有没有其他解决方案(例如Docker等)?
谢谢。

我不确定,但我的猜测是 sshuttle 实际上并没有充当 SOCKS 代理,这就是连接被重置的原因。
我设法使用 ssh SOCKS 代理在 Windows 机器上访问我的 Jenkins:ssh -D 0.0.0.0:1080 rad@bastion 并将 Firefox 配置为使用 SOCKS 代理。
有趣的是,为此您甚至不需要 WSL。看来 Windows10 有 OpenSSH,你可以使用它。只需打开 CMD 并输入 ssh -D 1080 rad@bastion 并将 Firefox 设置为使用本地主机作为代理。
如果有任何更好的解决方案或任何 comment/concern(除了 DNS over SOCKS)使用这种方法,请分享。
谢谢

作为 WSL(2) 的替代方案,您可以 运行 常规 SSH 隧道。

例如:

ssh -N -L 127.0.0.1:5432:some_domain_to_forward:5432 user@jumpbox_ip

然后连接到 127.0.0.1:5432