端口转发(Port Forwarding):GitHub 版独有功能
端口转发是什么
端口转发是 NetGuard GitHub / F-Droid 版独有的进阶功能。它让 Android 设备能在 VPN 隧道内接收入站流量并将其重定向到指定的目标地址和端口。
这解决了 Android 的一个固有限制——Android VPN 服务默认只管理出站流量,不处理入站流量。
典型使用场景
场景一:远程访问 Android 上的服务
你在 Android 上运行了一个 HTTP 服务器、SSH 服务器或其他网络服务,想从外部设备访问它。由于 Android 默认不处理 VPN 内的入站流量,外部设备无法连接。配置端口转发后:
- 将外部访问的
端口 A转发到 Android 内部服务的端口 B - 外部设备通过 Android 的 IP:端口 A 就能访问到内部服务
场景二:转发到外部服务器
也可以把 Android 的某个端口入站流量转发到外部服务器——相当于 Android 成为一个中转代理。比如把收到的请求转发到另一个公网 IP。
设置步骤
前置条件
- 使用 GitHub Release 或 F-Droid 版 NetGuard(Play 版无此功能)
- 子网路由已开启(见上一页)
操作路径
主菜单 → 设置 → 网络选项 → 找到「端口转发」区域 → 点击「添加」按钮(齿轮或加号图标)
添加规则
点击「添加端口」后弹出配置面板:
| 字段 | 说明 |
|---|---|
| 监听端口(Listen port) | NetGuard 监听的端口号,外部连接通过这个端口进入 |
| 目标地址(Destination address) | 转发到哪个 IP 地址。可以是 localhost(127.0.0.1,Android 内部)、局域网 IP 或公网 IP |
| 目标端口(Destination port) | 转发到目标地址的哪个端口 |
| 网络类型(Network type) | Wi-Fi / 移动数据 / 两者 |
填写完保存后,端口转发规则立即生效。

与子网路由的依赖关系
端口转发必须同时开启子网路由(Subnet routing)。原因是端口转发本质上是将入站流量从 VPN 隧道的一个子网重定向到另一个子网——没有子网路由,NetGuard 无法完成跨子网的流量重定向。
如果开启端口转发但没开子网路由,NetGuard 会在设置界面提示需要先开启子网路由。
与 Tethering 的组合
当你把 Android 设为 Wi-Fi 热点,同时开启端口转发:
- 外部设备连接到你的热点
- 外部设备对 Android IP 的指定端口发起连接
- NetGuard 接收入站流量 → 通过端口转发规则重定向到目标地址
这个组合让 Android 成为一个轻量级的网关 + 端口转发服务器。
安全注意
- 端口转发意味着开放了一个对外可达的端口,只有在确实需要时才开启
- 如果设置了转发到外部服务器,确保目标服务器是可信的
- Android 设备通常没有公网 IP——如果想让互联网上的设备通过端口转发访问 Android 上的服务,还需要在路由器上做 NAT 转发或使用动态 DNS + 端口映射
- 端口转发功能消耗一定资源,不用时关闭
GitHub 版 vs Play 版的端口转发
| 渠道 | 端口转发 | 原因 |
|---|---|---|
| GitHub Release | ✅ 支持 | 开发者自主分发,不受 Google 政策限制 |
| F-Droid | ✅ 支持 | 开源仓库,无 Google 政策限制 |
| Google Play | ❌ 不支持 | Google 政策限制 |
与 VPN 防火墙的入站限制
Android VPN 服务(VpnService)的设计就是只处理出站流量(应用 → 互联网)。NetGuard 通过端口转发功能在 VPN 隧道内模拟了入站处理能力,但这只是在 VPN 层面的变通,不是真正的 NAT 转发。
如果你需要更完整的网络转发能力(如家庭路由器级别的 NAT、DHCP、DNS),Android 本身不是最合适的平台——真正的网络网关设备(如 OpenWrt 路由器、树莓派 + OpenWrt)更擅长。
常见问题
端口转发不生效
- 检查子网路由是否开启
- 检查监听端口是否被 Android 上的其他应用占用
- 检查外部设备是否能通过 Android 的 IP 地址访问
- 检查 Wi-Fi / 移动数据的网络类型设置是否正确覆盖了你的连接方式
端口转发 + 锁屏模式冲突
在锁屏模式下,如果 Android VPN 隧道被重新初始化,端口转发规则会保留但入站流量可能暂时无法到达端口。解锁后自动恢复。