一、架构拓扑

[内网主机] <-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                 # 日志保留周期

部署规范

  1. 密钥管理:使用 openssl rand -base64 32 生成高强度token
  2. 端口规划:非测试环境避免使用知名端口(80/443/22)
  3. 权限隔离:建议创建专用系统用户运行 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"

六、安全加固清单

  1. 传输层加密:启用 tls_enable = true
  2. 端口访问策略:iptables 限制源IP范围
  3. 审计日志:记录客户端认证事件
  4. 熔断机制:配置 max_ports_per_client 防端口耗尽攻击

「低效的勤奋是懒惰的遮羞布,粗糙的完成是执行的绊脚石」