SSH和RDP可通过反向隧道在无公网IP时安全落地:内网服务器主动出站连接公网中转机,外网用户经中转端口访问,全程不开放入站端口,结合密钥认证、端口隔离与防火墙白名单保障安全。

没有公网 IP 时,SSH 和 RDP 这两类关键远程接入协议仍可安全落地,核心思路是让内网服务器主动“出站”连接一台具备公网 IP 的中转服务器,建立反向隧道,再由外网用户通过该中转节点访问。整个过程不依赖内网设备开放入站端口,规避了 NAT 和防火墙阻断问题,同时可通过密钥认证、端口隔离、连接限制等手段保障安全。
SSH 反向代理接入(Linux/macOS 内网主机)
适用于远程维护 Linux 服务器、树莓派、NAS 等设备:
- 在中转服务器(如云 VPS)上启用 SSH 端口转发支持:编辑 /etc/ssh/sshd_config,确保以下三行未被注释且值正确:
GatewayPorts yes
AllowTcpForwarding yes
PermitRootLogin yes(如需 root 登录,否则用普通用户并配 sudo 权限)
修改后执行 systemctl restart sshd - 在内网服务器上执行反向隧道命令(建议使用密钥登录):
ssh -fNTR 2222:localhost:22 user@vps-ip
其中 2222 是中转服务器上对外暴露的端口,localhost:22 是内网本机 SSH 服务;-fNTR 实现后台静默建连 - 外网用户即可用:
ssh -p 2222 user@vps-ip
直接登录内网服务器——流量经中转服务器解密转发,不暴露内网拓扑 - 增强安全:禁用密码登录(PasswordAuthentication no),仅保留公钥;为隧道端口设置防火墙白名单(如只允特定 IP 访问 2222);定期轮换密钥
RDP 反向代理接入(Windows 内网主机)
适用于远程桌面管理 Windows 工作站或服务器:
- 确认内网 Windows 已开启远程桌面(系统属性 → 远程 → 允许远程连接),且目标用户有登录权限
- 中转服务器需为 Linux(推荐)或 Windows Server,同样配置 GatewayPorts yes 和 AllowTcpForwarding yes,重启 sshd
- 在 Windows 内网机上使用 OpenSSH 客户端(Win10 1809+ 自带)运行:
ssh -fNTR 3390:localhost:3389 user@vps-ip
注意:3389 是 Windows 默认 RDP 端口,3390 是中转服务器上对外映射端口(避开默认 3389 更安全) - 外网用户用标准远程桌面客户端连接:
计算机栏填 vps-ip:3390,其余按常规登录即可 - 额外加固:在 Windows 防火墙中限制仅允许本地回环访问 3389;中转服务器上用 ufw 或 iptables 限制 3390 端口来源 IP;RDP 登录账户启用强密码 + 账户锁定策略
统一运维与长期稳定要点
单次手动命令易断连,生产环境需保障持续可用:
- 使用 autossh 替代原生 ssh:自动检测断连并重试,例如
autossh -M 0 -fNTR 2222:localhost:22 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" user@vps-ip - 将隧道命令写成 systemd service(Linux)或 Windows Task Scheduler 任务,开机自启
- 中转服务器上避免复用同一端口映射多个内网设备;不同业务分配独立端口(如 2222/2223/2224…),便于审计和限流
- 记录所有隧道连接日志(sshd 的 LogLevel VERBOSE),配合 fail2ban 拦截异常登录尝试
替代方案对比:何时选 FRP 或 Cloudflare Tunnel
SSH 反向代理轻量直接,但仅限 TCP 流量;若需 HTTP(S)、WebSocket 或多协议支持,可考虑:
- FRP:适合需域名访问 Web 服务的场景(如内网办公系统),支持 HTTPS 终止、TCP/UDP 多路复用,配置比 SSH 稍复杂但更灵活
- Cloudflare Tunnel:零端口暴露,完全隐藏源 IP,自带 DDoS 防护和 WAF,适合面向互联网的业务,但不支持纯 TCP(如 RDP 原生协议需套在 WebSocket 或另寻方案)
- 不推荐直接用 Nginx 反向代理 RDP —— RDP 是二进制 TCP 协议,Nginx 无法理解其会话层,仅能做简单端口转发(此时不如用 SSH -R)










