内网穿透实战:四种主流方案详解 (公网 IP+DDNS, FRP, Cloudflare Tunnel, Surge Ponte)

理解 NAT 与内网穿透的必要性

什么是 NAT

NAT 的全称是 Network Address Translation,即网络地址转换。在 IPv4 地址资源日益紧张的情况下,NAT 技术成为了延长 IPv4 使用寿命的关键。它允许一个局域网内的所有设备共享同一个公网 IP 地址,当内网设备访问外网时,NAT 会将内网 IP 地址和端口映射成一个公网 IP 地址和端口,并维护一个映射表。当外网数据返回时,NAT 再根据映射表将数据转发给相应的内网设备。

为什么需要内网穿透

由于 NAT 的工作机制是单向的,它只允许内网设备主动访问外网,而外网设备无法直接访问内网。这就意味着,如果你想从外网访问家中的 NAS、Web 服务器或其他设备,就需要通过内网穿透技术来实现。

方案一:公网 IP + 端口转发 + [DDNS]

前置条件

  • 路由器需要配备独立的公网 IP(也可以是 IPv6)。
  • 路由器支持端口转发功能。
  • 域名(可选,用于更方便地访问)。

什么是 DDNS

许多家庭宽带用户使用的是动态公网 IP,即每次路由器重启或重新拨号后,公网 IP 地址都会发生变化。DDNS(动态域名解析)服务可以将你的动态 IP 地址绑定到一个固定的域名上,无论你的 IP 地址如何变化,都可以通过这个域名访问到你的设备。

配置步骤

  1. 设置端口转发: 登录路由器管理界面,找到“端口转发”或“虚拟服务器”等类似设置,将你需要暴露到外网的内网设备 IP 和端口映射到公网 IP 的一个指定端口。例如,将内网设备(IP 地址为 192.168.1.100)的 SSH 服务端口(默认为 22)映射到公网 IP 的 2222 端口。
  2. 配置 DDNS: 推荐使用 ddns-go 等工具,在内网设备上安装并配置 ddns-go,将其连接到你的域名解析服务商(如Cloudflare),实现动态 IP 地址到域名的自动更新。

方案二:FRP + VPS

前置条件

拥有一台具备公网 IP 的 VPS(虚拟专用服务器)。

配置步骤

  1. 在 VPS 上部署 FRP 服务端 (frps)

frps.toml

TOML
# 服务端监听的端口,客户端将通过此端口与服务端建立连接
bindPort = 8080

# web 管理界面的监听地址及端口
webServer.addr = "0.0.0.0"
webServer.port = 8081
# web 管理界面的用户名及密码
webServer.user = "user"
webServer.password = "password"

# 认证所需的 token,frpc 客户端连接 frps 时,需要提供这个 token,以验证身份
auth.method = "token"
auth.token = "xxxxxx"
  1. 在内网设备上部署 FRP 客户端 (frpc)

frpc.toml

TOML
# VPS 的公网 IP
serverAddr = x.x.x.x
# 服务端监听的端口,客户端将通过此端口与服务端建立连接
serverPort = 8080
# 认证所需的 token,frpc 客户端连接 frps 时,需要提供这个 token,以验证身份
auth.token = "xxxxxx"
log.level = "info"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
# 内网设备端口,ssh默认端口为22
localPort = 22
# vps 转发端口
remotePort = 8082
transport.useEncryption = true
transport.useCompression = true

方案三:Cloudflare Tunnel

前置条件

拥有一个域名,并且将域名托管在 Cloudflare。

配置步骤

  1. 在 cloudflare 上创建 tunnel,并添加 public hostname。
  2. 在内网设备上部署并启动 cloudflared。

方案四:Surge Ponte(适合 Surge 用户)

前置条件

  • 内网设备需要运行 Surge for Mac (作为服务端)。
  • 外网设备需要运行 Surge for Mac/IOS (作为客户端)。

配置步骤

在 Surge Profile 的 [Rule] 段添加配置:IP-CIDR,xx.xx.xx.1/24,DEVICE:DEVICE_NAME

优缺点

优点:

  • 配置简单: 对于 Surge 用户来说,无需额外配置,Surge 既是网络工具又是内网穿透工具,实现了一体化解决方案。
  • 安全性相对较高: 仅暴露 Surge Ponte 端口,其他内网请求通过 Ponte 转发,类似于 FRP 的代理模式,降低了安全风险。

缺点:

  • 局限性: Surge Ponte 目前只能接管 HTTP 和 HTTPS 服务。
  • 依赖 Surge 生态: 需要内网和外网设备都安装 Surge,且至少内网设备需要 Surge for Mac。

注意事项

  1. Mac/Windows 中的 Docker 本质上并不支持 host 的网络模式,Docker 实际上是运行在一个轻量级虚拟机中的,即使使用 host 的网络模式,容器也无法直接使用宿主机的网络接口。
  2. 内网穿透会将内网服务暴露到公网上,存在安全风险。请务必采取必要的安全措施。

相关资料

FRP 官方文档

Cloudflare Tunnel 官方文档

参考资料

Cloudflare Tunnel 教程1

Cloudflare Tunnel 教程2

公网 IP + DDNS + 端口转发教程

FRP + VPS 教程

Surge Snell

Surge Ponte

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注