当前位置:首页 > 服务器技术 > 正文

Linux网络端口转发(手把手教你实现内网服务外网访问)

在日常开发、运维或远程办公中,你是否遇到过这样的问题:公司内网有一台数据库服务器,只能在局域网内访问,但你在家却需要连接它?或者你有一台树莓派运行着Web服务,但没有公网IP,外网无法直接访问?这时候,Linux端口转发就能帮你解决这些问题!

本文将从零开始,用通俗易懂的语言带你了解并实操Linux端口转发技术,即使你是完全的小白,也能轻松上手。

什么是端口转发?

端口转发(Port Forwarding)是一种网络技术,它允许将一个网络端口上的流量“转发”到另一个端口或另一台机器上。简单来说,就是让外部请求通过某个“中间人”服务器,最终到达目标服务。

常见的应用场景包括:

  • 访问内网中的Web服务、数据库等
  • 绕过防火墙限制
  • 实现内网穿透
  • 安全地暴露本地服务给外部测试

常用方法:SSH隧道

在Linux系统中,最常用也最安全的端口转发方式是使用SSH隧道。SSH本身加密传输,配置简单,无需额外安装软件。

SSH端口转发分为三种类型:

  1. 本地端口转发(Local Port Forwarding)
  2. 远程端口转发(Remote Port Forwarding)
  3. 动态端口转发(Dynamic Port Forwarding)

1. 本地端口转发(-L)

适用于:你想从本地访问远程内网的服务。

场景举例:你在家里(本地),想访问公司内网的一台MySQL数据库(192.168.1.100:3306),但该数据库不能直接从外网访问。不过你有一台可以SSH登录的公司跳板机(jump.example.com)。

命令如下:

ssh -L 本地端口:目标主机:目标端口 用户名@跳板机地址  

具体例子:

ssh -L 3307:192.168.1.100:3306 user@jump.example.com  

执行后,你在本地访问 localhost:3307,就相当于访问公司内网的 192.168.1.100:3306

2. 远程端口转发(-R)

适用于:内网穿透——你想把本地(比如家里的电脑)的服务暴露给外网访问。

场景举例:你在本地运行了一个Web服务(localhost:8080),但你的家庭宽带没有公网IP。你有一台具有公网IP的云服务器(cloud.example.com)。你可以通过远程端口转发,让外网用户访问云服务器的某个端口,从而访问你本地的服务。

命令如下:

ssh -R 远程端口:本地主机:本地端口 用户名@云服务器地址  

具体例子:

ssh -R 8080:localhost:8080 user@cloud.example.com  

现在,别人访问 http://cloud.example.com:8080,实际上看到的是你本地电脑上运行的Web服务!

Linux网络端口转发(手把手教你实现内网服务外网访问) Linux端口转发 SSH隧道 网络端口映射 内网穿透 第1张

3. 动态端口转发(-D)

这相当于创建一个SOCKS代理,适合需要转发多个不同端口的场景(如浏览器代理)。

ssh -D 1080 user@jump.example.com  

然后在浏览器中设置SOCKS代理为 127.0.0.1:1080,所有流量就会通过SSH隧道转发。

注意事项

  • 确保SSH服务已开启(通常默认开启)
  • 远程端口转发时,云服务器需在/etc/ssh/sshd_config中设置GatewayPorts yes,否则只能本机访问转发的端口
  • 长时间连接建议配合autossh工具防止断连
  • 注意安全!不要随意将内网服务暴露给公网,建议配合防火墙或认证机制

总结

通过本文,你已经掌握了Linux下基于SSH的网络端口映射技术。无论是访问内网资源,还是实现内网穿透,SSH隧道都是一个强大而安全的工具。记住三个关键参数:-L(本地)、-R(远程)、-D(动态),就能应对大多数端口转发需求。

赶快动手试试吧!遇到问题欢迎留言讨论。

关键词:Linux端口转发, SSH隧道, 网络端口映射, 内网穿透