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

内网穿透实战笔记 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.lryc.cn/news/623026.html

相关文章:

  • Win11和Win10共享打印机提示709用添加Windows凭据来解决的小方法
  • 自适应阈值二值化参数详解 ,计算机视觉,图片处理 邻域大小 调整常数(C=3)和可视化调节参数的应用程序
  • vscode中用python调用matlab的函数(环境安装)
  • 计算机网络:(十五)TCP拥塞控制与拥塞控制算法深度剖析
  • 安全审计-firewall防火墙
  • 在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
  • MySQL的《Buffer-pool》和《连接池》介绍
  • LangChain4j:基于 SSE 与 Flux 的 AI 流式对话实现方案
  • lesson40:PyMySQL完全指南:从基础到高级的Python MySQL交互
  • 数据结构:层序遍历 (Level-order Traversal)
  • 图论Day4学习心得
  • Kafka 面试题及详细答案100道(11-22)-- 核心机制1
  • 代码随想录Day52:图论(孤岛的总面积、沉没孤岛、水流问题、建造最大岛屿)
  • Cmake学习笔记
  • 代码随想录算法训练营四十三天|图论part01
  • 数字化与人工智能的崛起及其社会影响研究报告
  • 基于uni-app+vue3实现的微信小程序地图范围限制与单点标记功能实现指南
  • Altium Designer 22使用笔记(7)---网表导入,叠层设置
  • 【电路笔记 通信】AXI4-Lite协议 论文阅读 简化的高级可扩展接口(AdvancedeXtensibleInterface4Lite)
  • 【计算机网络架构】混合型架构简介
  • 车载诊断架构 --- 怎么解决对已量产ECU增加具体DTC的快照信息?
  • 超越Transformer:大模型架构创新的深度探索
  • 【自动化运维神器Ansible】Ansible逻辑运算符详解:构建复杂条件判断的核心工具
  • 11、软件需求工程
  • 【系统分析师】软件需求工程——第11章学习笔记(下)
  • 架构调整决策
  • 软件需求管理过程详解
  • M-LAG双活网关
  • linux I2C核心、总线与设备驱动
  • 特洛伊木马和后门程序的定义、联系、区别与应用场景