--- title: "内网穿透" type: concept aliases: [NAT穿透, 内网访问, 穿透技术] tags: [network, tunneling, infrastructure] --- # 内网穿透 ## Definition **内网穿透**(NAT Traversal / Reverse Proxy Tunneling)是一种使位于私有网络(内网)中的设备能够被公网访问的技术。家用网络设备通常位于 NAT(网络地址转换)后面,无法直接接收公网连接,内网穿透通过在公网服务器建立反向隧道来解决这一问题。 ## Core Principle 传统正向代理:客户端 → 公网代理服务器 → 目标服务器 内网穿透(反向隧道):公网服务器 → 反向隧道 → 内网客户端 ``` Internet │ │ ← 发起连接(公网) ▼ ┌───────────────┐ │ VPS (公网) │ │ frps/Caddy │ └───────┬───────┘ │ ← 反向隧道建立 ▼ ┌───────────────┐ │ 内网机器 (frpc) │ │ 192.168.x.x │ └───────────────┘ ``` ## Common Tools | 工具 | 协议 | 特点 | 适用场景 | |------|------|------|---------| | **frp** | TCP/UDP/HTTP | 高性能、支持 Dashboard | 多服务穿透 | | **ngrok** | TCP/HTTP | 简单易用、托管服务 | 临时测试 | | **natapp** | TCP/HTTP | 国内服务 | 国内访问 | | **花生壳** | TCP/HTTP | 老牌、商业化 | 企业用户 | | **ZeroTier** | VPN | 虚拟局域网 | 远程办公 | ## frp 实现方案 ### 架构组件 1. **frps (Server)**:部署在公网 VPS,监听端口(默认 7000) 2. **frpc (Client)**:部署在内网机器,主动连接 frps ### 典型配置流程 1. VPS 安装 frps,配置 systemd 服务 2. 内网机器安装 frpc,配置连接参数 3. frpc 配置端口映射(local_port → remote_port) 4. Caddy/Nginx 在 VPS 做反向代理 ### 映射示例 ```ini # frpc.ini [nas] type = tcp local_ip = 127.0.0.1 local_port = 5000 remote_port = 15000 ``` ### 完整访问链路 ``` 用户浏览器 → https://nas.domain.com ↓ 阿里云 DNS → VPS 公网 IP ↓ Caddy (443) → reverse_proxy 127.0.0.1:15000 ↓ frps 在 VPS :15000 监听 ↓ frp 隧道 ↓ frpc 在内网 :5000 监听 ↓ NAS Web UI ``` ## Security Considerations ### 认证保护 - frps 配置 `token` 与 frpc 匹配 - Caddy 可添加 HTTP Basic Auth - 使用非标准端口避免扫描 ### 访问控制 ```bash # UFW 防火墙限制来源 IP sudo ufw allow from to any port 60022 proto tcp ``` ### SSH 安全 ```bash # 使用公钥认证,禁用密码 # 编辑 /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes ``` ## Trade-offs | 优势 | 劣势 | |------|------| | 无需公网 IP | 依赖 VPS 稳定性 | | 支持任意 TCP/UDP 服务 | 增加延迟 | | 可绑定独立域名 | 需要维护 frps/frpc | | 成本低(月付几美元 VPS) | 安全配置复杂 | ## Related Concepts - [[frp]] — 实现内网穿透的工具 - [[反向代理]] — 内网穿透的上层组件 - [[TCP 隧道]] — 内网穿透的底层机制 - [[VPS]] — 内网穿透的公网中转站 - [[Let's Encrypt]] — 自动 HTTPS 证书 ## References - frp 官方文档: https://gofrp.org/docs/