我的家庭网络中有一台服务器(无法端口转发),并且 WAN 上有一台 VPS。我需要某个端口上的请求,到,而不是从要转发到我的家庭服务器的 VPS。我有一个 SSH 隧道,如果我将请求发送到localhost
VPS 上,它可以正常工作。然而,我希望从互联网转发到 VPS 的请求localhost
通过隧道发送到我的家庭服务器。而且它需要是双向的。
我见过这问题,但它对我不起作用。我很可能做错了什么。
我的具体过程:在我的家庭服务器
server 上a
,我运行以下命令来设置隧道:
ssh -v -N -R 2222:localhost:22 [email protected]
b
我在服务器(VPS)上运行以下命令:
iptables -t nat -A PREROUTING -p tcp --dport 2223 -j DNAT --to-destination 127.0.0.1:2222
并尝试ssh
从另一台机器:
ssh [email protected] -p 2223
我设置GatewayPorts yes
了sshd_config
,但仍然发现同样的问题:
ssh:连接到主机 server-b.com 端口 2223:连接被拒绝。
答案1
设置GatewayPorts yes
并AllowTcpForwarding yes
在sshd_config
服务器上b
。通过GatewayPorts clientspecified
明确提及 IP0.0.0.0
或*
在服务器上a
创建反向隧道。这样服务器上的 sshdb
也接受来自公共的连接:
ssh -NTR *:2222:localhost:22 [email protected]
否则 sshd 仅侦听环回接口,就像GatewayPorts no
.
现在ssh
从另一台机器到端口2222
:
ssh [email protected] -p 2222
a
身份验证后您将登录到服务器。
无需设置iptables
转发。顺便说一句,如果可能的话,请避免用户root
进行远程登录。
如果您不想设置GatewayPorts
选项,则需要将流量从其他端口转发2223
到localhost:2222
。
iptables
这可以在服务器上完成b
:iptables -t nat -I PREROUTING -p tcp -m tcp --dport 2223 -j DNAT --to-destination 127.0.0.1:2222
*
REDIRECT
仅适用于相同接口但路由到
loopback
接口不允许,除非:echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/route_localnet
现在
ssh
从另一台机器到端口2223
:ssh [email protected] -p 2223
2223
另一种选择是使用、、等2222
工具从端口设置一些最小的本地转发服务器。ssh
socat
netcat
*inetd
在服务器上
b
,带有socat
:socat TCP-LISTEN:2223,fork TCP:127.0.0.1:2222
或者与
netcat
:nc -l -p 2223 -c "nc 127.0.0.1 2222"
或者与
ssh
:ssh -4gfNTL 2223:localhost:2222 localhost
上述任何一项都可以与反向隧道结合起来做一个双重转发a
一步从服务器:
ssh -TR *:2222:localhost:22 [email protected] "ssh -4gfNTL 2223:localhost:2222 localhost"