一、架构拓扑
[内网主机] <-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
防端口耗尽攻击