![使用 ssh 反向隧道作为网关到达 NAT 下的机器](https://linux22.com/image/218489/%E4%BD%BF%E7%94%A8%20ssh%20%E5%8F%8D%E5%90%91%E9%9A%A7%E9%81%93%E4%BD%9C%E4%B8%BA%E7%BD%91%E5%85%B3%E5%88%B0%E8%BE%BE%20NAT%20%E4%B8%8B%E7%9A%84%E6%9C%BA%E5%99%A8.png)
我想访问具有 NAT 且没有端口转发的网络下的计算机。
在无端口转发 NAT 后面“关闭”的机器称为 RaspberryB。该机器与机器 (RaspberryA) 创建一条反向隧道,由于端口 22 上的端口转发,该机器可到达,且本地 IP 为 192.168.1.34。
所以在 RaspberryB 上我启动了命令
ssh -R 43022:localhost:22 userA@addressRaspA
在 RaspberryA 上,我可以通过反向隧道连接回来:
ssh userB@localhost -p 43022
它有效。
从同一网络中的PC我可以连接到RaspberryA,然后连接到RaspberryB(我在Windows下使用putty,但我认为无关紧要)
ssh [email protected] <<-- after this i'm inside RaspberryA
ssh userB@localhost -p 43022 <<-- after this i'm inside RaspberryB
现在我已经实现了我所需要的,从另一个网络中的PC访问raspberryB。
但,我只想在一篇文章中执行此操作...我想,如果从 PC 发出命令:
ssh [email protected] -p 43022
thgen 我的电脑应该连接到 RaspberryA 的 43022 端口,被重定向到 RaspberryB 的端口 22,因此我应该能够使用单个命令连接到 rapsberryB。
但我明白“网络错误:连接被拒绝”
我不认为这是防火墙问题,因为如果(在 RaspA 上)我 temconfigure ssh 来监听 PC 可以连接的 43022 端口,但以防万一这是我的iptables-S输出
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-sshd tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
那么,我哪里做错了?为什么与RaspberryA同一网络的PC无法通过最后一条命令到达raspberryB?
编辑:忘了提及,我还尝试打开 ssh,
ssh -R 1.1.1.1:43023:localhost:22 pi@addressRaspA
我不太了解 1.1.1.1 是否正确用于创建网关,或者远程主机是否尝试连接到网络中的所有 PC。尽管如此,仍然显示“连接被拒绝”消息
编辑2:我希望能够从网络上的任何PC访问raspberryB,因此创建到特定IP的远程隧道不是一个选项。最好如果 ita 也可以从网络外部工作,则可以在 raspberryA 网络的路由器上打开端口转发
答案1
已解决:我所做的错误:
首先,1.1.1.1不是“所有ip”。 0.0.0.0 是。
其次,我需要在 ssh 配置中激活“GatewayPorts”
所以:
- 编辑 /etc/ssh/sshd_config ,设置
GatewayPorts clientspecified
- 使用命令启动反向隧道
ssh -fN -R 0.0.0.0:43022:localhost:22 rasbberryA@addressRaspA