SSH反向隧道 (内网穿透)
- 需要准备两台机器
- A 机器为公网机器 (11.22.33.44) 相当于桥梁
- B 机器为内网机器 (10.0.0.2) 需要穿透
构建隧道
- 需要在 A 机器上将sshd服务开启
GatewayPorts
的配置
设置/etc/ssh/sshd_config
配置文件中的#GatewayPorts no
为GatewayPorts yes
sed -i "/GatewayPorts/c GatewayPorts yes" /etc/ssh/sshd_config systemctl restart sshd
- 参数详解
-f
后台执行ssh指令-C
允许压缩数据-N
不执行远程指令-R
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口-L
将本地机(客户机)的某个端口转发到远端指定机器的指定端口-o ServerAliveInterval=300
ssh 客户端每300秒就给server发个心跳,以免链路被RST
- 建立A机器到B机器的反向代理,即使用ssh隧道功能将 A 机器上指定端口转发到 B 内网机器上
ssh -fCNR 8222:10.0.0.2:22 root@11.22.33.44 # OR ssh -fCNR 8222:10.0.0.2:22 root@11.22.33.44 -o ServerAliveInterval=300
- 建立B机器的正向代理,用来做转发,B 机器的8282端口为本地转发端口,负责和外网进行通信,并将数据转发到A机器的22端口,实现了可以从其他机器访问的功能
ssh -fCNL 0.0.0.0:8282:11.22.33.44:22 root@11.22.33.44
issues
- 需要这个隧道能够一直保持连接状态,可以使用
autossh