1. 理解frps与frpc的基本概念
在开始搭建之前,我们需要先明确frps和frpc分别是什么以及它们之间的关系。frps(Fast Reverse Proxy Server)是内网穿透服务端的核心组件,而frpc(Fast Reverse Proxy Client)则是客户端组件。它们共同构成了一个完整的内网穿透解决方案。
frps通常部署在具有公网IP的服务器上,负责接收外部请求并将其转发到内网的frpc客户端。frpc则运行在内网环境中,与frps建立连接,将内网服务暴露给公网访问。这种架构特别适合以下场景:
- 开发测试环境需要临时对外提供服务
- 家庭NAS需要远程访问
- 企业内部系统需要安全地对外提供访问
注意:frp项目完全开源且遵守MIT协议,但使用时仍需注意网络安全问题,避免将敏感服务直接暴露在公网。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CentOS 7.9环境准备
2.1 系统基础配置
在开始安装frp之前,我们需要确保两台CentOS 7.9服务器都已完成基础配置:
- 更新系统软件包:
bash复制yum update -y && yum upgrade -y
- 安装常用工具:
bash复制yum install -y wget curl vim net-tools
- 检查防火墙状态并放行必要端口:
bash复制systemctl status firewalld
firewall-cmd --permanent --add-port=7000/tcp # frps默认控制端口
firewall-cmd --permanent --add-port=7500/tcp # frps仪表板端口
firewall-cmd --reload
2.2 时间同步配置
确保两台服务器时间同步非常重要,否则可能导致连接问题:
bash复制yum install -y ntpdate
ntpdate pool.ntp.org
hwclock --systohc
2.3 创建专用用户
为安全考虑,建议创建专用用户运行frp服务:
bash复制useradd -s /sbin/nologin -M frpuser
3. frps服务端安装与配置
3.1 下载并安装frps
- 访问frp GitHub发布页获取最新版本(当前稳定版为0.61.1):
bash复制wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
- 解压并移动到合适位置:
bash复制tar -zxvf frp_0.61.1_linux_amd64.tar.gz
mv frp_0.61.1_linux_amd64 /usr/local/frp
cd /usr/local/frp
- 清理不需要的文件(保留frps相关):
bash复制rm -f frpc*
3.2 配置frps.ini
编辑配置文件/usr/local/frp/frps.ini:
ini复制[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your_strong_password
token = your_secure_token
max_pool_count = 50
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
关键参数说明:
bind_port:frpc连接使用的端口dashboard_port:Web管理界面端口token:客户端连接认证密钥,建议使用复杂字符串max_pool_count:最大连接池大小,根据服务器性能调整
3.3 创建systemd服务
创建服务文件/etc/systemd/system/frps.service:
ini复制[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=frpuser
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
bash复制systemctl daemon-reload
systemctl start frps
systemctl enable frps
4. frpc客户端安装与配置
4.1 下载并安装frpc
在客户端服务器执行:
bash复制wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
mv frp_0.61.1_linux_amd64 /usr/local/frp
cd /usr/local/frp
rm -f frps* # 删除服务端文件
4.2 配置frpc.ini
编辑/usr/local/frp/frpc.ini配置文件:
ini复制[common]
server_addr = your_server_ip
server_port = 7000
token = your_secure_token # 必须与服务端一致
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin_password
log_file = /var/log/frpc.log
log_level = info
log_max_days = 3
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = yourdomain.com
配置说明:
server_addr:frps服务器的公网IPtoken:必须与服务端配置一致[ssh]部分:将内网SSH服务映射到公网6000端口[web]部分:将内网Web服务通过域名对外暴露
4.3 创建systemd服务
创建/etc/systemd/system/frpc.service:
ini复制[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=frpuser
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
[Install]
WantedBy=multi-user.target
启动服务:
bash复制systemctl daemon-reload
systemctl start frpc
systemctl enable frpc
5. 高级配置与优化
5.1 多客户端配置
当需要连接多个frpc客户端时,可以在frps.ini中添加:
ini复制[common]
...
max_pool_count = 100
allow_ports = 6000-6010,8000-8100
然后在各客户端的frpc.ini中使用不同的remote_port范围。
5.2 负载均衡配置
对于高可用场景,可以配置多个frps服务器:
ini复制[common]
server_addr = server1_ip,server2_ip
server_port = 7000
...
health_check_type = tcp
health_check_interval_s = 10
5.3 安全加固建议
- 修改默认端口:避免使用7000/7500等常见端口
- 启用TLS加密:
ini复制[common]
tls_enable = true
- 限制客户端IP:
ini复制[common]
allow_ports = 6000-6010
privilege_allow_ips = 192.168.1.100
6. 常见问题排查
6.1 连接失败问题
检查步骤:
- 确认服务端防火墙已放行端口
- 检查frps和frpc的token是否一致
- 查看日志文件获取详细错误信息:
bash复制journalctl -u frps -f
tail -f /var/log/frpc.log
6.2 性能优化
如果遇到性能瓶颈,可以考虑:
- 调整连接池大小:
ini复制[common]
max_pool_count = 200
- 启用压缩:
ini复制[common]
tcp_mux = true
6.3 服务监控
建议配置监控检查frp服务状态:
- 使用systemctl status检查服务运行状态
- 通过dashboard监控连接情况
- 设置日志轮转防止日志过大:
bash复制vim /etc/logrotate.d/frp
7. 实际应用案例
7.1 远程开发环境搭建
配置示例:
ini复制[vscode]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8081
这样可以通过公网IP:8081访问内网的VS Code Web版。
7.2 家庭NAS访问
ini复制[nas_web]
type = http
local_ip = 192.168.1.100
local_port = 5000
custom_domains = nas.yourdomain.com
[nas_file]
type = tcp
local_ip = 192.168.1.100
local_port = 22
remote_port = 6022
7.3 数据库临时访问
ini复制[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3307
use_encryption = true
use_compression = true
8. 维护与管理技巧
- 版本升级步骤:
bash复制systemctl stop frps
mv /usr/local/frp /usr/local/frp_backup
# 下载新版本并解压
cp /usr/local/frp_backup/frps.ini /usr/local/frp/
systemctl start frps
- 配置文件备份:
bash复制crontab -e
# 添加每天备份
0 3 * * * tar -zcvf /backup/frp_config_$(date +\%Y\%m\%d).tar.gz /usr/local/frp/*.ini
- 日志分析技巧:
bash复制# 查找错误日志
grep -i error /var/log/frps.log
# 统计连接数
grep "new proxy" /var/log/frps.log | wc -l
在长期使用过程中,我发现定期检查dashboard的连接情况非常重要,可以帮助及时发现异常连接。另外,对于生产环境,建议至少每季度更新一次frp版本,以获取最新的安全补丁和性能改进。
