☰
frps反向代理工具:从安装配置到生产实践
2026/11/2 8:08:41 网站建设 项目流程

1. 项目概述

frps(Fast Reverse Proxy Server)是一款高性能的反向代理工具,主要用于将内网服务安全地暴露到公网。它能够穿透NAT和防火墙限制,支持TCP、UDP、HTTP和HTTPS等多种协议。在实际应用中,frps通常部署在具有公网IP的服务器上,与内网机器上的frpc客户端配合使用。

这个工具特别适合以下场景:

  • 开发调试时需要临时暴露本地服务给外部访问
  • 企业内网应用需要提供远程访问能力
  • 物联网设备需要从外网进行管理
  • 需要绕过网络限制建立点对点连接

2. 环境准备与安装

2.1 系统要求

frps可以运行在大多数Linux发行版上,建议使用以下环境:

  • 操作系统:Ubuntu 20.04+/CentOS 7+
  • 内存:至少512MB
  • 存储:至少100MB可用空间
  • 网络:需要开放7000等端口(后续可配置)

2.2 下载frps

首先通过wget获取最新版本的frps:

wget https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz

解压下载的文件:

tar -zxvf frp_0.69.1_linux_amd64.tar.gz cd frp_0.69.1_linux_amd64

解压后会看到以下重要文件:

  • frps:服务端主程序
  • frps.toml:服务端配置文件
  • frps_full.toml:完整配置示例

3. 基础配置与启动

3.1 最小化配置

创建或编辑frps.toml配置文件:

# frps.toml基础配置 bindPort = 7000 auth.token = "your_secure_token_here" # 启用仪表盘 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin"

关键参数说明:

  • bindPort:客户端连接端口,默认7000
  • auth.token:客户端认证令牌,建议使用强密码
  • webServer:管理仪表盘配置

3.2 启动frps服务

直接运行方式(适合测试):

./frps -c ./frps.toml

生产环境建议使用systemd管理:

sudo tee /etc/systemd/system/frps.service <<EOF [Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/path/to/frps -c /path/to/frps.toml [Install] WantedBy=multi-user.target EOF

然后启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable frps sudo systemctl start frps

4. 高级配置详解

4.1 安全加固配置

# 增强安全性配置 transport.tls.enable = true transport.tls.force = true auth.method = "token" auth.token = "complex_password_here" auth.additionalScopes = ["HeartBeats", "NewWorkConns"] # IP访问限制 webServer.addr = "127.0.0.1" # 限制仪表盘只能本地访问

安全建议:

  1. 总是启用TLS加密
  2. 使用强密码并定期更换
  3. 限制管理界面访问IP
  4. 考虑使用防火墙规则限制访问

4.2 端口管理与限制

# 端口管理配置 allowPorts = [ { start = 10000, end = 20000 }, # 只允许使用10000-20000端口 { single = 8080 }, { single = 8443 } ] # 端口复用配置 vhostHTTPPort = 80 vhostHTTPSPort = 443

端口管理技巧:

  • 生产环境应该严格限制可用端口范围
  • HTTP/HTTPS服务可以使用80/443端口复用
  • 避免使用常见服务端口(如22,3306等)

4.3 性能优化配置

# 性能优化配置 transport.tcpMux = true transport.poolCount = 5 transport.useEncryption = true transport.useCompression = true # KCP协议支持(高延迟网络适用) kcpBindPort = 7000

性能调优建议:

  • 高并发场景增加连接池大小
  • 移动网络可启用KCP协议
  • 内网环境可以关闭压缩减少CPU消耗

5. 客户端连接配置

5.1 基础客户端配置

对应frpc.toml配置示例:

serverAddr = "your_server_ip" serverPort = 7000 auth.token = "your_secure_token_here" [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000

5.2 多种代理类型示例

HTTP服务代理:

[[proxies]] name = "web" type = "http" localPort = 8080 customDomains = ["example.yourdomain.com"]

HTTPS服务代理:

[[proxies]] name = "secure-web" type = "https" localPort = 8443 customDomains = ["secure.yourdomain.com"]

UDP服务代理(如DNS):

[[proxies]] name = "dns" type = "udp" localIP = "127.0.0.1" localPort = 53 remotePort = 5353

6. 监控与维护

6.1 使用内置仪表盘

访问http://server_ip:7500可以查看:

  • 客户端连接状态
  • 代理流量统计
  • 系统资源使用情况

6.2 Prometheus监控集成

启用Prometheus支持:

# frps.toml中追加 webServer.enablePrometheus = true

然后可以通过/metrics端点获取监控数据。

6.3 日志管理

建议的日志配置:

# frps.toml中配置 log.to = "file" log.level = "info" log.maxDays = 7

日志分析技巧:

  • 关注"login failed"消息排查认证问题
  • "new proxy"消息确认代理创建
  • "port already used"错误检查端口冲突

7. 常见问题排查

7.1 连接问题排查步骤

  1. 检查防火墙设置:

    sudo ufw status sudo iptables -L -n
  2. 验证端口连通性:

    telnet your_server_ip 7000 nc -zv your_server_ip 7000
  3. 检查服务状态:

    journalctl -u frps -f

7.2 性能问题优化

高负载下可能出现的问题:

  • 增加transport.poolCount
  • 启用transport.useCompression
  • 考虑升级服务器配置
  • 分布式部署多个frps实例

7.3 安全性问题处理

安全事件响应流程:

  1. 立即更改auth.token
  2. 检查/var/log/frps.log异常登录
  3. 审查开放的代理服务
  4. 考虑启用IP白名单

8. 生产环境最佳实践

8.1 高可用部署方案

建议的架构:

[负载均衡器] / | \ [frps-1] [frps-2] [frps-3]

每个frps实例使用相同配置,客户端配置多个serverAddr实现自动故障转移。

8.2 自动化部署脚本

使用Ansible部署示例:

- hosts: frp_servers tasks: - name: Download frp get_url: url: https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz dest: /tmp/frp.tar.gz - name: Extract frp unarchive: src: /tmp/frp.tar.gz dest: /opt/ remote_src: yes - name: Deploy config template: src: frps.toml.j2 dest: /opt/frp_0.69.1_linux_amd64/frps.toml - name: Install systemd service template: src: frps.service.j2 dest: /etc/systemd/system/frps.service

8.3 备份与恢复策略

关键数据备份:

  1. 配置文件备份:

    cp /path/to/frps.toml /backup/frps_$(date +%Y%m%d).toml
  2. TLS证书备份(如果使用):

    tar -czvf frps_certs_$(date +%Y%m%d).tar.gz /path/to/certs/
  3. 定期验证备份可用性

9. 进阶功能探索

9.1 P2P穿透模式

xtcp配置示例(服务端无需特殊配置):

# frpc.toml [[proxies]] name = "p2p_ssh" type = "xtcp" secretKey = "your_secret" localIP = "127.0.0.1" localPort = 22 # 访问端配置 [[visitors]] name = "p2p_visitor" type = "xtcp" serverName = "p2p_ssh" secretKey = "your_secret" bindAddr = "127.0.0.1" bindPort = 6000

P2P使用限制:

  • 依赖NAT类型,可能无法在所有网络环境下工作
  • 需要保持frps在线作为中继备用

9.2 插件系统使用

静态文件服务器插件示例:

[[proxies]] name = "static_file" type = "tcp" remotePort = 6000 [proxies.plugin] type = "static_file" localPath = "/var/www/files" stripPrefix = "static" httpUser = "user" httpPassword = "pass"

9.3 虚拟网络功能

Alpha阶段的VirtualNet功能:

# frps.toml featureGates = { VirtualNet = true } # frpc.toml featureGates = { VirtualNet = true } [[virtualNetworks]] name = "office_network" cidr = "192.168.100.0/24"

10. 版本升级与迁移

10.1 版本升级步骤

  1. 备份现有配置和证书
  2. 下载新版本并验证校验和
  3. 停止旧版本服务
  4. 替换二进制文件
  5. 检查配置变更(特别是重大版本更新)
  6. 启动新版本服务
  7. 监控日志确认正常运行

10.2 配置迁移注意事项

从旧版本迁移时特别注意:

  • INI格式已弃用,建议转为TOML
  • 认证机制可能变化
  • TLS默认开启可能需要调整
  • 插件接口可能有变更

11. 资源监控与调优

11.1 系统资源监控

关键监控指标:

  • 内存使用:frps内存占用与连接数成正比
  • CPU使用:加密/压缩操作会增加CPU负载
  • 网络带宽:特别是流量型应用
  • 文件描述符:大量连接可能耗尽限制

设置监控告警示例:

# 监控frps内存使用 process_resident_memory_bytes{job="frps"} > 1GB # 监控活跃连接数 frps_proxy_connections > 500

11.2 性能调优参数

根据负载调整的参数:

# 高并发调优 transport.maxPoolCount = 100 transport.tcpMuxKeepaliveInterval = 60 # 大流量调优 transport.bandwidthLimit = "10MB" transport.bandwidthLimitMode = "server"

12. 安全审计与加固

12.1 定期安全检查清单

  1. 认证令牌是否足够复杂
  2. 是否所有代理都必要
  3. TLS配置是否正确启用
  4. 仪表盘是否有限制访问
  5. 系统漏洞是否已修补

12.2 入侵检测配置

示例fail2ban配置:

[frp-auth] enabled = true filter = frp-auth logpath = /var/log/frps.log maxretry = 3 findtime = 3600 bantime = 86400

对应的filter规则:

[Definition] failregex = ^.*login failed: .* from <HOST>.*$ ignoreregex =

13. 容器化部署方案

13.1 Docker运行示例

基本运行命令:

docker run -d --name frps \ -p 7000:7000 \ -p 7500:7500 \ -v /path/to/frps.toml:/etc/frp/frps.toml \ snowdreamtech/frps

13.2 Kubernetes部署

示例Deployment配置:

apiVersion: apps/v1 kind: Deployment metadata: name: frps spec: replicas: 3 selector: matchLabels: app: frps template: metadata: labels: app: frps spec: containers: - name: frps image: snowdreamtech/frps ports: - containerPort: 7000 - containerPort: 7500 volumeMounts: - name: config mountPath: /etc/frp volumes: - name: config configMap: name: frps-config

14. 网络架构设计

14.1 企业级部署架构

典型的三层架构:

[公网LB] -> [frps集群] -> [区域frpc] -> [本地服务]

设计要点:

  • 区域划分降低延迟
  • 层级化权限管理
  • 集中监控与日志收集

14.2 混合云连接方案

通过frp实现跨云连接:

  1. 在中心云部署frps
  2. 各分支机构/私有云运行frpc
  3. 建立站点到站点的虚拟网络
  4. 统一身份认证与授权

15. 故障模拟与演练

15.1 常见故障场景

  1. 网络分区测试
  2. 高负载下的服务降级
  3. 证书过期场景
  4. 配置错误恢复
  5. 节点故障转移

15.2 混沌工程实践

使用chaosblade进行测试:

# 模拟网络延迟 blade create network delay --time 3000 --interface eth0 --local-port 7000 # 模拟进程退出 blade create process kill --process frps

16. 周边生态集成

16.1 与CI/CD集成

在流水线中动态创建代理:

steps: - name: Create temp proxy run: | ./frpc tcp --proxy_name "temp-$BUILD_ID" \ --local_ip 127.0.0.1 --local_port 8080 \ --remote_port 0 --server_addr frps.example.com # 获取分配的端口 PORT=$(grep -oP 'remote_port \K\d+' frpc.log) echo "EXPOSE_PORT=$PORT" >> $GITHUB_ENV - name: Run tests run: | curl http://frps.example.com:$EXPOSE_PORT/test

16.2 与监控系统集成

Prometheus监控配置示例:

scrape_configs: - job_name: 'frps' static_configs: - targets: ['frps:7500'] metrics_path: '/metrics'

Grafana仪表盘导入ID:11062

17. 性能基准测试

17.1 测试环境配置

测试工具:wrk/siege 测试场景:

  • 100并发TCP连接
  • 1MB文件HTTP传输
  • 混合协议负载

17.2 优化前后对比

典型优化效果:

指标优化前优化后
吞吐量800 req/s2200 req/s
延迟45ms18ms
CPU使用85%60%

18. 成本分析与优化

18.1 云部署成本估算

AWS示例成本(us-east-1):

  • t3.medium实例:$0.0416/hr
  • 1TB出站流量:$90
  • 总月成本:约$120

18.2 成本优化策略

  1. 使用预留实例降低30%成本
  2. 压缩流量减少带宽费用
  3. 自动伸缩按需扩容
  4. 选择性价比高的区域

19. 替代方案比较

19.1 同类工具对比

特性frpngrokCloudflare Tunnel
自托管✓✗✗
协议支持多HTTP(S)HTTP(S)
P2P支持✓✗✗
成本免费付费免费/付费

19.2 选型建议

选择frp当:

  • 需要完全控制基础设施
  • 支持多种协议
  • 需要高性能内网穿透
  • 有定制化需求

20. 未来发展与路线图

根据社区动态关注:

  1. v2版本的重构进展
  2. QUIC协议的深度集成
  3. 虚拟网络功能完善
  4. 管理API的增强
  5. 更细粒度的权限控制

建议定期查看GitHub项目的里程碑和路线图,参与社区讨论贡献需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询