理解 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 地址如何变化,都可以通过这个域名访问到你的设备。
配置步骤
- 设置端口转发: 登录路由器管理界面,找到“端口转发”或“虚拟服务器”等类似设置,将你需要暴露到外网的内网设备 IP 和端口映射到公网 IP 的一个指定端口。例如,将内网设备(IP 地址为 192.168.1.100)的 SSH 服务端口(默认为 22)映射到公网 IP 的 2222 端口。
- 配置 DDNS: 推荐使用 ddns-go 等工具,在内网设备上安装并配置 ddns-go,将其连接到你的域名解析服务商(如Cloudflare),实现动态 IP 地址到域名的自动更新。
方案二:FRP + VPS
前置条件
拥有一台具备公网 IP 的 VPS(虚拟专用服务器)。
配置步骤
- 在 VPS 上部署 FRP 服务端 (frps)
frps.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"
- 在内网设备上部署 FRP 客户端 (frpc)
frpc.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。
配置步骤
- 在 cloudflare 上创建 tunnel,并添加 public hostname。
- 在内网设备上部署并启动 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。
注意事项
- Mac/Windows 中的 Docker 本质上并不支持 host 的网络模式,Docker 实际上是运行在一个轻量级虚拟机中的,即使使用 host 的网络模式,容器也无法直接使用宿主机的网络接口。
- 内网穿透会将内网服务暴露到公网上,存在安全风险。请务必采取必要的安全措施。