FRP 内网穿透配置指南(2026 更新)
在 Linux 服务器上安装和配置 FRP 内网穿透,包含最新版本和安全实践。
内容保鲜:本文已更新至 FRP v0.61.0,配置格式改为 TOML,移除了已 EOL 的 CentOS 7,新增安全加固和 systemd 服务配置。
FRP(Fast Reverse Proxy)是一款高性能的反向代理工具,用于内网穿透。
- 源码地址:https://github.com/fatedier/frp
- 当前版本:v0.61.0(2026 年 5 月发布)
- 配置格式:TOML(v0.52.0 起弃用 .ini 格式)
| 发行版 | 版本 | 状态 |
|---|---|---|
| Ubuntu | 22.04 / 24.04 LTS | ✅ 推荐 |
| Debian | 12 / 13 | ✅ 推荐 |
| Rocky Linux | 9 | ✅ CentOS 替代 |
| AlmaLinux | 9 | ✅ CentOS 替代 |
| CentOS | 7 | ❌ 已 EOL(2024-06-30) |
| CentOS | 8 | ❌ 已 EOL |
# Ubuntu/Debiansudo apt updatesudo apt install -y wget tar
# Rocky/AlmaLinux/CentOS 9sudo dnf install -y wget tar假设公网服务器 IP 为 100.100.100.1。
# 创建安装目录sudo mkdir -p /opt/frpcd /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.gzcd frp_0.61.0_linux_amd64创建配置文件 frps.toml:
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 = 8080vhostHTTPSPort = 8443
# Dashboard 配置(可选)webServer.addr = "127.0.0.1"webServer.port = 7500webServer.user = "admin"webServer.password = "your-dashboard-password"
# 日志配置log.to = "/var/log/frps.log"log.level = "info"log.maxDays = 30
# 连接池配置(可选)transport.maxPoolCount = 10transport.tcpMux = truetransport.tcpMuxKeepaliveInterval = 30sudo vim /etc/systemd/system/frps.service写入以下内容:
[Unit]Description=FRP ServerAfter=syslog.target network.target
[Service]Type=simpleExecStart=/opt/frp/frp_0.61.0_linux_amd64/frps -c /opt/frp/frps.tomlRestart=on-failureRestartSec=10sLimitNOFILE=65536
[Install]WantedBy=multi-user.target# 重载配置sudo systemctl daemon-reload
# 启动服务sudo systemctl start frps
# 设置开机自启sudo systemctl enable frps
# 查看状态sudo systemctl status frps
# 查看日志sudo journalctl -u frps -f# 开放 FRP 端口sudo firewall-cmd --permanent --add-port=5000/tcpsudo firewall-cmd --permanent --add-port=5001-5100/tcpsudo firewall-cmd --permanent --add-port=7500/tcp # Dashboardsudo firewall-cmd --reload
# 或使用 iptablessudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 5001:5100 -j ACCEPT假设内网服务器 IP 为 192.168.0.100。
# 下载并解压(同服务端步骤)cd /opt/frptar -xzf frp_0.61.0_linux_amd64.tar.gz创建配置文件 frpc.toml:
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 = 5transport.tcpMux = true
# 代理配置示例
# 1. SSH 代理[[proxies]]name = "ssh"type = "tcp"localIP = "127.0.0.1"localPort = 22remotePort = 5002
# 2. HTTP 代理[[proxies]]name = "web"type = "http"localIP = "127.0.0.1"localPort = 8080customDomains = ["your-domain.com"]
# 3. HTTPS 代理[[proxies]]name = "web-https"type = "https"localIP = "127.0.0.1"localPort = 8443customDomains = ["your-domain.com"]
# 4. 数据库代理(MySQL)[[proxies]]name = "mysql"type = "tcp"localIP = "127.0.0.1"localPort = 3306remotePort = 6000
# 5. Redis 代理[[proxies]]name = "redis"type = "tcp"localIP = "127.0.0.1"localPort = 6379remotePort = 6001sudo vim /etc/systemd/system/frpc.service写入以下内容:
[Unit]Description=FRP ClientAfter=syslog.target network.target
[Service]Type=simpleExecStart=/opt/frp/frp_0.61.0_linux_amd64/frpc -c /opt/frp/frpc.tomlRestart=on-failureRestartSec=10s
[Install]WantedBy=multi-user.target# 重载配置sudo systemctl daemon-reload
# 启动服务sudo systemctl start frpc
# 设置开机自启sudo systemctl enable frpc
# 查看状态sudo systemctl status frpc
# 查看日志sudo journalctl -u frpc -f修改配置后无需重启服务,直接重载:
# 使用 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 = 10transport.tcpMux = truetransport.tcpMuxKeepaliveInterval = 30# 客户端代理配置[[proxies]]name = "ssh"type = "tcp"localIP = "127.0.0.1"localPort = 22remotePort = 5002transport.bandwidthLimit = "1MB"transport.bandwidthLimitMode = "server"# 检查服务端状态sudo systemctl status frps
# 检查端口是否监听sudo netstat -tlnp | grep 5000
# 检查防火墙sudo firewall-cmd --list-all# 检查网络连通性ping 100.100.100.1telnet 100.100.100.1 5000
# 检查 token 是否一致# 对比 frps.toml 和 frpc.toml 中的 auth.token# 检查本地服务是否运行netstat -tlnp | grep 8080
# 检查 FRP 代理状态# 访问 Dashboard:http://100.100.100.1:7500# 查看服务端日志sudo journalctl -u frps -n 100 --no-pager
# 查看客户端日志sudo journalctl -u frpc -n 100 --no-pager| 特性 | FRP | NPS |
|---|---|---|
| 语言 | Go | Go |
| 配置格式 | TOML | INI |
| 性能 | 高 | 高 |
| 功能丰富度 | 中等 | 高 |
| 社区活跃度 | 高 | 中 |
| 文档质量 | 好 | 一般 |
| 推荐场景 | 通用内网穿透 | 复杂代理需求 |
建议:一般场景推荐 FRP,需要复杂代理功能(如 P2P、加密隧道)可以考虑 NPS。
- 安全第一:使用强密码、启用 TLS 加密、限制端口范围
- 监控告警:结合 Prometheus + Grafana 监控 FRP 状态
- 日志管理:配置日志轮转,定期清理旧日志
- 备份配置:定期备份
frps.toml和frpc.toml - 更新版本:关注 FRP 安全更新,及时升级
- 网络优化:合理配置连接池和 TCP 多路复用