首页 / 技术分享 /
FRP 内网穿透完全指南

FRP 内网穿透完全指南

GTP-5

2026-01-15
5 次浏览
0 条评论

FRP 是一个功能强大、配置灵活的内网穿透工具,希望这份文档能帮助您快速上手 FRP,实现安全高效的内网穿透!🚀

脚本工具
FRP
内网穿透
本地开发调试
分享:

简介

什么是 FRP

FRP (Fast Reverse Proxy) 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 的节点中转暴露到公网。

主要特性

  • ✅ 支持多种协议:TCP、UDP、HTTP、HTTPS、STCP、XTCP
  • ✅ 端口复用:多个服务可以共用同一个服务端端口
  • ✅ 加密与压缩:支持流量加密和压缩
  • ✅ 负载均衡:支持多个客户端负载均衡
  • ✅ 健康检查:自动检测后端服务健康状态
  • ✅ 插件系统:支持自定义插件扩展功能
  • ✅ 仪表盘:提供 Web 管理界面
  • ✅ 跨平台:支持 Windows、Linux、macOS、ARM 等

典型应用场景

  1. 远程办公 - 在家访问公司内网服务
  2. 微信开发 - 本地调试微信公众号/小程序
  3. 演示项目 - 向客户展示本地开发环境
  4. SSH 远程管理 - 远程访问家里的 NAS、树莓派
  5. 游戏联机 - 搭建局域网游戏服务器
  6. IoT 设备 - 远程访问物联网设备

工作原理

架构图

┌─────────────┐         ┌──────────────┐         ┌─────────────┐
│             │         │              │         │             │
│    客户端    │◄────────┤   公网服务器   ├────────►│   内网服务   │
│   (访问者)   │         │  (frps)      │         │  (frpc)     │
│             │         │              │         │             │
└─────────────┘         └──────────────┘         └─────────────┘
   公网访问                  中转服务器                本地服务

工作流程

  1. frps (服务端) 运行在具有公网 IP 的服务器上
  2. frpc (客户端) 运行在内网机器上
  3. frpc 主动连接 frps,建立长连接
  4. 当有公网请求到达 frps 时,通过已建立的连接转发给 frpc
  5. frpc 将请求转发给内网服务,并将响应原路返回

环境准备

服务端要求

  • 一台具有公网 IP 的服务器(VPS/云服务器)
  • 操作系统:Linux/Windows/macOS
  • 开放必要的端口(如 7000、80、443 等)
  • 推荐配置:1核 1GB 内存(小规模使用)

客户端要求

  • 内网机器(开发机/NAS/树莓派等)
  • 能够访问公网
  • 本地有需要穿透的服务

端口规划示例

端口 用途 说明
7000 frp 服务端口 frpc 与 frps 通信
7500 Dashboard Web 管理面板
80 HTTP HTTP 服务穿透
443 HTTPS HTTPS 服务穿透
6000-6100 TCP/UDP 自定义服务端口

安装部署

方法一:下载二进制文件(推荐)

1. 下载最新版本

访问 GitHub 发布页面:https://github.com/fatedier/frp/releases

# 服务端(假设是 Linux amd64)
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz

# 解压
tar -xzf frp_0.53.2_linux_amd64.tar. gz
mv frp_0.53.2_linux_amd64 frp
cd frp

# 查看文件
ls -la
# frpc     - 客户端可执行文件
# frps     - 服务端可执行文件
# frpc. ini - 客户端配置文件
# frps.ini - 服务端配置文件

2. 选择对应平台版本

# Linux ARM (树莓派)
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_arm64.tar.gz

# macOS
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_darwin_amd64.tar.gz

# Windows
# 下载 frp_0.53.2_windows_amd64.zip 并解压

方法二:使用 Docker

服务端 Docker 部署

# 创建配置目录
mkdir -p /opt/frp/conf

# 创建配置文件(见下文配置示例)
vim /opt/frp/conf/frps.ini

# 运行容器
docker run -d \
  --name frps \
  --restart=always \
  --network host \
  -v /opt/frp/conf/frps.ini:/etc/frp/frps.ini \
  snowdreamtech/frps:latest

客户端 Docker 部署

# 创建配置文件
mkdir -p ~/frp
vim ~/frp/frpc. ini

# 运行容器
docker run -d \
  --name frpc \
  --restart=always \
  --network host \
  -v ~/frp/frpc.ini:/etc/frp/frpc.ini \
  snowdreamtech/frpc:latest

方法三:从源码编译

# 安装 Go 环境 (需要 Go 1.20+)
# 参考:https://golang.org/doc/install

# 克隆仓库
git clone https://github.com/fatedier/frp.git
cd frp

# 编译
make

# 编译后的文件在 bin/ 目录下
ls bin/

配置详解

服务端配置 (frps.ini)

基础配置

[common]
# 监听地址,0.0.0.0 表示监听所有网卡
bind_addr = 0.0.0.0

# frp 服务端口,用于接收 frpc 连接
bind_port = 7000

# HTTP 服务端口
vhost_http_port = 80

# HTTPS 服务端口
vhost_https_port = 443

# Dashboard 管理面板配置
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your_secure_password

# 启用 Prometheus 监控
enable_prometheus = true

# 日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

# 身份验证令牌(重要!)
authentication_method = token
token = your_secret_token_here

# 心跳配置
heartbeat_timeout = 90

# 允许客户端绑定的端口范围
allow_ports = 6000-6100,8000-8100

高级配置

[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = your_secret_token

# 子域名配置
subdomain_host = frp.example.com

# 最大连接池大小
max_pool_count = 5

# TCP 多路复用
tcp_mux = true
tcp_mux_keepalive_interval = 60

# TLS 配置
tls_only = false
# tls_cert_file = /path/to/cert.pem
# tls_key_file = /path/to/key. pem

# 自定义 404 页面
# custom_404_page = /path/to/404.html

# 端口白名单(只允许这些端口)
# allow_ports = 2000-3000,3001,3003,4000-50000

# 限制单个客户端的最大连接数
max_ports_per_client = 0

# 启用 TLS 加密(客户端也需要配置)
# tls_enable = true

客户端配置 (frpc.ini)

基础配置

[common]
# 服务器地址(公网 IP 或域名)
server_addr = your_server_ip
server_port = 7000

# 身份验证令牌(必须与服务端一致)
authentication_method = token
token = your_secret_token

# 日志配置
log_file = /var/log/frpc. log
log_level = info
log_max_days = 3

# 客户端管理面板
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

# 连接池配置
pool_count = 5

# 心跳间隔
heartbeat_interval = 30
heartbeat_timeout = 90

# TCP 多路复用
tcp_mux = true

# 启动时自动连接
login_fail_exit = true

# 协议类型
protocol = tcp

HTTP 穿透配置

[common]
server_addr = your_server_ip
server_port = 7000
token = your_secret_token

# 穿透 Web 服务
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
# 自定义域名(需要域名解析到服务器 IP)
custom_domains = www.example.com

# 或者使用子域名
# subdomain = myapp
# 实际访问地址:myapp.frp.example.com

# HTTP 认证
http_user = user
http_pwd = password

# 自定义 Host Header
host_header_rewrite = localhost

# 添加自定义 Header
header_X-From-Where = frp

HTTPS 穿透配置

[https_web]
type = https
local_ip = 127.0.0.1
local_port = 443
custom_domains = secure.example.com

# 如果本地是 HTTP,通过 frps 加 TLS
# plugin = https2http
# plugin_local_addr = 127.0.0.1:80

TCP 穿透配置

# SSH 穿透
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 远程端口
remote_port = 6000

# 使用加密和压缩
use_encryption = true
use_compression = true

# MySQL 穿透
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6001
use_encryption = true

# RDP 远程桌面穿透
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6002

UDP 穿透配置

# DNS 服务穿透
[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6003

# 游戏服务器穿透
[game_server]
type = udp
local_ip = 127.0.0.1
local_port = 7777
remote_port = 7777

STCP 穿透配置(加密的点对点)

# 服务端(提供服务的一方)
[secret_ssh]
type = stcp
# 访问密钥
sk = secret_key
local_ip = 127.0.0.1
local_port = 22

# 客户端(访问服务的一方)需要配置 visitor

访问者配置:

[secret_ssh_visitor]
type = stcp
# 要访问的服务名称
server_name = secret_ssh
# 访问密钥(必须与服务端一致)
sk = secret_key
# 本地监听端口
bind_addr = 127.0.0.1
bind_port = 6000

负载均衡配置

# 服务器 1
[web01]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = www.example.com
group = web
group_key = 123456

# 服务器 2
[web02]
type = http
local_ip = 127.0.0.1
local_port = 8081
custom_domains = www.example.com
group = web
group_key = 123456

健康检查配置

[web_with_health_check]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = www.example.com

# 健康检查配置
health_check_type = http
health_check_url = /health
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

实战场景

场景 1: 穿透本地 Web 服务

需求

将本地运行在 localhost:3000 的 Web 应用暴露到公网。

服务端配置 (frps.ini)

[common]
bind_port = 7000
vhost_http_port = 80
token = my_secret_token_2024
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123

客户端配置 (frpc.ini)

[common]
server_addr = 1.2.3.4
server_port = 7000
token = my_secret_token_2024

[web_app]
type = http
local_ip = 127.0.0.1
local_port = 3000
custom_domains = myapp.example.com

启动服务

# 服务端
./frps -c frps.ini

# 客户端
./frpc -c frpc.ini

访问

浏览器访问:http://myapp.example.com

场景 2: SSH 远程访问内网服务器

需求

在任何地方通过公网服务器 SSH 到家里的 Linux 机器。

客户端配置 (frpc.ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = ssh_token_2024

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

连接方式

# 通过公网服务器连接
ssh -p 6000 user@your_vps_ip

# 或者在 ~/. ssh/config 中配置
Host home-server
    HostName your_vps_ip
    Port 6000
    User your_username

# 然后可以直接使用
ssh home-server

场景 3: 微信公众号/小程序本地调试

需求

微信要求回调地址必须是 HTTPS,本地开发需要穿透。

客户端配置 (frpc.ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = wechat_dev_token

[wechat_dev]
type = https
local_ip = 127.0.0.1
local_port = 3000
custom_domains = wechat.example.com

# 如果本地是 HTTP 服务
plugin = https2http
plugin_local_addr = 127.0.0.1:3000

# 添加自定义 Header
header_X-Real-IP = visitor

配置 HTTPS 证书

在服务端安装 Let's Encrypt 证书:

# 安装 certbot
sudo apt install certbot

# 申请证书
sudo certbot certonly --standalone -d wechat.example.com

# 证书路径
# /etc/letsencrypt/live/wechat.example. com/fullchain.pem
# /etc/letsencrypt/live/wechat.example.com/privkey.pem

配置 Nginx 反向代理(在 VPS 上):

server {
    listen 443 ssl http2;
    server_name wechat.example.com;

    ssl_certificate /etc/letsencrypt/live/wechat.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wechat.example.com/privkey. pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

场景 4: 群晖 NAS 远程访问

需求

远程访问家里的群晖 NAS (DSM 管理界面和文件服务)。

客户端配置 (frpc.ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = nas_token_2024

# DSM Web 管理界面
[dsm_http]
type = http
local_ip = 192.168.1.100
local_port = 5000
custom_domains = nas.example.com

# HTTPS 管理界面
[dsm_https]
type = https
local_ip = 192.168.1.100
local_port = 5001
custom_domains = nas.example.com

# SSH 访问
[nas_ssh]
type = tcp
local_ip = 192.168.1.100
local_port = 22
remote_port = 6022
use_encryption = true

# FTP 文件传输
[nas_ftp]
type = tcp
local_ip = 192.168.1.100
local_port = 21
remote_port = 6021

场景 5: 多服务统一穿透

需求

同时穿透多个内网服务(Web、数据库、RDP 等)。

客户端配置 (frpc. ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = multi_service_token
admin_addr = 127.0.0.1
admin_port = 7400

# 前端项目
[frontend]
type = http
local_ip = 127.0.0.1
local_port = 3000
custom_domains = frontend. example.com

# 后端 API
[backend]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = api.example.com

# MySQL 数据库
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6306
use_encryption = true

# Redis 缓存
[redis]
type = tcp
local_ip = 127.0.0.1
local_port = 6379
remote_port = 6380
use_encryption = true

# Windows 远程桌面
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6389

# 内网文件共享
[samba]
type = tcp
local_ip = 192.168.1.10
local_port = 445
remote_port = 6445

场景 6: 树莓派远程控制

需求

远程访问和控制家里的树莓派。

在树莓派上安装 frpc

# 下载 ARM 版本
cd ~
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_arm64.tar.gz
tar -xzf frp_0.53.2_linux_arm64.tar.gz
cd frp_0.53.2_linux_arm64

配置文件 (frpc.ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = raspberry_pi_token
log_file = /home/pi/frpc.log

# SSH 访问
[pi_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6022
use_encryption = true

# VNC 远程桌面
[pi_vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 6900

# Home Assistant (如果安装了)
[homeassistant]
type = http
local_ip = 127.0.0.1
local_port = 8123
custom_domains = home.example.com

设置开机自启动

创建系统服务文件:

sudo vim /etc/systemd/system/frpc.service

写入以下内容:

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=pi
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/frp_0.53.2_linux_arm64/frpc -c /home/pi/frp_0.53.2_linux_arm64/frpc.ini
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

启动服务:

# 重载配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start frpc

# 设置开机自启
sudo systemctl enable frpc

# 查看状态
sudo systemctl status frpc

场景 7: 游戏联机(我的世界服务器)

需求

和朋友一起玩局域网游戏服务器。

客户端配置 (frpc. ini)

[common]
server_addr = your_vps_ip
server_port = 7000
token = game_server_token

# Minecraft Java 版
[minecraft]
type = tcp
local_ip = 127.0.0.1
local_port = 25565
remote_port = 25565
use_compression = true

# Minecraft 基岩版
[minecraft_bedrock]
type = udp
local_ip = 127.0.0.1
local_port = 19132
remote_port = 19132

玩家连接:your_vps_ip:25565

调试技巧

1. 启用详细日志

[common]
log_level = trace  # 最详细的日志级别

日志级别:trace > debug > info > warn > error

2. 前台运行查看输出

# 不使用 -d 参数,直接在前台运行
./frps -c frps.ini

# 或客户端
./frpc -c frpc.ini

3. 检查端口占用

# Linux
netstat -tulnp | grep 7000
ss -tulnp | grep 7000
lsof -i: 7000

# 检查 frp 进程
ps aux | grep frp

4. 测试连接

# 测试服务端端口是否开放
telnet your_vps_ip 7000
nc -vz your_vps_ip 7000

# 测试 HTTP 穿透
curl -v http://your_domain.com
curl -H "Host: your_domain.com" http://your_vps_ip

# 测试 TCP 穿透
telnet your_vps_ip 6000

5. 使用 Dashboard 监控

访问服务端 Dashboard:

http://your_vps_ip:7500

可以查看:

  • 所有连接的客户端
  • 每个代理的流量统计
  • 在线状态
  • 实时日志

客户端 Admin 面板:

http://127.0.0.1:7400

6. 抓包分析

# 使用 tcpdump 抓包
sudo tcpdump -i any port 7000 -w frp.pcap

# 使用 Wireshark 分析
wireshark frp.pcap

7. 查看系统日志

# 查看服务日志
tail -f /var/log/frps.log
tail -f /var/log/frpc.log

# 查看 systemd 服务日志
journalctl -u frps -f
journalctl -u frpc -f

# 查看最近 100 行
journalctl -u frpc -n 100

8. 常用调试命令

# 验证配置文件语法
./frps verify -c frps.ini
./frpc verify -c frpc.ini

# 重载配置(需要配置 admin_port)
curl http://127.0.0.1:7400/api/reload

# 查看客户端状态
curl http://127.0.0.1:7400/api/status

# 查看代理配置
curl http://127.0.0.1:7400/api/config

9. 问题排查清单

#!/bin/bash
# frp_debug.sh - FRP 问题排查脚本

echo "=== FRP 调试信息收集 ==="

echo -e "\n1. 检查 frp 进程"
ps aux | grep frp | grep -v grep

echo -e "\n2. 检查端口监听"
netstat -tulnp | grep -E "7000|7500|80|443"

echo -e "\n3. 检查防火墙状态"
sudo ufw status
sudo iptables -L -n | grep -E "7000|80|443"

echo -e "\n4. 测试网络连接"
ping -c 3 your_vps_ip
telnet your_vps_ip 7000

echo -e "\n5. 检查配置文件"
cat frpc.ini | grep -v "^#" | grep -v "^$"

echo -e "\n6. 查看最近日志"
tail -20 /var/log/frpc.log

echo -e "\n7. 检查系统资源"
free -h
df -h
top -bn1 | head -20

echo "=== 调试信息收集完成 ==="

安全加固

1. 使用强密码和 Token

[common]
# 使用复杂的 token
token = $(openssl rand -base64 32)

# Dashboard 强密码
dashboard_pwd = $(openssl rand -base64 16)

2. 启用 TLS 加密

服务端配置:

[common]
bind_port = 7000
tls_only = true

客户端配置:

[common]
tls_enable = true

3. 限制端口范围

[common]
# 只允许特定端口
allow_ports = 6000-6100

# 限制每个客户端的端口数
max_ports_per_client = 5

4. IP 白名单

使用防火墙限制访问:

# 只允许特定 IP 访问 frp 服务端口
sudo ufw allow from 1.2.3.4 to any port 7000
sudo ufw allow from 5.6.7.8 to any port 7000
sudo ufw deny 7000

# 或使用 iptables
sudo iptables -A INPUT -p tcp -s 1.2.3.4 --dport 7000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 7000 -j DROP

5. HTTP 认证

[web]
type = http
local_port = 8080
custom_domains = app.example.com

# 添加 HTTP 基础认证
http_user = admin
http_pwd = secure_password_here

6. 使用 STCP 加密点对点

# 更安全的点对点连接
[secret_service]
type = stcp
sk = $(openssl rand -base64 32)
local_ip = 127.0.0.1
local_port = 22

7. 隐藏真实 IP

使用 Cloudflare 等 CDN 服务隐藏服务器真实 IP:

客户端 → Cloudflare CDN → frps 服务器 → frpc → 内网服务

8. 限流配置

服务端限制带宽:

# 使用 tc 命令限制带宽
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms

9. 定期更新

# 定期检查更新
curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep tag_name

# 自动更新脚本
#!/bin/bash
LATEST=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep tag_name | cut -d '"' -f 4)
CURRENT=$(./frps --version | awk '{print $3}')

if [ "$LATEST" != "$CURRENT" ]; then
    echo "New version available: $LATEST"
    # 执行更新逻辑
fi

性能优化

1. TCP 多路复用

[common]
tcp_mux = true
tcp_mux_keepalive_interval = 60

2. 连接池配置

[common]
# 客户端配置
pool_count = 5

# 服务端配置
max_pool_count = 10

3. 启用压缩

[web]
type = http
local_port = 8080
custom_domains = app.example.com
use_compression = true

4. 调整心跳间隔

[common]
# 减少心跳频率(适用于稳定网络)
heartbeat_interval = 60
heartbeat_timeout = 180

5. 系统优化

# 增加文件描述符限制
ulimit -n 65535

# 修改 /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

# 优化 TCP 参数
sudo sysctl -w net.core.rmem_max=26214400
sudo sysctl -w net.core.wmem_max=26214400
sudo sysctl -w net.ipv4.tcp_rmem='4096 87380 26214400'
sudo sysctl -w net.ipv4.tcp_wmem='4096 65536 26214400'

6. 使用本地 DNS 缓存

# 安装 dnsmasq
sudo apt install dnsmasq

# 配置本地 DNS
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

7. Nginx 反向代理优化

http {
    # 启用 HTTP/2
    server {
        listen 443 ssl http2;

        # 启用 gzip 压缩
        gzip on;
        gzip_types text/plain application/json;

        # 缓冲区优化
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;

        # 保持长连接
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

常见问题

Q1: 连接失败 "dial tcp: i/o timeout"

原因

  • 服务端防火墙没有开放端口
  • 服务端未启动
  • 网络不通

解决

# 检查防火墙
sudo ufw allow 7000
sudo firewall-cmd --add-port=7000/tcp --permanent

# 检查服务状态
systemctl status frps

# 测试连接
telnet server_ip 7000

Q2: "authorization failed"

原因:token 不匹配

解决: 确保服务端和客户端的 token 完全一致。

Q3: 访问域名 404

原因

  • 域名没有解析到服务器
  • vhost_http_port 未配置
  • custom_domains 配置错误

解决

# 检查域名解析
nslookup your_domain.com
dig your_domain.com

# 检查服务端配置
grep vhost_http_port frps.ini

# 测试
curl -H "Host: your_domain.com" http://server_ip

Q4: 端口已被占用

错误信息bind: address already in use

解决

# 查找占用端口的进程
sudo lsof -i: 7000
sudo netstat -tulnp | grep 7000

# 杀死进程
sudo kill -9 PID

# 或更换端口

Q5: Dashboard 无法访问

解决

# 检查配置
[common]
dashboard_addr = 0.0.0.0  # 不要用 127.0.0.1
dashboard_port = 7500

# 开放防火墙
sudo ufw allow 7500

Q6: 频繁断线重连

原因

  • 网络不稳定
  • 心跳超时设置过短
  • 服务器资源不足

解决

[common]
# 增加超时时间
heartbeat_timeout = 180

# 启用 TCP keepalive
tcp_mux = true

Q7: 文件上传/下载速度慢

解决

# 启用压缩
use_compression = true

# 增加连接池
pool_count = 10

# 优化 TCP
tcp_mux = true

Q8: HTTPS 证书问题

解决

# 使用 Let's Encrypt 申请免费证书
sudo certbot certonly --standalone -d your_domain.com

# 或者使用 plugin 插件
[web]
type = https
plugin = https2http
plugin_local_addr = 127.0.0.1:80

Q9: 穿透后无法访问本地服务

检查

# 确认本地服务正在运行
netstat -tuln | grep 8080
curl http://localhost:8080

# 检查防火墙
sudo ufw status

# 查看 frpc 日志
tail -f /var/log/frpc.log

Q10: 高并发下性能问题

优化

# 增加连接池
pool_count = 20
max_pool_count = 50

# 启用 TCP 多路复用
tcp_mux = true

# 系统优化
ulimit -n 65535

生产环境部署建议

1. 使用 Systemd 管理服务

服务端 (/etc/systemd/system/frps.service):

[Unit]
Description=Frp Server Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

客户端 (/etc/systemd/system/frpc.service):

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=frp
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=65536

[Install]
WantedBy=multi-user. target

启动服务:

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

2. 日志轮转

创建 /etc/logrotate.d/frp:

/var/log/frps.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    create 0644 root root
    postrotate
        systemctl reload frps > /dev/null 2>&1 || true
    endscript
}

/var/log/frpc. log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    create 0644 frp frp
    postrotate
        systemctl reload frpc > /dev/null 2>&1 || true
    endscript
}

3. 监控和告警

使用 Prometheus + Grafana 监控:

# prometheus.yml
scrape_configs:
  - job_name: 'frps'
    static_configs:
      - targets: ['localhost:7500']

4. 备份配置

#!/bin/bash
# backup_frp_config.sh

BACKUP_DIR="/backup/frp"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# 备份配置文件
cp /opt/frp/frps.ini $BACKUP_DIR/frps_$DATE.ini
cp /etc/frp/frpc.ini $BACKUP_DIR/frpc_$DATE.ini

# 保留最近 30 天的备份
find $BACKUP_DIR -name "*. ini" -mtime +30 -delete

echo "Backup completed:  $DATE"

5. 高可用部署

使用多个 frps 服务器 + Keepalived:

客户端 → VIP (Keepalived) → frps-master / frps-backup

相关资源

总结

FRP 是一个功能强大、配置灵活的内网穿透工具,适用于各种场景。掌握以下要点:

核心概念:理解 frps/frpc 的工作原理 ✅ 安全第一:使用强 token、启用加密、限制访问 ✅ 合理配置:根据实际需求选择合适的代理类型 ✅ 性能优化:启用 TCP 多路复用、连接池、压缩 ✅ 稳定运行:使用 systemd 管理、配置日志轮转、监控告警 ✅ 问题排查:善用日志、Dashboard、抓包工具

评论区 (0)

你需要先 登录 后才能发表评论。
还没有人评论,赶快成为第一个吧。

关于云信益站

云信益站是由荣县人创办的公益网站,集家乡宣传、技术分享与开发服务于一体。在这里,您可以探索荣县的美景、美食与历史,查询实用本地信息,学习软件开发技术。让我们以数字技术连接桑梓,赋能家乡发展。

联系站长

关注我们

© 2025 云信益站. 保留所有权利.