123 lines
3.2 KiB
Markdown
123 lines
3.2 KiB
Markdown
---
|
||
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 <your_home_ip> 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/
|