内网服务如何被外面访问到?一文讲清 SSH 端口转发

举报
yd_226584033 发表于 2026/10/30 08:49:32 2026/10/30
【摘要】 用 ssh -L/-R/-D 三种端口转发解决内网服务访问问题:把远端服务拉到本地、把本地服务推出去、做 SOCKS5 代理,附防掉线与后台运行技巧。

开发时经常遇到这样的场景:服务跑在公司内网的机器上,人在外面想访问;或者数据库只允许本机连接,但你想用本地工具连它。这时候不用改防火墙、不用买域名,一条 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 做代理。记住这三个字母,内网穿透的九成场景都覆盖了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。