一、前言
很多时候内网服务器没有公网 IP,远程管理很麻烦。
本文分享我用 FRP + Docker 实现公网访问内网 SSH / Xftp 的实战经验,包含配置、部署流程和排查方法。
二、整体架构
+------------------+ SSH/Xftp +------------------+
| | -------------------> | |
| 本地电脑 | | 公网服务器 |
| (你的电脑) | <------------------- | frps Docker容器 |
| | TCP 15000 | bindPort:7000 |
+------------------+ | web:7500 |
+------------------+
│
│ TCP隧道
▼
+------------------+
| |
| 内网服务器 |
| frpc Docker容器 |
| SSH 22 |
+------------------+
✅ 原理:内网服务器主动连接公网 FRPS,FRPS 动态监听 remotePort,实现 TCP 转发
⚠️ 注意:FRP 是端口级映射,不是 VPN,单端口穿透仅能访问指定服务
三、FRPS 服务端部署(公网服务器)
1️⃣ 创建配置目录
mkdir -p /data/sfs-0001/docker_data/frp
2️⃣ 配置 frps.toml
bindPort = 7000
auth.method = "token"
auth.token = "你的token"
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "你的密码"
log.level = "info"
log.maxDays = 7
说明:
- 7000 → FRPC 连接端口
- 7500 → Web 管理后台
- auth.token → 连接验证
3️⃣ 启动 FRPS 容器
docker run -d \
--name frps \
--restart=always \
-p 7000:7000 \
-p 7500:7500 \
-v /data/sfs-0001/docker_data/frp/frps.toml:/etc/frp/frps.toml \
docker.m.daocloud.io/snowdreamtech/frps
4️⃣ 安全组端口放行
| 端口 | 用途 |
|---|---|
| 7000 | FRPC 连接 |
| 7500 | Web 管理后台 |
| 15000 | SSH 映射端口 |
四、FRPC 客户端部署(内网服务器)
1️⃣ 配置 frpc.toml
路径 /data/frp/frpc.toml:
serverAddr = "公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "你的token 同上"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1" //注意这里改成本机的ip 因为容器内部的 `127.0.0.1` 指向容器自己
localPort = 22
remotePort = 15000
✅ localPort → 内网服务端口
✅ remotePort → 公网映射端口
2️⃣ 启动 FRPC 容器
docker run -d \
--name frpc \
--restart=always \
-v /data/frp/frpc.toml:/etc/frp/frpc.toml \
docker.m.daocloud.io/snowdreamtech/frpc
五、验证与排查
- 查看 frpc 日志
docker logs frpc
输出示例:
login to server success
proxy added: [ssh]
start proxy success
2. SSH / Xftp 测试
ssh -p 15000 root@公网IP
⚠️ 如果报 Connection closed,一般是 SSH 本身策略限制(root 禁止密码登录或密钥问题),不是 FRP 问题。
- 后台管理确认客户端在线
http://公网IP:7500
输入账号密码后可以进入页面
六、问题排查经验
- 拉镜像失败 → 配置国内 Docker 镜像源
- docker.m.daocloud.io/snowdreamtech/frps是国内的镜像 正常应该是可以直接拉取
- 实在下不了可以用我上传的夸克的文件 链接:pan.quark.cn/s/08b4b6ac3… 提取码:ETJY
- frps-image.tar放入公网服务器 加载本地tar镜像包 docker load -i frps-image.tar
- frpc-image.tar放入内网服务器 加载本地tar镜像包 docker load -i frpc-image.tar
- 端口无法访问 → 检查安全组、防火墙
七、总结
✅ 完成 FRP 服务端 + 内网客户端部署
✅ 实现公网访问内网 SSH / Xftp
✅ 完成 Docker 化部署
✅ 可灵活扩展其他服务端口
技术点:FRP 内网穿透、Docker 容器化、端口映射、SSH 安全策略