跳转到内容
KN郑某某

FRP 内网穿透配置指南(2026 更新)

在 Linux 服务器上安装和配置 FRP 内网穿透,包含最新版本和安全实践。

安装手册 1 分钟阅读

内容保鲜:本文已更新至 FRP v0.61.0,配置格式改为 TOML,移除了已 EOL 的 CentOS 7,新增安全加固和 systemd 服务配置。

FRP(Fast Reverse Proxy)是一款高性能的反向代理工具,用于内网穿透。

发行版版本状态
Ubuntu22.04 / 24.04 LTS✅ 推荐
Debian12 / 13✅ 推荐
Rocky Linux9✅ CentOS 替代
AlmaLinux9✅ CentOS 替代
CentOS7❌ 已 EOL(2024-06-30)
CentOS8❌ 已 EOL

Terminal window
# Ubuntu/Debian
sudo apt update
sudo apt install -y wget tar
# Rocky/AlmaLinux/CentOS 9
sudo dnf install -y wget tar

假设公网服务器 IP 为 100.100.100.1

Terminal window
# 创建安装目录
sudo mkdir -p /opt/frp
cd /opt/frp
# 下载最新版本(请检查官网获取最新版本号)
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64

创建配置文件 frps.toml

Terminal window
sudo vim /opt/frp/frps.toml

写入以下内容:

# 基础配置
bindPort = 5000
# 认证配置(必填,v0.50.0 起强制要求)
auth.method = "token"
auth.token = "your-strong-secret-token-here"
# 端口范围(可选,限制客户端可使用的端口)
allowPorts = [
{ start = 5001, end = 5100 },
{ single = 6000 }
]
# HTTP/HTTPS 虚拟主机配置(可选)
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
# Dashboard 配置(可选)
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your-dashboard-password"
# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 30
# 连接池配置(可选)
transport.maxPoolCount = 10
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 30

Terminal window
sudo vim /etc/systemd/system/frps.service

写入以下内容:

[Unit]
Description=FRP Server
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/opt/frp/frp_0.61.0_linux_amd64/frps -c /opt/frp/frps.toml
Restart=on-failure
RestartSec=10s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

Terminal window
# 重载配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start frps
# 设置开机自启
sudo systemctl enable frps
# 查看状态
sudo systemctl status frps
# 查看日志
sudo journalctl -u frps -f

Terminal window
# 开放 FRP 端口
sudo firewall-cmd --permanent --add-port=5000/tcp
sudo firewall-cmd --permanent --add-port=5001-5100/tcp
sudo firewall-cmd --permanent --add-port=7500/tcp # Dashboard
sudo firewall-cmd --reload
# 或使用 iptables
sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5001:5100 -j ACCEPT

假设内网服务器 IP 为 192.168.0.100

Terminal window
# 下载并解压(同服务端步骤)
cd /opt/frp
tar -xzf frp_0.61.0_linux_amd64.tar.gz

创建配置文件 frpc.toml

Terminal window
sudo vim /opt/frp/frpc.toml

写入以下内容:

# 基础配置
serverAddr = "100.100.100.1"
serverPort = 5000
# 认证配置(必须与服务端一致)
auth.method = "token"
auth.token = "your-strong-secret-token-here"
# 连接池配置
transport.poolCount = 5
transport.tcpMux = true
# 代理配置示例
# 1. SSH 代理
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 5002
# 2. HTTP 代理
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["your-domain.com"]
# 3. HTTPS 代理
[[proxies]]
name = "web-https"
type = "https"
localIP = "127.0.0.1"
localPort = 8443
customDomains = ["your-domain.com"]
# 4. 数据库代理(MySQL)
[[proxies]]
name = "mysql"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 6000
# 5. Redis 代理
[[proxies]]
name = "redis"
type = "tcp"
localIP = "127.0.0.1"
localPort = 6379
remotePort = 6001

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

写入以下内容:

[Unit]
Description=FRP Client
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/opt/frp/frp_0.61.0_linux_amd64/frpc -c /opt/frp/frpc.toml
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target

Terminal window
# 重载配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start frpc
# 设置开机自启
sudo systemctl enable frpc
# 查看状态
sudo systemctl status frpc
# 查看日志
sudo journalctl -u frpc -f

修改配置后无需重启服务,直接重载:

Terminal window
# 使用 frpc 重载命令
sudo /opt/frp/frp_0.61.0_linux_amd64/frpc reload -c /opt/frp/frpc.toml
# 或重启服务
sudo systemctl restart frpc

# 服务端和客户端都添加
transport.tls.enable = true

# 服务端配置
allowPorts = [
{ start = 5001, end = 5100 }
]
# 禁用不需要的代理类型
proxy_allow_types = ["tcp", "http"]

# 客户端配置
transport.udpBufferSize = 1500

# 服务端配置
subDomainHost = "frp.your-domain.com"

# 客户端配置
transport.poolCount = 10
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 30

# 客户端代理配置
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 5002
transport.bandwidthLimit = "1MB"
transport.bandwidthLimitMode = "server"

Terminal window
# 检查服务端状态
sudo systemctl status frps
# 检查端口是否监听
sudo netstat -tlnp | grep 5000
# 检查防火墙
sudo firewall-cmd --list-all

Terminal window
# 检查网络连通性
ping 100.100.100.1
telnet 100.100.100.1 5000
# 检查 token 是否一致
# 对比 frps.toml 和 frpc.toml 中的 auth.token

Terminal window
# 检查本地服务是否运行
netstat -tlnp | grep 8080
# 检查 FRP 代理状态
# 访问 Dashboard:http://100.100.100.1:7500

Terminal window
# 查看服务端日志
sudo journalctl -u frps -n 100 --no-pager
# 查看客户端日志
sudo journalctl -u frpc -n 100 --no-pager

特性FRPNPS
语言GoGo
配置格式TOMLINI
性能
功能丰富度中等
社区活跃度
文档质量一般
推荐场景通用内网穿透复杂代理需求

建议:一般场景推荐 FRP,需要复杂代理功能(如 P2P、加密隧道)可以考虑 NPS。

  1. 安全第一:使用强密码、启用 TLS 加密、限制端口范围
  2. 监控告警:结合 Prometheus + Grafana 监控 FRP 状态
  3. 日志管理:配置日志轮转,定期清理旧日志
  4. 备份配置:定期备份 frps.tomlfrpc.toml
  5. 更新版本:关注 FRP 安全更新,及时升级
  6. 网络优化:合理配置连接池和 TCP 多路复用

评论