Skip to content

端口转发

端口转发功能基于 Go 原生实现,支持 TCP/UDP 协议的端口映射,可将本机端口的流量转发到指定的目标地址和端口。

技术原理

NAT 穿透基础

家庭和企业网络通常处于 NAT(网络地址转换)环境中,内网设备无法直接被外网访问。端口转发是解决这一问题的最直接方式——在具有公网 IP 的服务器上监听端口,将流量转发到内网目标。

外网用户


公网服务器(有公网IP)
监听端口 8888
    │  端口转发

内网设备 192.168.1.100:5000
(NAS / 摄像头 / 服务)

NAT 类型说明

不同的 NAT 类型对穿透方案的选择有重要影响:

NAT 类型说明穿透难度推荐方案
Full Cone NAT(全锥形)内网端口映射后,任何外网 IP 都可访问⭐ 最易STUN/UPnP 即可
Restricted NAT(受限锥形)只有曾经通信过的外网 IP 才能访问⭐⭐ 较易STUN 打洞
Port Restricted NAT(端口受限锥形)只有曾经通信过的外网 IP:端口 才能访问⭐⭐⭐ 中等STUN 打洞
Symmetric NAT(对称型)每次连接都分配不同的外网端口,无法预测⭐⭐⭐⭐ 最难必须使用 FRP/NPS 中转

如何判断 NAT 类型?

可以使用 stun-client 工具或在线 STUN 检测服务检测当前网络的 NAT 类型。大多数家庭宽带为 Full Cone 或 Restricted NAT,运营商 CGNAT 通常为 Symmetric NAT。

TCP 与 UDP 协议对比

特性TCPUDP
连接方式面向连接(三次握手)无连接
可靠性保证数据顺序和完整性不保证,可能丢包
速度较慢(有确认机制)较快(无确认开销)
适用场景SSH、HTTP、数据库、文件传输DNS、游戏、视频流、VoIP
转发实现基于 TCP 连接代理基于 UDP 连接追踪

功能概述

  • 支持 TCP、UDP 及 TCP+UDP 双协议转发
  • 可指定监听 IP(绑定特定网卡)
  • 支持转发到 IP 地址或域名
  • 每条规则独立启停,互不影响
  • 实时显示连接状态

使用场景

  • 将外网端口映射到内网服务(如 NAS、摄像头)
  • 在不同端口之间做流量中转
  • 将 UDP 游戏流量转发到内网主机
  • 数据库端口的安全转发(仅对特定 IP 开放)

配置说明

进入 端口转发 页面,点击右上角 新建 按钮,填写以下配置:

字段类型必填默认值说明
名称字符串规则名称,便于识别
启用布尔true是否立即启用此规则
监听 IP字符串0.0.0.0监听的本地 IP,留空表示监听所有网卡
监听端口整数本地监听端口,范围 1–65535
转发 IP/域名字符串目标地址,支持 IP 或域名
转发端口整数目标端口,范围 1–65535
协议枚举TCP转发协议:TCPUDPTCP+UDP

配置示例

示例 1:将本机 8888 端口转发到内网 NAS

将外网访问本机 8888 端口的流量,转发到内网 NAS(192.168.1.100:5000):

字段
名称NAS 访问
监听 IP0.0.0.0
监听端口8888
转发 IP/域名192.168.1.100
转发端口5000
协议TCP

示例 2:UDP 游戏流量转发

将本机 7777 UDP 端口转发到内网游戏服务器:

字段
名称游戏服务器
监听 IP0.0.0.0
监听端口7777
转发 IP/域名192.168.1.200
转发端口7777
协议UDP

示例 3:仅监听特定网卡

只在 eth0(IP 10.0.0.1)上监听,避免暴露到其他网络:

字段
名称内网专用转发
监听 IP10.0.0.1
监听端口3306
转发 IP/域名192.168.1.50
转发端口3306
协议TCP

操作说明

启用/禁用规则

在规则列表中,点击 启用 开关可随时启停单条规则,无需删除。

编辑规则

点击规则行右侧的 编辑 按钮,修改配置后保存即可。修改后规则会自动重启。

删除规则

点击 删除 按钮,确认后删除规则并停止转发。


常见问题

Q:端口转发启动失败,提示端口被占用?

原因: 监听端口已被其他程序占用。

解决方法:

bash
# Linux 查看端口占用
ss -tlnp | grep <端口>
# 或
lsof -i :<端口>

# Windows 查看端口占用
netstat -ano | findstr <端口>

找到占用进程后,停止该进程或更换监听端口。

Q:外网无法访问转发的端口?

排查步骤:

  1. 确认 NetPanel 所在服务器有公网 IP(不是内网 IP)
  2. 检查服务器防火墙是否放行了监听端口:
    bash
    # Ubuntu/Debian (ufw)
    ufw allow <端口>/tcp
    
    # CentOS/RHEL (firewalld)
    firewall-cmd --permanent --add-port=<端口号>/tcp
    firewall-cmd --reload
  3. 检查云服务器的安全组规则是否放行了该端口
  4. 使用 telnet <公网IP> <端口> 或在线端口检测工具验证

Q:连接超时或不稳定?

可能原因及解决方法:

  • 目标服务不可达:确认内网目标 IP 和端口是否正确,目标服务是否正常运行
  • 网络延迟高:选择地理位置更近的中转服务器
  • UDP 超时:UDP 转发默认超时 30 秒,对于长连接 UDP 应用,需要客户端定期发送心跳包

Q:如何选择端口映射方案?

场景推荐方案
有公网 IP 的服务器端口转发(本功能)
无公网 IP,路由器支持 UPnPSTUN 穿透
无公网 IP,需要稳定穿透FRP 客户端
需要多设备组网互访EasyTier

注意事项

端口占用

监听端口不能与系统已占用的端口冲突。如果启动失败,请检查端口是否已被其他程序占用。

防火墙设置

如果服务器开启了防火墙(如 iptables、ufw、Windows 防火墙),需要放行对应的监听端口,外网才能访问。

UDP 转发说明

UDP 转发基于连接追踪实现,超时时间默认为 30 秒。如果 UDP 应用有长时间无数据的情况,可能需要客户端定期发送心跳包。

安全风险

端口转发会将内网服务直接暴露到公网,请确保目标服务本身有足够的安全防护(如强密码、访问控制)。不建议直接转发数据库端口到公网。

基于 GPL-3.0 许可证发布