内网服务器端口转发
远程转发
通过远程转发,实现阿里云访问高算。
原理
[公网服务器 123.56.113.160] [内网服务器 10.11.26.1]
| |
ssh -p 2222 localhost ←--SSH隧道--→ 22端口(SSH服务)
| |
访问localhost:2222 ----------------→ 实际访问内网SSH
内网服务器配置
#!/bin/bash
while true; do
ssh -N \
-R 127.0.0.1:2222:localhost:22 \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=3 \
-o ExitOnForwardFailure=yes \
guoyingwei@123.56.113.160
echo "[$(date)] Tunnel disconnected. Reconnecting..." | tee -a ~/tunnel.log
sleep 5
done
直接后台运行该脚本
详细解释
-R 127.0.0.1:2222:localhost:22
远程端口转发(Remote Port Forwarding)
完整格式:-R [绑定地址:]远程端口:目标地址:目标端口
拆解你的配置:
-
127.0.0.1:公网服务器上监听的地址127.0.0.1= 只能公网服务器本地访问(安全)0.0.0.0= 任何人都能访问公网服务器的这个端口(危险)- 不指定 = 默认
localhost
-
2222:公网服务器上的端口号- 访问公网服务器的
localhost:2222时触发转发
- 访问公网服务器的
-
localhost:从内网服务器视角看的目标地址localhost= 内网服务器自己- 也可以是
192.168.1.100(内网其他机器)
-
22:目标端口(SSH默认端口)
数据流向:
公网服务器访问 127.0.0.1:2222
↓
通过SSH隧道反向传输
↓
内网服务器的 localhost:22
↓
内网服务器的SSH服务
bash -o ServerAliveInterval=60 \
心跳间隔
-o:设置SSH选项(option)ServerAliveInterval=60:每60秒发送一次心跳包
作用:
- 防止NAT/防火墙因为连接空闲而断开
- 及时发现连接中断
如果不设置:
- SSH连接可能在空闲一段时间后被网络设备断开
- 你不会立即知道连接已断开
- 隧道悄悄失效
心跳工作原理:
内网服务器 --每60秒发送一次--> 公网服务器
<--收到回复确认连接正常--
如果3次心跳没收到回复(见下面的参数),就认为连接断了
公网服务器使用
ssh -p 2222 guoyingwei@127.0.0.1
退出的时候直接 exit 或按 Ctrl+D,或者直接在tmux中运行
本地转发
本地运行:
ssh -N -L 8890:localhost:8890 guoyingwei@10.11.26.1
直接访问localhost:8890端口,就可以到达远程服务器端的8890
两种端口转发模式区别
-L 本地端口:目标:目标端口 user@中转服务器
↑在哪监听 ↑去哪里
-R 远程端口:目标:目标端口 user@中转服务器
↑在哪监听 ↑去哪里