基于Docker部署FRP来实现内网穿透是一个非常流行且高效的方案。下面我将为您提供一份详细的、从零开始的部署操作步骤,涵盖服务端(公网服务器) 和客户端(内网机器) 的配置。
官网:https://gofrp.org/zh-cn/
一,架构原理简介
- FRP 服务端 (frps):部署在拥有公网IP的服务器上,监听一个端口(如
7000
),等待客户端连接。它负责将外部网络的请求转发到已连接的内网客户端。 - FRP 客户端 (frpc):部署在内网的机器上,它会主动与公网服务器上的
frps
建立连接。客户端配置需要暴露的内网服务(如SSH、Web网站等)。
二,部署 FRP 客户端
下载地址:https://github.com/fatedier/frp/releases

- 步骤 1:准备客户端配置文件
在内网机器上同样创建一个目录,把下载好的文件上传到/root/目录下并解压
/root/frp_0.65.0_linux_amd64

步骤 2:安装frpc客户端
进入/root/frp_0.65.0_linux_amd64,执行如下命令,官方安装详见:https://gofrp.org/zh-cn/docs/setup/
./frpc -c ./frpc.toml
frpc.toml配置文件如下:
frpc.toml和老版本的frpc.ini编写不一样,具体参考下面,容易出错的地方!
[common]
# server_addr为FRPS服务器IP地址
server_addr = X.X.X.X
# server_port为服务端监听端口,bind_port
server_port = 7000
# 身份验证
token = MVMeRz6KfT4IDUgwZxb
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222
# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP
# local_port 为目标端口
# remote_port 为远程端口
[BMC浪潮]
type = tcp
local_ip = 192.168.7.100
local_port = 443
remote_port = 18080
[BMC浪潮Esxi8.0]
type = tcp
local_ip = 192.168.7.98
local_port = 443
remote_port = 18081
[运维中心视频监控]
type = tcp
local_ip = 192.168.3.100
local_port = 80
remote_port = 18082
[运维中心NAS_Web]
type = tcp
local_ip = 192.168.9.136
local_port = 80
remote_port = 18083
[运维中心Esxi8.0*4核8线程]
type = tcp
local_ip = 192.168.8.98
local_port = 443
remote_port = 18084
[运维Esxi8.0]
type = tcp
local_ip = 192.168.9.98
local_port = 443
remote_port = 18085
[运维中心File Browser]
type = tcp
local_ip = 192.168.9.100
local_port = 8282
remote_port = 18282
[RDP 张工PC1]
type = tcp
local_ip = 192.168.9.103
local_port = 3389
remote_port = 13389
[RDP 周工PC1]
type = tcp
local_ip = 192.168.6.100
local_port = 3389
remote_port = 23389
三, frpc配置自启动
步骤 1:配置自启动frpc客户端:
参考frp:https://gofrp.org/zh-cn/docs/reference/
使用 systemd官网配置详见:https://gofrp.org/zh-cn/docs/setup/systemd/
示例frp:https://gofrp.org/zh-cn/docs/examples/
在 Linux 系统下,使用 systemd
可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
以下是具体的操作步骤:
- 安装 systemd如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如
yum
(适用于 CentOS/RHEL)或apt
(适用于 Debian/Ubuntu)来安装它:
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
2.创建 frps.service 文件
使用文本编辑器 (如 vim) 在 /etc/systemd/system
目录下创建一个 frps.service
文件,用于配置 frps 服务。
$ sudo vim /etc/systemd/system/frps.service

写入内容:
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
笔者的安装目录在:/root/frp_0.65.0_linux_amd64,将 ExecStart
行改为:
ExecStart=/root/frp_0.65.0_linux_amd64/frpc -c /root/frp_0.65.0_linux_amd64/frpc.toml
[Unit]
Description=frp Client Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/root/frp_0.65.0_linux_amd64/frpc -c /root/frp_0.65.0_linux_amd64/frpc.toml
WorkingDirectory=/root/frp_0.65.0_linux_amd64
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
步骤 1:重新加载并启动服务
sudo systemctl daemon-reload
sudo systemctl restart frpc
sudo systemctl status frpc
sudo systemctl stop frpc
四, 问题汇总
1,frpc配置自启动提示如下错误:
Oct 18 08:00:08 zxb systemd[1]: Started frpc.service – frp Client Service.
Oct 18 08:00:08 zxb (frpc)[82110]: frpc.service: Failed to determine user credentials: No such process
Oct 18 08:00:08 zxb systemd[1]: frpc.service: Main process exited, code=exited, status=217/USER
Oct 18 08:00:08 zxb systemd[1]: frpc.service: Failed with result ‘exit-code’.
root@zxb:/etc/systemd/system# sudo systemctl daemon-reload
root@zxb:/etc/systemd/system# sudo systemctl start frpc
root@zxb:/etc/systemd/system# sudo systemctl status frpc
× frpc.service – frp Client Service
Loaded: loaded (/etc/systemd/system/frpc.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sat 2025-10-18 08:04:14 UTC; 1s ago
Duration: 5ms
Process: 91712 ExecStart=/root/frp_0.65.0_linux_amd64/frpc -c /root/frp_0.65.0_linux_amd64/frpc.toml (code=exited, status=217/USER)
Main PID: 91712 (code=exited, status=217/USER)
CPU: 874us
Oct 18 08:04:14 zxb systemd[1]: Started frpc.service – frp Client Service.
Oct 18 08:04:14 zxb (frpc)[91712]: frpc.service: Failed to determine user credentials: No such process
Oct 18 08:04:14 zxb systemd[1]: frpc.service: Main process exited, code=exited, status=217/USER
Oct 18 08:04:14 zxb systemd[1]: frpc.service: Failed with result ‘exit-code’.
root@zxb:/etc/systemd/system# pwd
/etc/systemd/system
root@zxb:/etc/systemd/system# sudo systemctl daemon-reload

- 首先检查并编辑 frpc 服务文件
- sudo nano /etc/systemd/system/frpc.service
- 确保服务文件内容类似这样
[Unit]
Description=frp Client Service
After=network.target
[Service]
Type=simple
# 使用具体的用户名而不是动态用户
User=your_username
Group=your_username
ExecStart=/path/to/frpc -c /path/to/frpc.toml #路径最容易出错的
WorkingDirectory=/path/to/frpc/directory
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
- 使用 root 用户运行
如果不想指定具体用户,可以修改为:
[Service]
Type=simple
User=root
ExecStart=/path/to/frpc -c /path/to/frpc.toml
WorkingDirectory=/path/to/frpc/directory
Restart=on-failure
RestartSec=5s
- 文件权限:确保 frpc 二进制文件有执行权限:
chmod +x /path/to/frpc
sudo chmod +x /root/frp_0.65.0_linux_amd64/frpc

注意事项
- 所有代理服务名称(name)都保留了中文,这在 TOML 中是允许的
- 确保文件编码为 UTF-8
- 如果遇到编码问题,可以将中文服务名改为英文
转换完成后,您的 frp 客户端就可以使用新的 TOML 格式配置文件正常工作了。
基于Docker部署内网穿透服务器FRP:https://www.hao0564.com/5527.html