如何搭建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 (独立控制通道)