#vps #caddy #frp #reverse-proxy #troubleshooting #cloudflare #ubuntu 

```table-of-contents
```


思路：Cloudflare DNS 指向 公网上的一台VPS，VPS 上运行 Caddy；内网主机通过 frp 将服务暴露到 VPS（本地 127.0.0.1 或某个端口），VPS 反向代理到该端口。

- 在 VPS 上运行 `frps`（frp server）。
- 在每个内网设备运行 `frpc` (frp client)，将本地服务映射到 VPS 上的独立端口或域名映射（frp 支持 http/https 映射，和 subdomain 映射需要 frp 企业/配置域名解析到 VPS）。
- VPS 上的 Caddy 反向代理到 frps 映射端口（127.0.0.1:xxxxx）。

frp 优点：专为内网穿透设计，支持 NAT、自动重连、Web 管理面板（可选）。推荐当你有多台设备和多端口时使用。
![[IMG-20260313104655355.png]]
![[IMG-20260313104655497.png]]


# 前置共识（已知条件）

- 域名：`ishenwei.online`（在阿里云 DNS/Cloudflare 控制台管理）
- 内网服务：
	- NAS server：`192.168.3.17:5000`（对应 `nas.ishenwei.online`）
	- NAS mysql server：`192.168.3.17:3306`（对应 `mysql.ishenwei.online`）
    - Ubuntu1 n8n：`192.168.3.47:5678`（希望对应 `n8n.ishenwei.online`）
    - Ubuntu1 transmission:  `192.168.3.47:9091`（希望对应 `transmission.ishenwei.online`）
    - Ubuntu1 Grafana:  `192.168.3.47:3000`（希望对应 `grafana.ishenwei.online`）
    
- 你有一台公网 VPS（Ubuntu，可用于反代或做中继）IP: `192.227.222.142`（固定）
    

## 🧭 目标

- 公网 VPS（Ubuntu，公网 IP = `192.227.222.142`）
- 内网 NAS (`192.168.3.17:5000`)
- 内网 Ubuntu (`192.168.3.47:5678`)
- 通过 `frp` 建立安全的反向隧道
- 通过 `Caddy` 在 VPS 上为每个子域名提供 HTTPS 域名访问：

| 域名                                                         | 映射目标                         |
| ---------------------------------------------------------- | ---------------------------- |
| [https://nas.ishenwei.online](https://nas.ishenwei.online) | → NAS `192.168.3.17:5000`    |
| [https://n8n.ishenwei.online](https://n8n.ishenwei.online) | → Ubuntu `192.168.3.47:5678` |
|                                                            |                              |
|                                                            |                              |
|                                                            |                              |
公网VPS（frps服务端）
     ↓（公网端口转发）
  192.227.222.142
     ↓
通过 frp 反向代理访问内网主机
     ↓
内网 Ubuntu (192.168.3.47) 启动 frpc
     ├─ n8n 服务 (5678)
     ├─ Transmission (9091)
     └─ Grafana (3000)
     
## 🧱 拓扑图

Internet
   │
   ▼
 ┌──────────────────────────┐
 │ VPS (192.227.222.142)       │
 │  - frps (监听 7000)       │
 │  - Caddy (80/443 TLS)     │
 │     ├─ nas.ishenwei.online → 127.0.0.1:15000 (映射NAS:5000)
 │     └─ n8n.ishenwei.online → 127.0.0.1:15678 (映射Ubuntu:5678)
 └──────────────────────────┘
        ▲             ▲
        │ frp tunnel  │ frp tunnel
 ┌────────────┐   ┌────────────┐
 │ NAS (192.168.3.17)   │ │ Ubuntu (192.168.3.47) │
 │ frpc.ini                  │  │ frpc.ini          │
 │ 映射5000→15000          │ │ 映射5678→15678         │
 └────────────┘   └────────────┘

## 第 1 步：Cloudflare DNS 配置

| 主机记录 | 记录类型 | 记录值             | TTL |
| ---- | ---- | --------------- | --- |
| nas  | A    | 192.227.222.142 | 600 |
| n8n  | A    | 192.227.222.142 | 600 |
Cloudflare Dashboard -> DNS
![[IMG-20260313104655641.png]]

保存即可。  
验证命令（任意机器执行）：
```
dig nas.ishenwei.online +short # 应返回 192.227.222.142
```


## 🧩 第 2 步：在 VPS 安装 Caddy + frps

### 1️⃣ 安装 Caddy

``` 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 
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg 
chmod o+r /etc/apt/sources.list.d/caddy-stable.list 
sudo apt update 
sudo apt install caddy
```
cd 
Caddy 安装后会自动作为系统服务运行。

---

### 2️⃣ 安装 frp（frp 服务端）

``` bash
# 在 VPS 与内网主机都执行（分别下载到 /opt/frp）
cd /opt 
sudo mkdir frp && cd frp 

FRP_VER=0.65.0   # 若有更新，可替换版本号 
curl -LO https://github.com/fatedier/frp/releases/download/v${FRP_VER}/frp_${FRP_VER}_linux_amd64.tar.gz
tar xzf frp_${FRP_VER}_linux_amd64.tar.gz
sudo mv frp_${FRP_VER}_linux_amd64 /opt/frp

```

创建配置文件 `/opt/frp/frps.ini`：
``` bash
[common]
bind_addr = 0.0.0.0
bind_port = 7000


---
title: 前置共识（已知条件）
author: shenwei
tags: [caddy, cloudflare, frp, reverse-proxy, troubleshooting, ubuntu, vps]
---
---
title: 前置共识（已知条件）
source:
author: shenwei
published:
created:
description:
tags: [caddy, cloudflare, frp, reverse-proxy, troubleshooting, ubuntu, vps]
---

# Dashboard
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = StrongPassword123!

# 认证 Token
token = Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs



```

创建 systemd 单元 `/etc/systemd/system/frps.service`：
``` bash
[Unit]
Description=frp server (frps)
After=network.target

[Service]
Type=simple
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=on-failure

[Install]
WantedBy=multi-user.target


```

启动：
```

sudo systemctl daemon-reload
sudo systemctl enable --now frps

```

验证：

``` 
sudo systemctl status frps
ss -ltnp | grep 7000

```

### 3️⃣ VPS 防火墙设置（允许必要端口）
``` bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 7000/tcp   # frp server 端口
sudo ufw allow 7050 # frp server dashboard
sudo ufw allow 60022 # Ubuntu1 SSH
sudo ufw allow 60023 # NAS SSH
sudo ufw allow 60024 # Ubuntu2 SSH
sudo ufw allow 65005 # webdav
sudo ufw allow 63306 # NAS mysql
sudo ufw allow 60080 # NAS web
sudo ufw enable
sudo ufw status verbose
```
运行结果：
``` bash
To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
7000/tcp                   ALLOW IN    Anywhere
7500/tcp                   ALLOW IN    Anywhere
7050                       ALLOW IN    Anywhere
60022                      ALLOW IN    Anywhere
65005                      ALLOW IN    Anywhere
60023                      ALLOW IN    Anywhere
60021/tcp                  ALLOW IN    Anywhere
60021/udp                  ALLOW IN    Anywhere
63306                      ALLOW IN    Anywhere
60080                      ALLOW IN    Anywhere
60024                      ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)
7000/tcp (v6)              ALLOW IN    Anywhere (v6)
7500/tcp (v6)              ALLOW IN    Anywhere (v6)
7050 (v6)                  ALLOW IN    Anywhere (v6)
60022 (v6)                 ALLOW IN    Anywhere (v6)
65005 (v6)                 ALLOW IN    Anywhere (v6)
60023 (v6)                 ALLOW IN    Anywhere (v6)
60021/tcp (v6)             ALLOW IN    Anywhere (v6)
60021/udp (v6)             ALLOW IN    Anywhere (v6)
63306 (v6)                 ALLOW IN    Anywhere (v6)
60080 (v6)                 ALLOW IN    Anywhere (v6)
60024 (v6)                 ALLOW IN    Anywhere (v6)

```


如果你想让 frp dashboard 从本地访问：`ssh -L 7500:127.0.0.1:7500 ubuntu@192.227.222.142`，然后本地打开 `http://127.0.0.1:7500`。

## 🧩 第 3 步：在 内网NAS服务器 与内网 Ubuntu服务器 安装 frpc

两台机器都执行以下步骤（路径、端口配置不同）
### 2️⃣ 安装 frp（frp 客户端）
``` bash
# 在 VPS 与内网主机都执行（分别下载到 /opt/frp）
cd /opt 
sudo mkdir frp && cd frp 

FRP_VER=0.65.0   # 若有更新，可替换版本号 
curl -LO https://github.com/fatedier/frp/releases/download/v${FRP_VER}/frp_${FRP_VER}_linux_amd64.tar.gz
tar xzf frp_${FRP_VER}_linux_amd64.tar.gz
sudo mv frp_${FRP_VER}_linux_amd64 /opt/frp

```

### 3️⃣ 内网 NAS（192.168.3.17）配置

创建 `/opt/frp/frpc.ini`：
``` bash
[common]
server_addr = 192.227.222.142
server_port = 7000
token = Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs

# 每个本地服务一个 section
# nas 映射: 本地 5000 -> VPS 127.0.0.1:15000
[nas]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 15000

# Navidrome: 本地 4533 -> VPS 127.0.0.1:4533
[navidrome]
type = tcp
local_ip = 127.0.0.1
local_port = 4533
remote_port = 14533

# Calibre: 本地 8083 -> VPS 127.0.0.1:18083
[calibre]
type = tcp
local_ip = 127.0.0.1
local_port = 8083
remote_port = 18083

[webdav]
type = tcp
local_ip = 127.0.0.1
local_port = 5005
remote_port = 65005

[miniflux]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 18080

[zipline]
type = tcp
local_ip = 127.0.0.1
local_port = 3333
remote_port = 13333

[nas_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22

[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3307
remote_port = 63307

[nas_web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 10080


```

创建 systemd 单元 `/etc/systemd/system/frpc.service`：
``` bash

[Unit]
Description=frp client
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target


```

启动：
``` bash
sudo systemctl daemon-reload
sudo systemctl enable --now frpc
sudo systemctl status frpc

```

如需重启
``` bash
sudo systemctl restart frpc

```


### 3️⃣ 内网 Ubuntu（192.168.3.47）配置
创建 `/opt/frp/frpc.ini`：
``` bash
[common]
server_addr = 192.227.222.142
server_port = 7000
token = Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs

# 每个本地服务一个 section
# n8n 映射: 本地 5678 -> VPS 127.0.0.1:15678
[n8n]
type = tcp
local_ip = 127.0.0.1
local_port = 5678
remote_port = 15678

# Transmission: 本地 9091 -> VPS 127.0.0.1:19091
[transmission]
type = tcp
local_ip = 127.0.0.1
local_port = 9091
remote_port = 19091

# Grafana: 本地 3000 -> VPS 127.0.0.1:13000
[grafana]
type = tcp
local_ip = 127.0.0.1
local_port = 3000
remote_port = 13000

# 🆕 SSH 映射
[ubuntu_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 60022

[homarr]
type = tcp
local_ip = 127.0.0.1
local_port = 7575
remote_port = 17575

[superset]
type = tcp
local_ip = 127.0.0.1
local_port = 8777
remote_port = 18777

[tk]
type = tcp
local_ip = 127.0.0.1
local_port = 8888
remote_port = 18888

```

创建 systemd 单元 `/etc/systemd/system/frpc.service`：
``` bash

[Unit]
Description=frp client 
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

```

启动：
``` bash
sudo systemctl daemon-reload
sudo systemctl enable --now frpc
sudo systemctl status frpc

```

如需重启
``` bash
sudo systemctl restart frpc

```


## 🧩 第 4 步：VPS 上配置 Caddy 反向代理
编辑 `/etc/caddy/Caddyfile`：

``` bash
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.

:80 {
        # Set this path to your site's directory.
        root * /usr/share/caddy

        # Enable the static file server.
        file_server

        # Another common task is to set up a reverse proxy:
        # reverse_proxy localhost:8080

        # Or serve a PHP site through php-fpm:
        # php_fastcgi localhost:9000
}
transmission.ishenwei.online {
    reverse_proxy 127.0.0.1:19091
    #log {
    #    output file /var/log/caddy/transmission.access.log
    #    format single_field common_log
    #}
}

grafana.ishenwei.online {
    reverse_proxy 127.0.0.1:13000
    #log {
    #    output file /var/log/caddy/grafana.access.log
    #    format single_field common_log
    #}
}

nas.ishenwei.online {
    reverse_proxy 127.0.0.1:15000
}

navidrome.ishenwei.online {
    reverse_proxy 127.0.0.1:14533
}

calibre.ishenwei.online {
    reverse_proxy 127.0.0.1:18083
}
dashboard.ishenwei.online {
    reverse_proxy 127.0.0.1:17575
}
miniflux.ishenwei.online {
    reverse_proxy 127.0.0.1:18080
}
zipline.ishenwei.online {
    reverse_proxy 127.0.0.1:13333
}
superset.ishenwei.online {
    reverse_proxy 127.0.0.1:18777
}
tk.ishenwei.online {
    reverse_proxy 127.0.0.1:18888
}
web.ishenwei.online {
    reverse_proxy 127.0.0.1:10080
}

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile


```

如需重启 Caddy

``` bash

sudo systemctl reload caddy
sudo systemctl status caddy

```

或者：
``` bash
#彻底重启 Caddy 服务（强制方式）
sudo systemctl restart caddy
```
Caddy 会自动申请并更新 Let's Encrypt 证书，提供 HTTPS 访问。


如果 systemctl 无响应（Caddy 卡死或崩溃）
``` bash
sudo systemctl stop caddy 
sudo pkill -9 caddy       # 杀掉所有残留进程 sudo systemctl start caddy
```
## 验证 Caddyfile 语法（最关键）
``` bash
sudo caddy validate --config /etc/caddy/Caddyfile
```

如果返回：
`Valid configuration`
说明语法正确，可以重载。
如果报错，Caddy 会指明**哪一行有问题**，例如：
`parse error: unknown directive at line 12`
你需要根据提示修正。

## 🧩 第 5 步：测试验证

### 1️⃣ 在 VPS 上
``` bash
curl http://127.0.0.1:15678
curl http://127.0.0.1:15000
curl http://127.0.0.1:19091
curl http://127.0.0.1:13000

ss -ltnp | egrep '15678|19091|13000|7000|60022'
```

```
root@racknerd-66f115a:~# ss -ltnp | egrep '15678|19091|13000|7000'
LISTEN 0      4096               *:19091            *:*    users:(("frps",pid=59421,fd=10))
LISTEN 0      4096               *:13000            *:*    users:(("frps",pid=59421,fd=8))
LISTEN 0      4096               *:15678            *:*    users:(("frps",pid=59421,fd=9))
LISTEN 0      4096               *:7000             *:*    users:(("frps",pid=59421,fd=6))
```
### 2️⃣ 在浏览器中

访问：

- [https://nas.ishenwei.online](https://nas.ishenwei.online)
- [https://n8n.ishenwei.online](https://n8n.ishenwei.online)
    
应能通过 HTTPS 打开对应服务。
## 🧩 第 6 步：可选安全加固
### 1️⃣ Caddy 基础认证

在 Caddyfile 的 `n8n.ishenwei.online` 段中加入：
``` bash
basicauth /* {     admin JDJhJDE0JDN3ZXVhV2YyZG9SY2hvYzVmZ2h3QUlVblpOMU4vS1ptcENrSlhySElMb3l5dytOMkh0Tk93 }
```

> 用 `caddy hash-password` 生成密码散列。

### 2️⃣ 防火墙

只放行必要端口：
``` bash
sudo ufw allow 22,80,443,7000/tcp 
sudo ufw enable
```

## 🧩 第 7 步：Dashboard（可选）
访问：
``` bash

http://192.227.222.142:7500 

用户名：admin 密码：StrongPassword123!

```

你可以实时查看 frp 客户端的连接状态。

FRP 架构已经稳定运行（HTTP 反代验证通过），接下来要实现 **通过域名 `ubuntu1.ishenwei.online` SSH 到内网的 Ubuntu (192.168.3.47:22)**。

⚠️ **重点提醒（安全性）**  
SSH 穿透与 HTTP 不同，它是纯 TCP 流量，不经 Caddy（Caddy 只处理 HTTP/HTTPS），所以：

- **Caddy 不参与 SSH 的代理**。
    
- **只用 frps + frpc 配置即可完成**。
    
- **CaddyFile 无需修改**。

## 🧭 拓扑关系

``` bash
你（外部SSH客户端）
   │
   ▼
ubuntu1.ishenwei.online:60022  （VPS公网）
   │
   ▼
FRP Server (frps) on VPS
   │
   ▼
FRP Client (frpc) on 192.168.3.47
   │
   ▼
Local Ubuntu SSH (192.168.3.47:22)

```

## 🧩 VPS 端（frps）配置

编辑 `/opt/frp/frps.ini`：

> 不需要添加新的 section，这里只是定义基础参数。frps 会自动识别来自客户端的 TCP 映射。

---

## 🧩 内网 Ubuntu（192.168.3.47）端 frpc 配置

编辑 `/opt/frp/frpc.ini`，在现有配置文件中追加：

``` bash

# SSH 映射
[ubuntu_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 60022


```

> - `type = tcp` 表示这是纯 TCP 代理，不走 HTTP 协议
> - `remote_port = 60022` 是 VPS 上暴露的端口（外部 SSH 连接入口）
>     

## 🔧 启动并验证

在内网机器上：
```
sudo systemctl restart frpc 
sudo systemctl status frpc

```

验证日志中是否出现：

`[ubuntu_ssh] start proxy success`

---

## 🌐 在外部电脑上连接 SSH

从公网（任意地方）执行：

`ssh -p 60022 user@ubuntu1.ishenwei.online`


> 注意：DNS 只解析到 IP，**SSH 的端口要显式指定为 `-p 60022`**。

``` bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 7000/tcp   # frp server 端口
sudo ufw allow 7050
sudo ufw allow 60022
sudo ufw enable
sudo ufw status verbose
```

---

## 🔒 （可选）安全加固建议

1. **不要直接使用 22 或常见端口**，比如：
    
    `remote_port = 26222`
    
    避免被扫描。
    
2. **限制来源 IP**（仅 VPS 防火墙开放指定来源）：
    
    `sudo ufw allow from <your_home_ip> to any port 60022 proto tcp`
    
3. **使用公钥认证禁用密码登录**：
    
    - 编辑 `/etc/ssh/sshd_config`
        
        `PasswordAuthentication no`
        
    - 重启 SSH：
        
        `sudo systemctl restart ssh`
        

---

## ✅ 总结

| 组件                   | 是否需要修改                                           | 说明      |
| -------------------- | ------------------------------------------------ | ------- |
| **Caddy**            | ❌ 无需修改                                           | 不处理 SSH |
| **frps (VPS)**       | ✅ 保持默认端口即可                                       |         |
| **frpc (内网 Ubuntu)** | ✅ 新增 `[ubuntu_ssh]` section                      |         |
| **DNS**              | ✅ 添加 `ubuntu1.ishenwei.online -> VPS公网IP`        |         |
| **SSH 连接**           | ✅ 使用 `ssh -p 60022 user@ubuntu1.ishenwei.online` |         |


## 错误排查 #troubleshooting 


### ✔ 检查Server上配置的代理服务器可能会有冲突

NAS上安装的V2RayA 会对FRP有影响，需要停止代理服务器并重启FRPC


### ✔ 第 1 步：确认 frps 是否真的在监听端口（排除端口被占用/劫持）
``` bash
ss -lntup | grep 7000
ss -lntup | grep frps

```

结果：
``` bash
root@racknerd-66f115a:~# ss -lntup | grep 7000
tcp   LISTEN 0      4096               *:7000             *:*    users:(("frps",pid=413014,fd=6))
root@racknerd-66f115a:~# ss -lntup | grep frps
tcp   LISTEN 0      4096               *:7000             *:*    users:(("frps",pid=413014,fd=6))
tcp   LISTEN 0      4096               *:7500             *:*    users:(("frps",pid=413014,fd=3))

```
如果这里显示：

❌ 端口被 Caddy/Nginx 占用  
❌ frps 未绑定 0.0.0.0  
❌ frps 在 LISTEN 但不是你期望的配置文件

### ✔ 第 2 步：确定 frps 进程读取的配置是否跟你想的一样

执行：
``` bash
ps -ef | grep frps
```
你要看到类似：
``` bash
root@racknerd-66f115a:~# ps -ef | grep frps
root      413014       1  0 02:23 ?        00:00:00 /opt/frp/frps -c /opt/frp/frps.ini
root      419007  414182  0 02:57 pts/1    00:00:00 grep --color=auto frps

```

如果看到：
- 路径不对
- 配置文件不对
- 或者正运行旧版本二进制

那 frps 实际载入的 token、bind_port 等信息就不匹配。

**尤其要确认 token 是否是你以为的那个。**

👉 很多人遇到的问题是：  
他们编辑了 `/opt/frp/frps.ini`，但 systemd service 其实加载另一个路径，例如 `/etc/frp/frps.ini`。

### ✔ 第 3 步：确认防火墙是否把 7000 封了

在 VPS 执行：
```
sudo iptables -L -n 
sudo ufw status 
sudo firewall-cmd --list-all
```


你需要确保：

- `tcp 7000` 在 **ACCEPT**
    
- Cloudflare 没有影响你（你用的是直连 IP，不会影响）
    
- Caddy/Nginx 没修改 nftables（某些 One-key 脚本会修改）

### ✔ 第 4 步：确认没有 Caddy/Nginx 误 proxy 了 TCP 7000

检查 Caddy 配置：
``` bash
vi /etc/caddy/Caddyfile
```
**是否存在以下配置：**

`:7000 {     reverse_proxy ... }`

如果有 → FRP 就没法直接监听这个端口。

### ✔ 第 5 步：确认 frps 日志是否有拒绝认证（token mismatch）

执行：
```
journalctl -u frps -n 100 --no-pager
```

如果你看到类似：

`authentication failed token mismatch invalid login`

那肯定是 token 和 frpc 不一致。

👉 很多人以为一样，但实际是空格、换行、编码问题导致不一致。

### ✔ 第 6 步：尝试手动 telnet 登录后观察 frps 日志变化

**非常关键的诊断动作**

你从任意 frpc 客户端执行：
``` bash
telnet 192.227.222.142 7000
```

同时在 frps VPS 执行：
``` bash
journalctl -u frps -f
```

正常情况下，你应该看到 frps 有日志反应：

- 有连接建立
- 有 login 请求

如果 frps 完全无反应：

➡ **说明请求没有到达 frps 进程 → 必然是端口被别的服务占用 / iptables 拦截 / SELinux 限制 / Caddy/Nginx 覆盖了端口**


### ✔ 第 7 步：强制重启 frps 和 frpc

在 frps 机器上：
```
systemctl restart frps
```

确认状态：
```
systemctl status frps
```

在 frpc 机器上：
```
systemctl restart frpc 
systemctl status frpc 
journalctl -u frpc -n 50
```

如果 frpc 日志里直接报：
`dial tcp 192.227.222.142:7000: connection reset`
➡ 防火墙问题

如果报：
`authentication failed`
➡ token 不一致

如果：
`wait until server ready`
➡ frps 端口被劫持


# Reference
