我希望允许家庭网络中的一些客户端设备连接到互联网,但连接应该通过我的 iMac,它具有通往远程服务器的 SSH 隧道。我想最终使用远程服务器的互联网连接来代表客户端设备发出请求。
我从 iMac 开始使用隧道
ssh -D 8127 -f -g -N -C -vvv myuser@remote_server
我使用代理 localhost:8127 在 iMac 上配置浏览器,一切正常。我连接的 Web 服务器看到来自 Remote_server 的传入连接。到目前为止,一切都很好。
但是,当我在客户端中配置相同的代理设置时,我什么也没得到。我的 Windows 笔记本电脑上的浏览器返回“连接已重置”。我尝试使用 Android 设备和 iPad。它们都不起作用。
隧道中的详细日志并不能透露太多信息。
debug1: Connection to port 8127 forwarding to socks port 0 requested.
debug2: fd 12 setting TCP_NODELAY
debug3: fd 12 is O_NONBLOCK
debug3: fd 12 is O_NONBLOCK
debug1: channel 5: new [dynamic-tcpip]
debug2: channel 5: pre_dynamic: have 0
debug2: channel 5: pre_dynamic: have 411
debug2: channel 5: zombie
debug2: channel 5: garbage collecting
debug1: channel 5: free: dynamic-tcpip, nchannels 7
debug3: channel 5: status: The following connections are open:
#2 direct-tcpip: listening port 8127 for 188.65.124.58 port 443, connect from 127.0.0.1 port 61067 to 127.0.0.1 port 8127 (t4 r0 i0/0 o0/0 fd 9/9 cc -1)
#3 direct-tcpip: listening port 8127 for 172.217.22.206 port 443, connect from 127.0.0.1 port 61091 to 127.0.0.1 port 8127 (t4 r1 i0/0 o0/0 fd 10/10 cc -1)
#4 direct-tcpip: listening port 8127 for 66.102.1.189 port 443, connect from 127.0.0.1 port 60990 to 127.0.0.1 port 8127 (t4 r2 i0/0 o0/0 fd 11/11 cc -1)
#6 direct-tcpip: listening port 8127 for 172.217.22.206 port 443, connect from 127.0.0.1 port 61092 to 127.0.0.1 port 8127 (t4 r4 i0/0 o0/0 fd 13/13 cc -1)
有谁知道为什么这不起作用?
答案1
您仅绑定到本地主机端口。man ssh
这部分的文档(请参阅 参考资料)中并没有特别明确:
默认情况下,按照设置绑定本地端口
GatewayPorts
。然而,可以使用显式的bind_address 将连接绑定到特定地址。的bind_addresslocalhost
表示侦听端口仅限本地使用,而空地址或*
表示该端口应可从所有接口使用。
并来自ssh_config
:
网关端口指定是否允许远程主机连接到本地转发端口。 默认情况下,
ssh
(1) 将本地端口转发绑定到环回地址。这可以防止其他远程主机连接到转发的端口。GatewayPorts
可用于指定ssh
应将本地端口转发绑定到通配符地址,从而允许远程主机连接到转发的端口。论证必须是“是”或“否”。默认为“否”。
这意味着,当您使用时,ssh -D 8127
您使用的是根据 绑定的端口GatewayPorts
,默认为localhost
,即远程主机无法连接。
如果您指定,ssh -D :8127
那么您将包括对地址的引用,并且由于该地址为空,因此默认为*
,即远程主机可以连接。
将您的命令更改为此,它将按照您的意愿工作:
ssh -D :8127 -f -g -N -C -vvv myuser@remote_server