当前位置: 首页 > ops >正文

内网穿透实战笔记 1panel 面板部署 frps,Windows 部署 frpc

以 FRP(frps + frpc)为例,从概念、原理、安装到排障的全链路记录
(基于 2025-08-16 本次踩坑经历整理)

一、项目背景

手里有一台 Windows 台式机跑着一个 Web 服务(端口 8693),只在内网地址 192.168.0.120 上可访问;另有一台公网云主机(IP 81.70.xx.xx)。目标:不改动现有网络拓扑,实现“随时随地通过公网 IP:端口”访问台式机里的服务。最终选用 FRP(Fast Reverse Proxy)作为内网穿透方案,并在过程中踩了两个坑:
云安全组/系统防火墙未放行 frps 监听端口 52820;

frps 强制 token 认证,而 frpc desktop 默认验证方式为“无”,导致连接始终失败。

下文把整个过程、原理、常见坑点一次性梳理,方便日后复盘或给他人参考。

二、FRP 是什么

官方定位:一个高性能的反向代理应用,专注于内网穿透,支持 TCP、UDP、HTTP、HTTPS、STCP、XTCP、SUDP 等协议。

组成:

• frps(server)——部署在具有公网 IP 的机器上,负责接受外部连接、维持与多个 frpc 的长连接、流量转发。
• frpc(client)——部署在内网需要被访问的主机或同网段主机上,主动连 frps,并告知“把公网某端口映射到我内网的哪个地址+端口”。
典型流量路径

外部用户 → 公网 IP:remote_port → frps → frpc → 内网服务 local_ip:local_port 数据原路返回。

三、核心概念与配置文件字段

frps 关键字段

bindPort = 52820 # 客户端连接端口
auth.method = token # 认证方式(token/oidc)
auth.token = mySecureToken # 客户端必须携带同样 token
dashboard.addr = 0.0.0.0 # Web 面板地址
dashboard.port = 7500 # Web 面板端口
log.level = info
log.to = /var/log/frps.log

2.frpc 关键字段
[common]
server_addr = 81.70.xx.xx
server_port = 52820
auth.method = token
token = mySecureToken
tls_enable = true # 建议开启,防止中间人
[web_desktop] # 任意代理名称
type = tcp
local_ip = 192.168.0.120
local_port = 8693
remote_port = 8693 # 公网暴露端口
这里的 frpc 我用的是 frpc desktop 这个软件,配置如下所示:
四、安装与启动步骤(Linux frps + Windows frpc desktop 为例)
服务端

wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
tar xf frp_0.59.0_linux_amd64.tar.gz
cd frp_0.59.0_linux_amd64
sudo mv frps /usr/local/bin/
sudo mkdir /etc/frp
sudo vim /etc/frp/frps.toml # 写入上文 frps 配置
sudo systemctl enable --now frps@frps.toml

这里用的是 1panel 搭建的frps 的服务,如图所示:
在这里插入图片描述
在这里插入图片描述

客户端(Windows 图形界面)

• 下载 FrpcDesktop 1.2.2,解压后直接运行 FrpcDesktop.exe
• Settings → Server 地址填 81.70.xx.xx,端口填 52820
• Auth 方式选 Token,填入与服务端一致的 mySecureToken
• TLS 开关打开(对应 frps.toml 中 tls 相关配置)
• Proxy 标签页 → 新建 TCP 代理
内网地址 192.168.0.120:8693

外网端口 8693

• 保存后点击“启动”
在这里插入图片描述

在这里插入图片描述

五、安全加固 checklist

云安全组:入方向放行 52820/TCP(frps 监听)、7500/TCP(可选 dashboard)、以及每个 remote_port(本例 8693/TCP)。

系统防火墙:Ubuntu 用 ufw allow 52820/tcp;CentOS 用 firewall-cmd。

强 token:长度 ≥ 32 位,包含大小写+数字+特殊字符。

Dashboard 登录口令:若开启公网访问 7500,务必在 frps.toml 中配置 dashboard_user / dashboard_pwd。

TLS:开启后可防止 token 或数据被中间人窃取。

最小暴露原则:仅映射必要端口;如只需 HTTP,可把 type 改为 http,并配置 custom_domains 或 subdomain,避免直接把 TCP 端口暴露在公网。

六、本次踩坑复盘

现象:frpc 日志一直报 “dial tcp 81.70.xx.xx:52820: i/o timeout”,dashboard 无客户端在线记录。

排查:

• 服务器 netstat -lntp | grep 52820 → frps 已监听 ✅
• ufw status → 52820 已放行 ✅
• 云安全组 → 52820 已放行 ✅
• 抓包 tcpdump host 81.70.xx.xx and port 52820 → 无握手包 ❌
• 最终发现 frps.toml 中 auth.method = token,而 frpc desktop 默认验证方式为“无”,导致握手阶段就被 frps 拒绝,连接直接被 reset,表现为“超时”。
解决:把 frpc desktop Auth 方式改为 Token,并填入一致 token,重启后日志出现 “login to server success, start proxy [web_desktop] success”,外网访问 81.70.xx.xx:8693 立即生效。

七、常见故障速查表

在这里插入图片描述

八、进阶玩法速览

HTTP/HTTPS 域名映射:配合 Nginx 或 frp 自身的 vhost 功能,实现 http://sub.domain.com 直接访问内网 Web。

多路复用:在 frpc 设置 connection_pool_count 提高吞吐。

STCP/XTCP:点对点穿透,无需开放公网端口,适合高安全场景。

插件系统:frp 支持 static_file、http_proxy、unix_domain_socket 等插件,可直接把内网 Samba、MySQL、SSH 暴露成公网服务。

K8s 或 Docker 部署:frps 可做成 Deployment + Service;frpc 用 sidecar 模式注入到业务 Pod。

九、一键备份脚本(Linux 服务端)

cat > /usr/local/bin/backup_frps.sh <<‘EOF’
#!/bin/bash
tar czf /opt/backup/frps_$(date +%F).tar.gz /etc/frp/frps.toml /var/log/frps.log
find /opt/backup -name “frps_*.tar.gz” -mtime +7 -delete
EOF
chmod +x /usr/local/bin/backup_frps.sh
echo “0 3 * * * root /usr/local/bin/backup_frps.sh” | sudo tee -a /etc/crontab

十、结语

FRP 的门槛极低,但“小配置、大坑点”:端口、防火墙、token、TLS、安全组缺一不可。本文把本次实战的完整链路、踩坑记录、排障思路全部固化,日后无论是自己回顾还是分享给同事,都能按图索骥,十分钟内完成部署。

http://www.xdnf.cn/news/17851.html

相关文章:

  • Ubuntu永久配置 DNS
  • JavaScript 原型机制详解:从概念到实战(附个人学习方法)
  • 【Mysql语句练习】
  • linux 设备驱动的分层思想
  • 二分算法(模板)
  • week1-[顺序结构]大海
  • 9.对象介绍
  • 俄罗斯信封套娃问题-二维最长递增子序列
  • BFS和codetop复习
  • 【Java Web 快速入门】十、AOP
  • 自动处理考勤表——如何使用Power Query,步步为营,一点点探索自定义函数
  • LeetCode Hot100:递归穿透值传递问题
  • 艾伦·图灵:计算理论与人工智能的奠基人
  • Java研学-SpringCloud(四)
  • Numerical Difference between vLLM logprobs and huggingface logprobs
  • 数据结构:N叉树 (N-ary Tree)
  • Web 开发 15
  • 4.2 寻址方式 (答案见原书 P341)
  • CIAIE 2025上海汽车内外饰展观察:从美学到功能的产业跃迁
  • Tokenizer(切词器)的不同实现算法
  • 《软件工程导论》实验报告四 详细设计工具
  • 打靶日常-sql注入(手工+sqlmap)
  • 嵌入式学习 day52 IMX6ULL裸机开发-I2C
  • 功能组和功能组状态的概念关系和区别
  • Cursor/VSCode/VS2017 搭建Cocos2d-x环境,并进行正常的调试和运行(简单明了)
  • Docker的相关知识探究详解
  • Linux驱动学习day28(USB驱动,libusb操作)
  • RabbitMQ核心架构与应用
  • DeepSeek-V2:一种强大、经济且高效的混合专家语言模型
  • 区块链技术原理(13)-以太坊燃料费Gas