什么是内网穿透?
内网穿透(NAT Traversal)是将内网设备(如家里的电脑、NAS、树莓派)暴露到公网的技术。即使没有公网 IP,也能从外部访问内网服务。
常用工具对比
| 工具 | 特点 | 价格 |
|---|---|---|
| frp | 开源、功能全面、需自备服务器 | 免费 |
| Cloudflare Tunnel | 无需服务器、CDN 加速 | 免费 |
| ngrok | 一键启动、临时使用方便 | 免费/付费 |
| Tailscale | 组网方案、点对点 | 免费/付费 |
| ZeroTier | 虚拟局域网 | 免费/付费 |
方案一:frp(推荐自建)
服务端配置(公网服务器)
# 下载 frp
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64
# frps.toml
bindPort = 7000
vhostHTTPPort = 8080
auth.token = "your_secret_token"
./frps -c frps.toml
客户端配置(内网设备)
# frpc.toml
serverAddr = "YOUR_SERVER_IP"
serverPort = 7000
auth.token = "your_secret_token"
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["home.example.com"]
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
./frpc -c frpc.toml
方案二:Cloudflare Tunnel(免费推荐)
# 安装 cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared
# 登录 Cloudflare
cloudflared tunnel login
# 创建隧道
cloudflared tunnel create my-tunnel
# 配置路由
cloudflared tunnel route dns my-tunnel home.example.com
# 运行
cloudflared tunnel --url http://localhost:8080 run my-tunnel
方案三:ngrok(临时使用)
# 安装
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
sudo apt update && sudo apt install ngrok
# 认证
ngrok config add-authtoken YOUR_TOKEN
# 启动
ngrok http 8080
安全提醒
- 内网穿透等于将内网服务暴露在公网,务必做好安全防护
- 使用强密码和 Token 认证
- 限制访问来源 IP
- 对 Web 服务开启 HTTPS
- 不要暴露管理面板等敏感服务