剪藏#剪藏#计算机低手
内网穿透系列八:Docker快速搭建frp服务,实现安全稳定的内网穿透服务
2025 年 7 月 2 日 约 1 分钟


一、简介
-
• frp是一个由go语言开发的简单、高效的内网穿透工具
-
• frp 支持多种代理类型,包括TCP、UDP、HTTP、HTTPS等等,为不同场景需求提供丰富的解决方案
-
• 支持流量加密、压缩,身份认证,代理限速,负载均衡等众多能力,同时提供一个代理连接实时流量可视化面板
-
• 开源地址参考:https://github.com/fatedier/frp,官方使用文档:https://gofrp.org/zh-cn/docs/
-
• 基本架构与工作原理可参考下图:
二、安装与使用
1. 服务端搭建
-
• 需要准备一台具有公网IP的服务器
-
• 提前安装好Docker、docker-compose软件环境
-
• 新建docker-compose.yml配置文件,内容如下:
JAVASCRIPT
services:
frps:
image: snowdreamtech/frps:0.63
container_name: frps
restart: always
volumes:
- ./frps.toml:/etc/frp/frps.toml
#开启主机网络模式,可以任意使用主机端口,安全起见,也可以注释这个,开启下面的ports配置的主机端口映射,以限制主机端口的使用
network_mode: host
#ports:
#- "7000:7000" # 服务端通信端口
#- "8080:8080" # HTTP 端口,
#- "7500:7500" # Dashboard 端口
#- "6000-6100:6000-6100" # 额外增加的端口,供其他tcp/udp等协议使用- • 在docker-compose.yml同目录下,再新建frp服务端的配置文件frps.toml,配置如下:
JAVASCRIPT
# 客户端连接服务端的端口
bindPort = 7000
# 客户端连接校验密码,部署时需要自行改成复杂的密码
auth.token = "P<#.nF_R"
# 开启web服务的端口,客户端反代http服务时,需要使用这个端口,然后根据客户端绑定的域名来进行区分
vhostHTTPPort = 8080
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
# dashboard页面端口
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空,部署时需要自行改成复杂的登录信息
webServer.user = "admin"
webServer.password = "123456"
# 表示 server 端只接受 TLS 连接的客户端,新版本默认就是开启的,开启后,会自动使用自签证书或自定义配置的证书进行通信流量加密
transport.tls.force = true- • 一键启动frp服务端
JAVASCRIPT
docker-compose up -d
2. 客户端搭建
- • 同样需要Docker环境,新建docker-compose.yml配置文件,内容如下:
JAVASCRIPT
services:
frpc:
image: snowdreamtech/frpc:0.63
container_name: frpc
restart: always
volumes:
- ./frpc.toml:/etc/frp/frpc.toml- • 需要新建frp客户端配置文件frpc.toml,配置如下:
JAVASCRIPT
#这里连接服务端的配置
serverAddr = "你的公网IP或者域名"
serverPort = 7000
auth.token = "P<#.nF_R"
#http服务穿透1,如果域名已经指向公网服务器,可以配置域名访问,如下可访问:http://npm.vds.luxi.free.hr:8080/
[[proxies]]
name = "web_test1"
type = "http"
localIp = "172.17.0.1"
localPort = 9000
customDomains = ["npm.vds.luxi.free.hr"]
#http/tcp服务穿透2,可以自定义公网端口,如下配置可以访问:http://公网ip:9999/
[[proxies]]
name = "web_test2"
type = "tcp"
localIP = "172.17.0.1"
localPort = 9000
remotePort = 9999
#mysql服务穿透示例,可以连接公网6033端口访问内网中mysql服务
[[proxies]]
name = "mysql_test"
type = "tcp"
localIP = "172.17.0.1"
localPort = 3306
remotePort = 6033- • 一键启动frp客户端
JAVASCRIPT
docker-compose up -d
3. C/S都部署完之后,就可以通过公网访问内网中的服务
三、总结
-
• frp是一款比较流行的内网穿透工具,玩法较多,适应各种内网穿透场景,性能不错
-
• 没有提供可视化的管理界面,每次增加内网服务代理都需要手动编辑客户端配置,并且重启客户端服务,使用者需要有一定的开发运维能力

推荐一下个人网站(本文内容如有错漏只会在个人博客更新):
