基于 frp(Fast Reverse Proxy)
目标:1 台服务端 + 2 台客户端,实现内网穿透(SSH 示例)
一、背景知识
FRP 是什么?
FRP 全称是:
Fast Reverse Proxy
你可以把它简单理解成:
让你在外面,也能访问家里或者内网里的设备和服务。
比如:
- 你想在公司远程 SSH 到家里的 Linux 主机
- 你想在外面访问家里的 NAS
- 你想在手机上连接自己内网里的某个服务
- 你想让两台不在同一个网络里的设备互通
这时候,FRP 就能派上用场。
用一句话理解整体逻辑
你只要先记住这句话:
外面的电脑或手机 → 服务器(frps) → 你家里的设备(frpc)这里的“外面的设备”不一定非得是电脑,也可以是手机。
如果你平时更常用手机访问,那么客户端 B 也可以理解成手机端。
例如你就可以使用 frp助手 来做访问和管理。
这篇文章里有哪几个角色?
为了方便理解,这篇教程里一共会出现 3 个角色:
| 角色 | 说明 |
|---|---|
| frps | 服务端,放在公网服务器上,负责中转和协调 |
| frpc-A | 客户端 A,放在家里的设备上,负责提供服务 |
| frpc-B | 客户端 B,放在外面的电脑或手机上,负责访问服务 |
STCP 和 XTCP 怎么理解?
STCP
STCP 的特点是:
- 更稳
- 更适合新手
- 更容易先跑通
你可以简单理解成:
外面的电脑或手机 → frps → 家里的设备也就是说,数据会经过服务端中转。
XTCP
XTCP 的特点是:
- 理论上更快
- 更接近直连
- 但不一定成功,和网络环境有关系
你可以简单理解成:
外面的电脑或手机 → 家里的设备它会尽量尝试让两端直接通信。
安全一定要做:token 和 secretKey
为了防止别人乱连你的服务,至少要配置这两个东西:
auth.token:客户端和服务端之间的认证口令secretKey:某个代理服务自己的访问密钥
下面这些值只是示例,你一定要改成自己的,不要长期直接照抄:
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
secretKey = "ChangeMe_STCP_or_XTCP_Key_2026_A8!vK2#q"建议你自己改成:
- 更长一点
- 带大小写字母
- 带数字
- 带符号
二、快速入门:公网 IPv4 部署
这个方案最适合新手。
如果你有一台公网 IPv4 服务器,建议先从这个方案开始。
2.1 先理解整体结构
在这一部分里:
- frps 放在公网服务器上
- frpc-A 放在家里的电脑、NAS 或 Linux 主机上
- frpc-B 放在外面的电脑或手机上,用来访问
访问路径大致就是:
客户端 B → frps → 客户端 A如果 XTCP 成功,则会尽量变成更接近直连的方式。
2.2 先准备这几样东西
开始前,你最好先准备好:
- 一台公网 IPv4 服务器
- 一台家里的设备(电脑 / NAS / Linux 主机)
- 一台外面的访问设备(电脑或手机)
- frp 程序文件
- 家里的设备上已经开启 SSH(本教程用 SSH 演示)
2.3 手动方式跑通(一定先做)
先不要急着上 Docker。
最适合排错的方法,就是先手动跑通一次。
2.3.1 服务端 frps 配置
先在公网服务器上创建一个文件:frps.toml
bindPort = 7000
# 说明:frps 监听的端口
# 客户端 A 和客户端 B 都要连接这个端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:客户端连接 frps 时使用的认证 token
# 这里是示例值,请务必修改成你自己的2.3.2 防火墙重点提醒(IPv4)
这是重点:如果服务端防火墙没有放行 bindPort 对应的端口,客户端一定连不上。
比如这里你配置的是:
bindPort = 7000那就要确保公网服务器已经放行 TCP 7000。
你至少要检查这几层:
云服务器安全组
- 阿里云
- 腾讯云
- AWS
- Oracle Cloud
- 其他云平台
服务器系统防火墙
ufwfirewalldiptables
- frps 是否真的成功启动并监听了端口
很多新手会以为是 frp 配错了,实际上经常只是端口没开放。
2.3.3 启动服务端
./frps -c frps.toml如果启动成功,先不要关掉这个终端。
2.3.4 客户端 A 配置(家里的设备,提供 SSH 服务)
假设:
- 客户端 A 是家里的电脑、NAS 或 Linux 主机
- 本机已经开启了 SSH
- SSH 默认端口还是
22
先创建文件:frpc-a.toml
serverAddr = "你的公网服务器IP"
# 说明:这里填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的端口
# 必须和服务端 frps.toml 里的 bindPort 一致
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和服务端 frps.toml 的 token 完全一致
[[proxies]]
name = "ssh-stcp"
# 说明:这是 STCP 这组服务的名字
# 客户端 B 访问时要通过这个名字找到它
type = "stcp"
# 说明:这里表示使用 STCP 模式
# STCP 更稳,更适合新手先跑通
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:这是 STCP 这组服务自己的访问密钥
# 客户端 B 访问 STCP 时也必须填一样的值
# 这是示例值,请你自己改掉
localIP = "127.0.0.1"
# 说明:客户端 A 上要暴露出去的本地服务地址
# 如果你暴露的是本机 SSH,一般就是 127.0.0.1
localPort = 22
# 说明:客户端 A 上要暴露出去的本地服务端口
# 这里是 SSH 默认端口 22
[[proxies]]
name = "ssh-xtcp"
# 说明:这是另一组代理,专门给 XTCP 使用
# 它和前面的 ssh-stcp 是并存关系,不是替换关系
type = "xtcp"
# 说明:这里表示使用 XTCP
# XTCP 会尽量让客户端 B 直接连到客户端 A
# 理论上更快,但不一定成功
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:这是 XTCP 这组服务自己的访问密钥
# 建议和 STCP 分开,不要混用
# 也是示例值,请你自己改掉
localIP = "127.0.0.1"
# 说明:本地服务地址
# 这里还是本机 SSH
localPort = 22
# 说明:本地服务端口
# 这里还是 SSH 的 222.3.5 启动客户端 A
./frpc -c frpc-a.toml2.3.6 客户端 B 配置(外面的电脑或手机,用来访问)
这里的客户端 B,你可以理解成“访问端”。
它可以是:
- 外面的电脑
- 你的笔记本
- 你的另一台远程设备
- 或者你的手机(例如使用
frp助手来访问)
先创建文件:frpc-b.toml
serverAddr = "你的公网服务器IP"
# 说明:这里同样填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的端口
# 必须和服务端保持一致
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和 frps、客户端 A 完全一致
# 只要 token 不一致,就会直接连接失败
[[visitors]]
name = "ssh-stcp-visitor"
# 说明:这是客户端 B 这边给 STCP visitor 起的名字
# 这个名字主要是给你自己区分用,方便看配置
type = "stcp"
# 说明:这里表示访问的是 STCP 服务
serverName = "ssh-stcp"
# 说明:这里非常重要
# 它必须对应客户端 A 里 [[proxies]] 的 name
# 也就是前面客户端 A 配置里的 name = "ssh-stcp"
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:这里必须和客户端 A 里的 STCP secretKey 完全一致
# 只要这里不一致,就算其他都对,也无法访问
bindAddr = "127.0.0.1"
# 说明:frpc 会在客户端 B 本机监听一个地址
# 这里填 127.0.0.1,表示只在本机开放
bindPort = 6000
# 说明:frpc 会在客户端 B 本机监听 6000 端口
# 以后你 ssh 登录时,实际连的就是这个端口
[[visitors]]
name = "ssh-xtcp-visitor"
# 说明:这是给 XTCP 用的 visitor 名字
type = "xtcp"
# 说明:这里表示访问的是 XTCP 服务
serverName = "ssh-xtcp"
# 说明:这里必须对应客户端 A 里 XTCP 那组代理的 name
# 也就是前面客户端 A 里的 name = "ssh-xtcp"
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:这里必须和客户端 A 的 XTCP secretKey 完全一致
bindAddr = "127.0.0.1"
# 说明:同样是在客户端 B 本机监听
bindPort = 6001
# 说明:这里给 XTCP 单独开一个本地端口
# 这样它和 STCP 分开,两个方案可以同时保留2.3.7 启动客户端 B
./frpc -c frpc-b.toml2.3.8 开始测试
先测试最稳的 STCP:
ssh 用户名@127.0.0.1 -p 6000如果能登录,说明 STCP 已经成功。
再测试 XTCP:
ssh 用户名@127.0.0.1 -p 6001如果能通,说明 XTCP 也成功了。
如果不通,也很正常,继续使用前面的 6000 就行。
你可以把它记成这样:
127.0.0.1:6000→ STCP,稳定保底127.0.0.1:6001→ XTCP,能通就更快
2.4 Docker 部署(推荐长期运行)
真正长期运行时,大多数用户都会选择 Docker。
因为它更方便迁移、备份、重启和管理。
2.4.1 Docker 运行 frps(服务端)
第 1 步:创建目录
在公网服务器上执行:
mkdir -p ~/frp/frps
cd ~/frp/frps第 2 步:创建配置文件 frps.toml
例如:
nano frps.toml把下面内容粘贴进去:
bindPort = 7000
# 说明:frps 监听端口
# 客户端都会连接这个端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:客户端连接 frps 时使用的认证 token
# 一定要改成你自己的值保存后执行:
ls -l确认 frps.toml 已经存在。
第 3 步:启动 frps 容器
docker run -d \
--name frps \
--restart=always \
-p 7000:7000 \
-v ./frps.toml:/etc/frp/frps.toml \
snowdreamtech/frps -c /etc/frp/frps.toml这条命令中比较关键的参数:
-d:后台运行--name frps:容器名叫frps--restart=always:Docker 重启后自动拉起-p 7000:7000:映射端口-v ./frps.toml:/etc/frp/frps.toml:挂载配置文件
第 4 步:查看状态和日志
docker ps
docker logs -f frps如果日志没有报错,一般就说明 frps 已经正常运行。
第 5 步:再次确认防火墙
这是重点:就算容器正常运行,如果公网服务器安全组或系统防火墙没有放行 TCP 7000,客户端照样连不上。
2.4.2 Docker 运行 frpc-A(客户端 A)
第 1 步:创建目录
mkdir -p ~/frp/frpc-a
cd ~/frp/frpc-a第 2 步:创建配置文件 frpc.toml
nano frpc.toml内容如下:
serverAddr = "你的公网服务器IP"
# 说明:这里填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的端口
# 必须和服务端 frps.toml 里的 bindPort 保持一致
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和 frps 的 auth.token 完全一致
[[proxies]]
name = "ssh-stcp"
# 说明:这是 STCP 服务的名字
type = "stcp"
# 说明:STCP 是更稳定的模式
# 推荐先使用它
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:这是 STCP 服务自己的访问密钥
localIP = "127.0.0.1"
# 说明:要暴露出去的本地服务地址
localPort = 22
# 说明:要暴露出去的本地端口
[[proxies]]
name = "ssh-xtcp"
# 说明:这是 XTCP 服务的名字
type = "xtcp"
# 说明:XTCP 会尽量让访问端直连到客户端 A
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:这是 XTCP 服务自己的访问密钥
localIP = "127.0.0.1"
# 说明:本地服务地址
localPort = 22
# 说明:本地服务端口保存后执行:
ls -l确认文件已经存在。
第 3 步:启动 frpc-A 容器
docker run -d \
--name frpc-a \
--restart=always \
--network=host \
-v ./frpc.toml:/etc/frp/frpc.toml \
snowdreamtech/frpc -c /etc/frp/frpc.toml其中:
--network=host:直接使用宿主机网络,更省心-v ./frpc.toml:/etc/frp/frpc.toml:挂载配置文件
第 4 步:查看状态和日志
docker ps
docker logs -f frpc-a2.4.3 Docker 运行 frpc-B(客户端 B)
这里的客户端 B,依然可以理解成:
- 外面的电脑
- 你的笔记本
- 你的另一台设备
- 或者你的手机(例如使用
frp助手来访问)
第 1 步:创建目录
mkdir -p ~/frp/frpc-b
cd ~/frp/frpc-b第 2 步:创建配置文件 frpc.toml
nano frpc.toml内容如下:
serverAddr = "你的公网服务器IP"
# 说明:这里填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的监听端口
# 必须和 frps.toml 里的 bindPort 一样
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和 frps、客户端 A 的 token 完全一致
[[visitors]]
name = "ssh-stcp-visitor"
# 说明:这是客户端 B 上 STCP visitor 的名字
type = "stcp"
# 说明:这里表示访问的是 STCP 模式
serverName = "ssh-stcp"
# 说明:这里必须对应客户端 A 里 STCP 那组代理的 name
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:这里必须和客户端 A 里 STCP 的 secretKey 完全一致
bindAddr = "127.0.0.1"
# 说明:frpc-B 会在本机监听一个地址
bindPort = 6000
# 说明:frpc-B 会在本机监听 6000 端口
# 这对应的是 STCP 方案
[[visitors]]
name = "ssh-xtcp-visitor"
# 说明:这是客户端 B 上 XTCP visitor 的名字
type = "xtcp"
# 说明:这里表示访问的是 XTCP 模式
serverName = "ssh-xtcp"
# 说明:这里必须对应客户端 A 里 XTCP 那组代理的 name
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:这里必须和客户端 A 里 XTCP 的 secretKey 完全一致
bindAddr = "127.0.0.1"
# 说明:同样是在客户端 B 本机监听
bindPort = 6001
# 说明:给 XTCP 单独开一个本地端口
# 这样 STCP 和 XTCP 可以同时存在保存后执行:
ls -l确认 frpc.toml 已经存在。
第 3 步:启动 frpc-B 容器
docker run -d \
--name frpc-b \
--restart=always \
--network=host \
-v ./frpc.toml:/etc/frp/frpc.toml \
snowdreamtech/frpc -c /etc/frp/frpc.toml第 4 步:查看状态和日志
docker ps
docker logs -f frpc-b第 5 步:开始测试
先测试最稳的 STCP:
ssh 用户名@127.0.0.1 -p 6000再测试 XTCP:
ssh 用户名@127.0.0.1 -p 6001建议顺序永远是:
- 先测
6000 6000通了,再测6001
如果 6001 不通,继续使用 6000 就可以了。
2.5 docker-compose 部署(NAS 用户常用)
如果你是:
- NAS 用户
- 家庭服务器用户
- 想把配置文件和容器都放在一个目录里统一管理
那 docker-compose 会更舒服。
2.5.1 docker-compose 运行 frps(服务端)
第 1 步:创建目录
mkdir -p ~/frp/frps-compose
cd ~/frp/frps-compose第 2 步:创建配置文件 frps.toml
nano frps.toml内容如下:
bindPort = 7000
# 说明:frps 监听端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:客户端连接 frps 时使用的认证 token
# 一定要改成自己的第 3 步:创建 docker-compose.yml
nano docker-compose.yml内容如下:
version: "3.8"
services:
frps:
image: snowdreamtech/frps
container_name: frps
restart: always
ports:
- "7000:7000"
volumes:
- ./frps.toml:/etc/frp/frps.toml
command: -c /etc/frp/frps.toml第 4 步:启动
docker compose up -d第 5 步:查看状态和日志
docker compose ps
docker compose logs -f第 6 步:再次确认防火墙
这是重点:compose 启动成功,不等于外网一定能连通。
你仍然要确保:
- 云服务器安全组放行了 TCP 7000
- 系统防火墙放行了 TCP 7000
2.5.2 docker-compose 运行 frpc-A(客户端 A)
第 1 步:创建目录
mkdir -p ~/frp/frpc-a-compose
cd ~/frp/frpc-a-compose第 2 步:创建配置文件 frpc.toml
nano frpc.toml内容如下:
serverAddr = "你的公网服务器IP"
# 说明:这里填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和 frps 一致
[[proxies]]
name = "ssh-stcp"
# 说明:STCP 服务名
type = "stcp"
# 说明:稳定模式,推荐优先用
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:STCP 服务密钥,客户端 B 必须一致
localIP = "127.0.0.1"
# 说明:本机 SSH 地址
localPort = 22
# 说明:本机 SSH 端口
[[proxies]]
name = "ssh-xtcp"
# 说明:XTCP 服务名
type = "xtcp"
# 说明:直连模式,可能更快,但不一定成功
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:XTCP 服务密钥,客户端 B 必须一致
localIP = "127.0.0.1"
# 说明:本机 SSH 地址
localPort = 22
# 说明:本机 SSH 端口第 3 步:创建 docker-compose.yml
nano docker-compose.yml内容如下:
version: "3.8"
services:
frpc-a:
image: snowdreamtech/frpc
container_name: frpc-a
restart: always
network_mode: host
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
command: -c /etc/frp/frpc.toml第 4 步:启动
docker compose up -d第 5 步:查看状态和日志
docker compose ps
docker compose logs -f2.5.3 docker-compose 运行 frpc-B(客户端 B)
这里的客户端 B,同样可以是:
- 外面的电脑
- 外面的另一台设备
- 或者手机(例如使用
frp助手来访问)
第 1 步:创建目录
mkdir -p ~/frp/frpc-b-compose
cd ~/frp/frpc-b-compose第 2 步:创建配置文件 frpc.toml
nano frpc.toml内容如下:
serverAddr = "你的公网服务器IP"
# 说明:这里填写 frps 所在服务器的公网 IPv4 地址
serverPort = 7000
# 说明:这里填写 frps 的端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:这里必须和 frps、客户端 A 一致
[[visitors]]
name = "ssh-stcp-visitor"
# 说明:客户端 B 上 STCP visitor 的名字
type = "stcp"
# 说明:访问 STCP 模式
serverName = "ssh-stcp"
# 说明:这里必须对应客户端 A 的 STCP 服务名
secretKey = "ChangeMe_STCP_Key_2026_R8!pW3@k"
# 说明:这里必须和客户端 A 的 STCP 密钥一致
bindAddr = "127.0.0.1"
# 说明:在客户端 B 本机监听
bindPort = 6000
# 说明:以后通过本机 6000 端口访问 STCP
[[visitors]]
name = "ssh-xtcp-visitor"
# 说明:客户端 B 上 XTCP visitor 的名字
type = "xtcp"
# 说明:访问 XTCP 模式
serverName = "ssh-xtcp"
# 说明:这里必须对应客户端 A 的 XTCP 服务名
secretKey = "ChangeMe_XTCP_Key_2026_P2P_Z7@xD4!m"
# 说明:这里必须和客户端 A 的 XTCP 密钥一致
bindAddr = "127.0.0.1"
# 说明:在客户端 B 本机监听
bindPort = 6001
# 说明:以后通过本机 6001 端口访问 XTCP第 3 步:创建 docker-compose.yml
nano docker-compose.yml内容如下:
version: "3.8"
services:
frpc-b:
image: snowdreamtech/frpc
container_name: frpc-b
restart: always
network_mode: host
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
command: -c /etc/frp/frpc.toml第 4 步:启动
docker compose up -d第 5 步:查看状态和日志
docker compose ps
docker compose logs -f第 6 步:开始测试
STCP:
ssh 用户名@127.0.0.1 -p 6000XTCP:
ssh 用户名@127.0.0.1 -p 60012.6 systemd 部署(适合熟悉 Linux 的用户)
如果你不想用 Docker,也可以直接把 frps / frpc 做成系统服务。
这部分更适合:
- 比较熟悉 Linux
- 不想用容器
- 想直接管理二进制进程
这里只给一个最小示例。
[Unit]
Description=frps
After=network.target
[Service]
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=always
[Install]
WantedBy=multi-user.target启动:
systemctl daemon-reload
systemctl enable frps
systemctl start frpsfrpc 同理,把可执行文件和配置路径改成自己的即可。
三、进阶配置:公网 IPv6 + DDNS 部署
3.1 这个方案适合谁
这个方案适合:
- 家里网络支持公网 IPv6
- 不想买公网 IPv4 服务器
- 愿意稍微折腾一点
3.2 先简单说一下 DDNS
很多家庭宽带的 IPv6 地址不是永久固定的。
所以一般不会直接把 IPv6 地址写死,而是会这样用:
域名 → 当前 IPv6 地址DDNS 的作用,就是当 IPv6 地址变化时,自动把域名解析更新过去。
这不是本教程重点,所以这里只点到为止。
你可以自己搜索:
IPv6 DDNS 教程3.3 IPv6 方案怎么改
如果你已经看懂了前面的 IPv4 教程,那么 IPv6 版本其实只改几处关键地方。
3.3.1 frps 改成监听 IPv6
bindAddr = "::"
# 说明:监听所有 IPv6 地址
bindPort = 7000
# 说明:frps 的监听端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:认证 token,客户端必须一致3.3.2 客户端里不再填公网 IPv4,而是填域名
serverAddr = "你的域名"
# 说明:这里不再填写 IPv4 地址
# 而是填写已经配置好 DDNS 的域名
# 这个域名应该能解析到你当前的 IPv6 地址
serverPort = 7000
# 说明:frps 端口
auth.token = "ChangeMe_FRP_Token_2026_X9#7pLm@Q"
# 说明:必须和 frps 一致除此之外:
stcp配置不变xtcp配置不变- Docker 和 docker-compose 的写法也基本不变
3.3.3 防火墙重点提醒(IPv6)
这是重点:家庭 IPv6 环境下,不只是 NAS 本机防火墙要放行,路由器和光猫上的 IPv6 防火墙也可能拦截端口。
你至少要检查这几层:
- NAS / 家里服务器本机防火墙
- 路由器上的 IPv6 防火墙
- 光猫上的 IPv6 防火墙
尤其是家庭 IPv6:就算 NAS 本机已经放行端口,如果路由器或光猫的 IPv6 防火墙没有放行,外网依然连不进来。
如果你的 frps 用的是:
bindPort = 7000那就要确保 IPv6 的 TCP 7000 可以从外网访问。
四、总结
4.1 常见问题
这篇教程里为什么同时保留 STCP 和 XTCP?
因为这样你可以同时保留:
127.0.0.1:6000→ STCP 稳定方案127.0.0.1:6001→ XTCP 直连方案
如果 XTCP 不通,也不会影响你继续使用 STCP。
为什么 token 和 secretKey 要写复杂一点?
因为很多人会直接复制教程里的示例值。
如果示例太简单,比如:
123456
abc那就很容易被直接复用,不安全。
所以教程里最好也给出“像真实配置”的示例,同时明确提醒用户要改掉。
如果我想在手机上访问怎么办?
也没问题。
这篇文章里的“客户端 B”,不一定非得是电脑。
它也可以是:
- 手机
- 平板
- 其他移动设备
例如你就可以在手机侧使用 frp助手 来做访问或管理。
这样整套思路仍然成立,只是“访问端”的设备换成了手机而已。
XTCP 不通怎么办?
很正常,继续用 STCP 即可。
XTCP 成功与否,和网络环境、NAT 类型等因素有关。
所以不要把 XTCP 当成唯一方案。
4.2 最终推荐
新手最稳妥的方案
公网 IPv4 + STCP + Docker 或 docker-compose想继续优化速度的方案
公网 IPv4 + STCP + XTCP 同时保留家里本身就有公网 IPv6 的方案
公网 IPv6 + DDNS + STCP4.3 后续可以继续扩展的内容
这篇文章先聚焦最常用、最容易上手的两个场景:STCP 和 XTCP。
如果你已经跑通了这篇教程,后面还可以继续扩展这些内容:
- TLS 加密
- Dashboard 面板
- 多用户隔离
- 一键安装脚本
- RDP / NAS / Web 等更多服务映射示例
建议先把这篇文章里的内容跑通,再逐步折腾这些进阶玩法。
如果你是第一次接触 FRP,我建议你不要一下子把所有功能都学完。
最好的顺序其实很简单:
- 先把 IPv4 + STCP 跑通
- 再额外加上 XTCP
- 如果家里有公网 IPv6,再研究 DDNS 和 IPv6 方案
- 最后再去探索 FRP 更多高级玩法
这样会轻松很多,也更不容易中途放弃。