如何搭建FRP内网穿透
阅读量:116
更新时间:2025-04-13 23:45:05
你是否遇到过这些困扰?
✨想远程访问公司内网系统,却被防火墙阻挡
✨调试家中NAS文件,却因没有公网IP束手无策
✨开发微信小程序时,本地服务无法被外网调用
今天介绍的FRP(Fast Reverse Proxy),只需5分钟配置,就能突破网络边界,让内网服务秒变公网可达!
什么是FRP?
FRP是一款轻量级反向代理工具,由国人开发者fatedier开源。它通过服务端-客户端架构,将内网服务安全暴露到公网,完美解决NAT/防火墙穿透难题。
为什么选择FRP?
传统方案痛点
✨路由器端口映射配置复杂
✨动态公网IP需要搭配DDNS
✨第三方穿透工具收费且限速
FRP三大优势
✨极简配置:一条命令完成穿透
✨协议全能:TCP/HTTP/HTTPS/UDP全支持
✨开源免费:GitHub星标超92k,企业级功能0成本
5分钟快速上手
🛠️配置服务器
shell
# 进入安装目录
cd /www/frp
# 下载最新版
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
我解压在/www/frp
目录,这个可以自己决定
🛠️修改服务端frps.toml配置文件
bindPort = 7000 #服务端与客户端的控制通道
vhostHTTPPort = 7001 #服务端的业务数据通道
auth.token = "密钥"
log.to = "/www/frp/logs.log"
log.maxDays = 3
🛠️添加frp到系统服务里面
shell
cat <<EOF | tee /etc/systemd/system/frps.service
[Unit]
Description=FRP Server
After=network-online.target
Wants=network-online.target
[Service]
User=root
WorkingDirectory=/www/frp
ExecStart=/www/frp/frps -c /www/frp/frps.toml
Environment=FRP_LOG_LEVEL=info
Restart=always
RestartSec=5s
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
🛠️启动服务
shell
# 重新加载服务
systemctl daemon-reload
# 启动frps服务
systemctl start frps.service
# 开机自启
systemctl enable frps.service
# 关闭服务
systemctl stop frps.service
# 如果启动服务失败,可以使用下面查看状态并重置
# 查看服务状态
systemctl status [serviceName]
# 重置错误问题
systemctl reset-failed
使用systemctl status frps
,出现success,就是成功启动

🛠️配置nginx代理
shell
server {
listen 80;
server_name frps.test.com;
# 代理客户端1
location /app1/ {
proxy_pass http://127.0.0.1:7001/app1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 代理客户端2
location /app2/ {
proxy_pass http://127.0.0.1:7001/app2/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
🛠️修改客户端配置
shell
# 客户端1
serverAddr = "ip地址"
serverPort = 7000
auth.token = "密钥"
[[proxies]]
name = "test"
type = "http"
localIP = "127.0.0.1"
localPort = 8000
customDomains = ["frps.test.com"]
locations = ["/app1"]
# 客户端2
serverAddr = "ip地址"
serverPort = 7000
auth.token = "密钥"
[[proxies]]
name = "test"
type = "http"
localIP = "127.0.0.1"
localPort = 9000
customDomains = ["frps.test.com"]
locations = ["/app2"]
🛠️启动客户端连接
因为我客户端是windows,直接运行frpc.exe -c frpc.toml
启动

架构说明
markdown
用户访问 → Nginx:80/443 → FRP服务端:7001 → 客户端1:8000 (/app1)
└────────→ 客户端2:9000 (/app2)
客户端连接 → FRP服务端:7000 (独立控制通道)