FRP 内网穿透部署完整教程

架构说明

  • 香港机器:frps(服务端) + Nginx;对外端口:7000(frp控制)、80(web)
  • 国内机器:frpc(客户端),业务仅监听127.0.0.1,无公网入站端口
  • 域名走Cloudflare橙色代理,使用Flexible模式实现HTTPS,香港机器不部署证书
  • 链路:浏览器 → Cloudflare → 香港Nginx(80) → 127.0.0.1:10080(frps vhost) → frp隧道 →国内frpc →本地业务服务

1. 香港服务端 frps.toml

bindPort = 7000

auth.method = "token"
auth.token = "你的高强度token字符串"

vhostHTTPPort = 10080
# vhost仅本机Nginx访问,不要监听0.0.0.0

# Dashboard监控面板,默认仅本机访问,不要直接暴露公网
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "你的面板密码"

[transport]
# maxPoolCount保持默认,web业务无需修改
maxPoolCount = 5
# transport.tls.certFile 是frpc-frps隧道加密证书,**不是网站HTTPS证书**,网站ssl交给Nginx/CF处理

frps系统服务

# 配置systemd,启动开机自启
systemctl enable frps
systemctl start frps
systemctl restart frps

# 查看日志
journalctl -u frps -f

香港服务器安全组&防火墙

端口监听地址公网放行说明
70000.0.0.0✅放行frpc客户端连接端口;有条件设置国内服务器IP白名单
800.0.0.0✅放行CF回源Nginx
10080127.0.0.1❌关闭仅本机Nginx调用,禁止公网开放
7500127.0.0.1❌关闭frp监控面板,仅临时调试打开
# firewalld放行
firewall-cmd --add-port=7000/tcp --permanent
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

2. 国内客户端 frpc.toml

serverAddr = "43.129.216.234"
serverPort = 7000
auth.method = "token"
auth.token = "你的高强度token字符串"

log.level = "info"
log.to = "console"

# http代理,多域名依靠customDomains区分,type=http禁止写remotePort
[[proxies]]
name = "tools-xxoo-team"
type = "http"
localPort = 20001
customDomains = ["newapi.xxoo.team"]

[[proxies]]
name = "www-sapi-run"
type = "http"
localPort = 20002
customDomains = ["sapi.xxoo.team"]

frpc系统服务

systemctl enable frpc
systemctl start frpc
systemctl restart frpc
journalctl -u frpc -f

# 查看代理启动成功
journalctl -u frpc -l | grep "start proxy success"
国内业务程序务必监听 127.0.0.1:20001/20002,不要监听0.0.0.0,不对外暴露业务端口。

3. 香港 Nginx 配置(CF‑Flexible模式)

Flexible模式:CF对外HTTPS,回源HTTP 80;禁止写80强制301跳转https,否则重定向死循环

/etc/nginx/conf.d/newapi.conf

server {
    listen 80;
    server_name newapi.xxoo.team sapi.xxoo.team;

    location / {
        proxy_pass http://127.0.0.1:10080;
        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 http;
    }
}

校验重载:

nginx -t
systemctl reload nginx

4. Cloudflare配置

  1. DNS A记录:newapi.xxoo.teamsapi.xxoo.team 指向香港IP,橙色云朵开启代理
  2. SSL/TLS →加密模式:Flexible(灵活)
  3. 开启:始终使用HTTPS、Automatic HTTPS Rewrites自动HTTPS重写

5. 新增子域名网站步骤

  1. CF新增A记录,橙色代理;
  2. frpc.toml新增一段[[proxies]],填写customDomains = ["xxx.xxoo.team"]
  3. systemctl restart frpc
Nginx配置无需改动。

6. frp Dashboard监控面板

  • 默认仅本机 127.0.0.1:7500禁止长期暴露公网
  • 仅支持只读监控:查看在线客户端、代理、流量统计;不能网页修改隧道配置
  • 调试临时开放:修改webServer.addr="0.0.0.0",安全组放行7500;调试完成立刻切回127.0.0.1并关闭端口。

7. 架构链路完整流程

浏览器(HTTPS)
  ↓
Cloudflare CDN节点(隐藏香港真实源站IP)
  ↓ HTTP 80
香港Nginx
  ↓ 本机回环127.0.0.1:10080
香港frps
  ↓ frp加密长连接隧道(国内frpc主动出站连接7000)
国内frpc
  ↓ 本机回环
国内业务 20001 / 20002

8. 安全注意点

  1. 7000端口无法走CF,会泄露香港服务器IP;防护:强token,尽量配置来源IP白名单。
  2. 10080端口仅本机访问,云安全组务必关闭入站放行。
  3. frpc业务localPort监听127.0.0.1,不要监听0.0.0.0。
  4. dashboard 7500不要长期对公网开放。
  5. token不要泄露,配置文件做好权限保护。