内网服务如何被外面访问到?一文讲清 SSH 端口转发
开发时经常遇到这样的场景:服务跑在公司内网的机器上,人在外面想访问;或者数据库只允许本机连接,但你想用本地工具连它。这时候不用改防火墙、不用买域名,一条 SSH 命令就能解决——这就是 SSH 端口转发。
一、本地转发:把远端服务"拉"到本地
最常见的用法。假设内网服务器 192.168.1.100 上跑着一个 8080 的 Web 服务,你只能 SSH 到跳板机 10.0.0.5:
ssh -L 8888:192.168.1.100:8080 user@10.0.0.5
登录后,访问本机的 localhost:8888,流量就会经跳板机转给内网的 8080。参数读法:"把 192.168.1.100:8080 映射到我本地的 8888 端口"。连数据库也一样,比如把远端 MySQL(默认 3306)拉到本地:
ssh -L 3307:127.0.0.1:3306 user@db-server
注意这里目标写 127.0.0.1 是相对服务器自己而言的,即"服务器上的 MySQL"。
二、远程转发:把本地服务"推"出去
反过来,想让别人访问你电脑上的服务(比如你本地起了个 3000 的开发环境),在本地执行:
ssh -R 9000:127.0.0.1:3000 user@server
之后服务器上的 9000 端口就是你的本地 3000。同事访问 server:9000 就能看到你的开发环境(需要服务器 sshd 配置 GatewayPorts 才允许外部访问,默认只监听 127.0.0.1)。
三、动态转发:做一个简易 SOCKS5 代理
ssh -D 1080 user@server
本机 1080 端口就变成了 SOCKS5 代理,浏览器挂上代理后,所有流量都从 server 出去。访问内网多个服务时比一条条 -L 方便得多。
四、两个实用技巧
1. 免打扰后台:加上 -N(不执行远程命令)和 -f(后台运行),比如 ssh -N -f -L 8888:... ,通道在后台默默工作,结束时 kill 掉即可。
2. 防止掉线:加 -o ServerAliveInterval=60,每 60 秒发一次心跳,NAT 环境下连接不容易断。
总结:-L 把远端拉到本地,-R 把本地推到远端,-D 做代理。记住这三个字母,内网穿透的九成场景都覆盖了。
- 点赞
- 收藏
- 关注作者
评论(0)