一、架构拓扑
[内网主机] <-TCP隧道-> [公网中继服务器] <-公网访问-> [终端用户]
│ │
└─ 本地服务(SSH/Web/DB) └─ 端口映射(8022/8080/3306)
二、服务端配置 (frps.ini)
[common] bind_port = 8000 # 控制通道端口(建议>1024) token = 7g$2Fk!9P@zL*vQ # AES-256加密传输密钥 max_pool_count = 100 # 最大连接池容量 log_level = info # 日志级别(debug/info/warn/error) log_max_days = 7 # 日志保留周期
部署规范:
- 密钥管理:使用
openssl rand -base64 32
生成高强度token - 端口规划:非测试环境避免使用知名端口(80/443/22)
- 权限隔离:建议创建专用系统用户运行
chown -R frpuser:frpgroup /opt/frp
三、客户端配置 (frpc.ini)
[common] server_addr = 203.0.113.5 # 服务端公网IP/Domain server_port = 8000 token = 7g$2Fk!9P@zL*vQ # 与服务端严格一致 [ssh_tunnel] # 服务标识(业务命名规范) type = tcp local_ip = 127.0.0.1 # 绑定本地地址 local_port = 22 # 本地服务端口 remote_port = 22002 # 外网暴露端口(NAT穿透) [web_console] # HTTP服务示例 type = http # 应用层协议类型 local_port = 8080 custom_domains = console.xxx.com # 需配置DNS解析
配置原则:
- 端口映射策略:采用端口偏移方案(如基础端口 20000 + 服务ID)
- 协议选择矩阵:
服务类型 | 适用协议 | 优势 |
---|---|---|
SSH/RDP | TCP | 全双工通信 |
Web服务 | HTTP | 支持虚拟主机/SSL卸载 |
数据库 | TCP | 保持长连接特性 |
四、Systemd 服务管理
服务端单元文件 (/usr/lib/systemd/system/frps.service)
[Unit]
Description=fraps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/bin/bash -c '/var/local/frps/frps -c /var/local/frs/frps.ini'
[Install]
WantedBy=multi-user.target
客户端守护进程优化:
# 内存限制(防止内存泄漏) sudo systemctl set-property frpc.service MemoryMax=512M # CPU亲和性(多核服务器) sudo systemctl set-property frpc.service CPUAffinity=0-1
五、运维监控
关键指标采集:
# 连接状态检查 frpc status -c frpc.ini --json | jq '.status.stats' # 性能监控命令 sudo ss -tunp | grep frp sudo lsof -i :8000
ELK日志集成方案:
# Filebeat 配置片段 - module: frp log: input: paths: - /var/log/frp/*.log process: pipeline: "frp_pipeline"
六、安全加固清单
- 传输层加密:启用
tls_enable = true
- 端口访问策略:iptables 限制源IP范围
- 审计日志:记录客户端认证事件
- 熔断机制:配置
max_ports_per_client
防端口耗尽攻击