如何使用 iptables 转发创建 SSH 反向隧道?

Jac*_*ich 4 linux ssh iptables ssh-tunneling

我的家庭网络中有一台服务器(无法端口转发)和 WAN 上的 VPS。我需要一个特定的端口上的请求,不从,该VPS将被转发到我的家庭服务器。我有一个 SSH 隧道,如果我将请求发送到localhostVPS ,它可以正常工作。但是我希望localhost从互联网转发到 VPS 的请求通过隧道发送到我的家庭服务器。它需要是双向的。

我见过这个问题,但它对我不起作用。我很可能做错了什么。

我的确切程序:
a我的主服务器 server 上,我运行此命令来设置隧道:

ssh -v -N -R 2222:localhost:22 root@server-b.com
Run Code Online (Sandbox Code Playgroud)

我在服务器b(VPS)上运行了以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 2223 -j DNAT --to-destination 127.0.0.1:2222
Run Code Online (Sandbox Code Playgroud)

并尝试ssh从另一台机器:

ssh root@server-b.com -p 2223
Run Code Online (Sandbox Code Playgroud)

我设置GatewayPorts yessshd_config但是我仍然发现同样的问题:
ssh: connect to host server-b.com port 2223: Connection denied

Irf*_*tif 5

在服务器上设置GatewayPorts yesAllowTcpForwarding yes输入。有了明确提到IP或服务器上创建反向隧道。这样服务器上的 sshd 也接受来自公共的连接:sshd_configbGatewayPorts clientspecified0.0.0.0*ab

ssh -NTR *:2222:localhost:22 root@server-b.com
Run Code Online (Sandbox Code Playgroud)

否则 sshd 仅与GatewayPorts no.

现在ssh 从另一台机器到端口2222

ssh root@server-b.com -p 2222
Run Code Online (Sandbox Code Playgroud)

a验证后您将登录到服务器。
无需设置iptables转发。顺便说一句,root如果可能,请避免用户进行远程登录。


如果您不想设置GatewayPorts选项,那么您需要将流量从其他端口转发2223localhost:2222

另一种选择是建立从端口一些最低限度的本地转发服务器22232222使用工具,如sshsocatnetcat*inetd等。

以上任何一种都可以与反向隧道结合使用,以一步完成来自服务器的双重转发a

ssh -TR *:2222:localhost:22 root@server-b.com "ssh -4gfNTL 2223:localhost:2222 localhost"
Run Code Online (Sandbox Code Playgroud)