用 SSH 反向隧道从外网访问内网设备的一点心得
家里有一台常年开机的旧笔记本,跑着一些小服务(比如文件同步、个人笔记),但它是内网 IP,在公司或出差时想访问很不方便。折腾了一圈,最后用 SSH 反向隧道解决了,记录一下思路。
一、原理很简单
反向隧道就是让内网机器主动向一 IP 的服务器建立 SSH 连接,并在建立连接时告诉服务器:把你某个端口的流量转发给我。这样外网访问公网服务器的那个端口,就等于访问到了内网机器。
二、一条命令搞定
在内网机器上ssh -N -R 10022:localhost:22 user@公网服务器IP
-R 10022:localhost:22 表示让公网服务器监听 10022 端口,流量转发到内网机器的 22 端口;-N 表示不执行远程命令,只做端口转发。
之后在外网任意地方 ssh -p 10022 user@公网服务器IP,实际登录的就是家里那台内网机器了。
三、实践中的几个坑1. 服务端要开 GatewayPorts:默认情况下 sshd 只允许本地回环监听转发的端口。如果希望公网服务器的转发端口能被外部访问,需要在服务端的 sshd_config 里加上 GatewayPorts yes,然后重启 sshd。2. 连接断了要自动重连:网络抖动会导致隧道中断。可以用 autossh 代替 ssh,它会监控并自动重建连接:autossh -M 0 -N -R 10022:localhost:22 user@公网服务器IP。3. 安全别忽视:转发出来的端口最好配合密钥登录、禁用密码,并用防火墙限制来源 IP。内网机器的 SSH 也建议只允许密钥登录。4. 保持后台运行:加上 -f 参数让 ssh 进入后台,或者写成 systemd 服务开机自启,省得每次手动执行。
四、小结SSH 反向隧道不需要在路由器上做端口映射,也不用买内网穿透服务,一台有公网 IP 的云服务器加一条命令就能用。对于个人偶尔远程管理内网设备的场景,简单可靠,够用了。
执行其中执行:
台有公网
- 点赞
- 收藏
- 关注作者
评论(0)