详细更新

This commit is contained in:
2026-06-04 15:22:18 +08:00
parent 4141e18896
commit c4f76d9c2a
2 changed files with 298 additions and 58 deletions

View File

@@ -7,12 +7,9 @@ created: 2026-04-03
description:
tags: [frp, macos, ubuntu]
---
#frp #macos #ubuntu #nas #frpc #fprs #caddy
# FRP 配置详细笔记
#frp #macos #ubuntu
## 概述
本文档记录 macmini、ubuntu1、ubuntu2、NAS 四个服务器上的 FRPFast Reverse Proxy客户端配置信息。

View File

@@ -136,49 +136,93 @@ ssh-add ~/.ssh/id_ed25519
## 1. 整体架构
### 正确的访问方式
### 实际部署拓扑
```
┌─────────────────────────────────────────────────────────┐
│ 远程访问架构 │
├─────────────────────────────────────────────────────────┤
│ │
HTTP 访问(通过 Caddy 反代)
浏览器 → Caddy :443 → frps :13000 → Gitea :3000
SSH 访问(直接转发,绕过 Caddy
Git Client → frps :12222 → Gitea :2222
└─────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────
Gitea 远程访问架构 │
├──────────────────────────────────────────────────────────────────
┌─────────┐
│ Browser │──HTTPS──┐
└─────────┘
┌──────────┐ ┌──────────┐
Caddy │───▶│ frps VPS1
│ │ :80/:443 │ │ :7000 │ 192.227.222.142 │
│ └──────────┘ │ :13001 │ │
│ │ :12222 │ │
│ └────┬─────┘ │
│ │ frp 隧道 │
│ ┌─────────────┐ │ │
│ │ Git Client │──TCP :12222─────────┤ │
│ └─────────────┘ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ frpc │ NAS │
│ │ Gitea │ 192.168.x.x │
│ │ :3000 │ (Web) │
│ │ :2222 │ (SSH) │
│ └──────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘
```
### 端口分配
| 端点 | 端口 | 说明 |
|------|------|------|
| VPS1 :7000 | frps 控制 | frpc 与 frps 通信 |
| VPS1 :13001 | Gitea HTTP | Caddy 反代目标(不直接对外) |
| VPS1 :12222 | Gitea SSH | Git 客户端直连 |
| VPS1 :443 | Caddy HTTPS | gitea.ishenwei.online 入口 |
| NAS :3000 | Gitea Web | Docker 容器映射端口 |
| NAS :2222 | Gitea SSH | Docker `2222:22` 映射 |
### 核心原则
1. **HTTP 走 Caddy**Web 浏览器通过 Caddy 反代访问 Gitea Web UI
1. **HTTP 走 Caddy**:浏览器通过 Caddy 反代访问 Gitea Web UI(自动 HTTPS
2. **SSH 直接转发**SSH 流量不经过 CaddyCaddy 是 HTTP 代理,无法处理 SSH TCP 流量)
3. **防火墙放行**frps 服务器必须在防火墙中放行相应端口
3. **防火墙放行**VPS1 必须放行 7000、13001、12222 三个端口
4. **13001 不要直接对外**:仅供 Caddy 本机反代用,可用 iptables 限制为 localhost 访问
---
## 2. frpc 配置(本地端,如 NAS
## 2. frpc 配置NAS
### frpc.toml 配置文件
### 部署位置
- **路径**`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
- **运行方式**systemd详见第五部分管理命令
### frpc.toml 配置Gitea 相关部分)
```toml
serverAddr = "your-vps.com"
# ===== 服务器连接 =====
serverAddr = "192.227.222.142" # VPS1
serverPort = 7000
auth.method = "token"
auth.token = "your-token"
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
# HTTP 转发 - 给 Caddy 用
# ===== 日志 =====
log.level = "info"
log.maxDays = 3
# ===== 管理界面(可选)=====
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
# ===== Gitea Web给 Caddy 反代用)=====
[[proxies]]
name = "gitea-http"
name = "gitea-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 13001
# SSH 转发 - 直接暴露
# ===== Gitea SSH直接暴露给 Git 客户端)=====
[[proxies]]
name = "gitea-ssh"
type = "tcp"
@@ -188,58 +232,220 @@ remotePort = 12222
```
**配置说明:**
- `remotePort = 13001`Caddy 通过此端口访问 Gitea Web UI
- `remotePort = 12222`Git 客户端通过此端口连接 SSH
- `remotePort = 13001`Caddy 在 VPS1 上反代此端口
- `remotePort = 12222`Git 客户端通过 `gitea.ishenwei.online:12222` 连接
---
## 3. frps 配置(服务器端,如 VPS
## 3. frps 配置VPS1 端
### frps.toml 配置文件
### 基本信息
| 配置项 | 值 |
|--------|-----|
| 服务器 IP | 192.227.222.142 |
| 部署路径 | `/opt/frp/frp_0.65.0_linux_amd64/` |
| 配置文件 | `frps.toml` |
| 运行方式 | systemd |
| 管理界面 | http://127.0.0.1:7500 (admin/admin) |
### frps.toml 配置
```toml
# ===== 监听配置 =====
bindAddr = "0.0.0.0"
bindPort = 7000
# ===== 认证(必须与所有 frpc 一致)=====
auth.method = "token"
auth.token = "your-token"
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
# ===== 日志 =====
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 7
# ===== 管理 Dashboard =====
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
# ===== 安全限制(可选但推荐)=====
# 限制 frpc 可以使用的端口范围
allowPorts = [
{ start = 10000, end = 65535 }
]
# 单个客户端最大代理数
maxPoolCount = 50
# 心跳超时(秒)
transport.heartbeatTimeout = 90
```
### 防火墙配置
### frps systemd 服务
**在 VPS 上放行端口:**
创建 `/etc/systemd/system/frps.service`
```ini
[Unit]
Description=frp server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/frp/frp_0.65.0_linux_amd64/frps -c /opt/frp/frp_0.65.0_linux_amd64/frps.toml
Restart=on-failure
RestartSec=10
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
```
启用并启动:
```bash
# UFWUbuntu/Debian
ufw allow 7000/tcp # frp 通信
ufw allow 13001/tcp # Gitea Web给 Caddy
ufw allow 12222/tcp # Gitea SSH
systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps
# iptables
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 13001 -j ACCEPT
iptables -A INPUT -p tcp --dport 12222 -j ACCEPT
# 查看日志
journalctl -u frps -f
tail -f /var/log/frps.log
```
**AWS/阿里云/腾讯云等云服务:**
- 需要同时配置安全组(云控制台)和系统防火墙
- 缺一不可
### VPS1 防火墙配置
```bash
# UFW推荐
ufw allow 7000/tcp # frp 控制通道
ufw allow 12222/tcp # Gitea SSH对外
ufw allow 80/tcp # Caddy HTTP自动跳转 HTTPS
ufw allow 443/tcp # Caddy HTTPS
# 13001 仅本机访问,无需对外放行
# 如果需要明确禁止,可以:
ufw deny 13001/tcp
# 验证规则
ufw status numbered
```
**重要:** 如果 VPS 提供商有云控制台安全组(如 AWS Security Group、阿里云安全组**必须同时放行**,缺一不可。
---
## 4. Caddy 反代配置
## 4. Caddy 反代配置VPS1 端)
Caddy 部署在与 frps 相同的 VPS1 上,自动申请并续期 Let's Encrypt 证书。
### 安装 CaddyDebian/Ubuntu
```bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
```
Caddy 安装后自动注册为 systemd 服务,配置文件位于 `/etc/caddy/Caddyfile`
### Caddyfile 配置
编辑 `/etc/caddy/Caddyfile`
```caddy
gitea.yourdomain.com {
reverse_proxy 127.0.0.1:13001
# ============================================
# Gitea Web UI
# ============================================
gitea.ishenwei.online {
# 反代到本机 frps 监听的 Gitea HTTP 端口
reverse_proxy 127.0.0.1:13001 {
# 传递真实客户端 IP 给 Gitea
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
# 日志(可选)
log {
output file /var/log/caddy/gitea.log {
roll_size 50mb
roll_keep 5
}
format json
}
# 大文件支持Git push/LFS 必需)
request_body {
max_size 5GB
}
}
# ============================================
# 其他服务示例(同样模式)
# ============================================
# n8n.ishenwei.online {
# reverse_proxy 127.0.0.1:15679
# }
#
# vaultwarden.ishenwei.online {
# reverse_proxy 127.0.0.1:15151
# }
```
**关键点:**
- 反代目标是 `127.0.0.1:13001`frps 转发来的 HTTP 流量)
- **不要将 SSH 端口12222配进 Caddy**
- Caddy 只负责 HTTP/HTTPS,不处理 SSH
### 关键要点
- **反代目标是 `127.0.0.1:13001`**frps 把 NAS 上 Gitea 的 :3000 转发到 VPS1 的 :13001
- **不要将 SSH 端口12222配进 Caddy**Caddy HTTP/HTTPS 反向代理,无法承载 SSH TCP 协议
- **自动 HTTPS**Caddy 会自动通过 Let's Encrypt 申请证书并自动续期(前提是域名 A 记录已正确指向 VPS1且 80/443 端口已放行)
- **大文件支持**`request_body max_size` 必须设置足够大,否则 `git push` 大仓库会失败
### DNS 配置
在你的 DNS 服务商Cloudflare/阿里云等)添加 A 记录:
```
gitea.ishenwei.online A 192.227.222.142
```
如果使用 Cloudflare**必须关闭代理(小灰云)** 用 DNS only 模式,否则 Caddy 申请证书会失败,且 SSH 不工作。
### Caddy 管理命令
```bash
# 验证 Caddyfile 语法
caddy validate --config /etc/caddy/Caddyfile
# 优雅重载(修改配置后用这个,不会断连)
sudo systemctl reload caddy
# 查看状态
sudo systemctl status caddy
# 查看日志
sudo journalctl -u caddy -f
tail -f /var/log/caddy/gitea.log
```
### 验证 HTTPS
```bash
# 测试证书
curl -I https://gitea.ishenwei.online
# 预期返回:
# HTTP/2 200
# server: Caddy
# ...
```
---
@@ -719,14 +925,51 @@ services:
部署完成后,按以下顺序验证:
- [ ] Docker 容器运行 `docker ps | grep gitea`
- [ ] SSH 服务启用 `docker exec gitea cat /data/gitea/conf/app.ini | grep SSH`
- [ ] 本地 SSH 连接 `ssh -T git@192.168.3.17 -p 2222`
- [ ] frp 连接正常 `journalctl -u frpc -f`
- [ ] SSH 端口放行(防火墙)`netstat -tlnp | grep 12222`
- [ ] Web UI 访问 浏览器打开 `https://gitea.yourdomain.com`
- [ ] 公钥已添加 Gitea Web UI 验证
- [ ] Git Clone 测试 `git clone ssh://git@gitea.yourdomain.com:12222/username/repo.git`
**NAS 端Gitea + frpc**
- [ ] Docker 容器运行:`docker ps | grep gitea`
- [ ] SSH 服务启用:`docker exec gitea cat /data/gitea/conf/app.ini | grep SSH`
- [ ] 本地 SSH 测试:`ssh -T git@<NAS-IP> -p 2222`
- [ ] frpc 服务运行:`systemctl status frpc`
- [ ] frpc 日志正常:`journalctl -u frpc -f` 显示 `[gitea-web] start proxy success``[gitea-ssh] start proxy success`
**VPS1 端frps + Caddy**
- [ ] frps 服务运行:`systemctl status frps`
- [ ] frps Dashboard 可访问:`http://192.227.222.142:7500` (admin/admin)
- [ ] 端口监听:`ss -tlnp | grep -E '7000|12222|13001'`
- [ ] 防火墙放行:`ufw status` 包含 7000/12222/80/443
- [ ] Caddy 运行:`systemctl status caddy`
- [ ] DNS 解析正确:`dig gitea.ishenwei.online +short``192.227.222.142`
**客户端:**
- [ ] 公钥已添加Gitea Web UI → Settings → SSH Keys
- [ ] HTTPS 访问:浏览器打开 `https://gitea.ishenwei.online`(绿锁)
- [ ] SSH 连接:`ssh -T git@gitea.ishenwei.online -p 12222` 返回 `Hi <user>!`
- [ ] Git Clone`git clone ssh://git@gitea.ishenwei.online:12222/<user>/<repo>.git`
---
## 完整端到端部署流程速查
```
┌─────────────────────────────────────────────────────────────┐
│ 1. NAS: 启动 Gitea Docker (端口 3000, 2222:22) │
│ 2. NAS: 配置 app.ini (SSH_DOMAIN, SSH_PORT=12222) │
│ 3. NAS: 部署 frpc.toml (gitea-web:13001, gitea-ssh:12222) │
│ 4. NAS: systemctl restart frpc │
│ ↓ │
│ 5. VPS1: 部署 frps.toml + frps.service │
│ 6. VPS1: ufw allow 7000/12222/80/443 │
│ 7. VPS1: systemctl enable --now frps │
│ 8. VPS1: 编辑 /etc/caddy/Caddyfile (gitea.ishenwei.online) │
│ 9. VPS1: systemctl reload caddy │
│ ↓ │
│ 10. DNS: 添加 A 记录 gitea → 192.227.222.142 │
│ ↓ │
│ 11. 客户端: 生成 SSH key + 上传公钥到 Gitea │
│ 12. 客户端: 配置 ~/.ssh/config │
│ 13. 客户端: git clone ssh://git@gitea.ishenwei.online:12222 │
└─────────────────────────────────────────────────────────────┘
```
---