# FRP 内网穿透原理

## 问题

家里 Win11 有 API 服务（4317 端口），但没有公网 IP，ngrok 走海外绕路太慢。

## 方案：FRP（Fast Reverse Proxy）

FRP 通过一台有公网 IP 的服务器做中转，把内网服务暴露出去。

## 架构

```
浏览器 → https://agent.wanyue.online
  ┊
  ┊ HTTPS (443)
  ┊
云 VPS nginx
  ├─ /          → 静态文件（前端页面）
  └─ /api/*     → 127.0.0.1:14317（frps 监听）
                    ┊
                    ┊ TCP 直连（7000 端口控制通道）
                    ┊
                家中 Win11 frpc
                    ┊
                    ┊ 127.0.0.1:4317
                    ┊
                你的 API 服务
```

## 角色分工

| 角色 | 位置 | 做什么 |
|------|------|--------|
| frps | 云 VPS | 监听 7000 等待 frpc 连接；收到连接后开放 14317 端口 |
| frpc | 家里 Win11 | 主动连接 frps:7000，告诉它"把 14317 的流量转到我本地的 4317" |
| nginx | 云 VPS | 收到 `/api/*` 请求后转发到本地 14317 |

## 工作流程

1. 家里的 frpc 主动向外连接云 VPS 的 frps:7000
2. frpc 告诉 frps："我这里有 4317 服务，帮我在你那边开个 14317 接收流量"
3. frps 在云 VPS 上监听 14317
4. 用户访问 `agent.wanyue.online/api/xxx`
5. nginx 把请求转发到 `127.0.0.1:14317`
6. frps 通过已建立的 TCP 隧道把请求发给 frpc
7. frpc 把请求转发给本地 `127.0.0.1:4317` 的 API 服务
8. 响应原路返回

## 为什么比 ngrok 快

- ngrok：流量经过海外 ngrok 服务器中转，延迟高
- FRP：云 VPS 和家里直连 TCP，不经过第三方，延迟低
- 云 VPS（阿里云杭州）和家里（陕西）之间走国内骨干网，通常延迟 < 50ms
