当前位置: 首页 > 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.dtcms.com/a/334866.html

相关文章:

  • 程序设计|C语言教学——C语言基础3:函数、数组、指针
  • Python虚拟环境与包管理工具(uv、Conda)
  • 一汽红旗7月销量37324辆 同比增长21.1%
  • B站 韩顺平 笔记 (Day 20)
  • P2169 正则表达式
  • 如何运用好DeepSeek为自己服务:智能增强的范式革命 1.1 认知增强的三次浪潮
  • 项目管理进阶——解读大型IT系统集成项目实施要点培训【附全文阅读】
  • GLM-4-Flash:智谱AI推出的首个免费API服务,支持128K上下文
  • 制作 Windows 11 启动U盘
  • Redis缓存
  • Win11和Win10共享打印机提示709用添加Windows凭据来解决的小方法
  • select、poll 和 epoll
  • Python入门第5课:如何定义和使用函数,提升代码复用性
  • Jenkins Pipeline中参数化构建
  • 【wmi异常】关于taskkill命令提示“错误:找不到” 以及无法正常获取设备机器码的处理办法
  • 读书是一场最低成本的高级成长
  • 嵌入式硬件篇---运算放大器
  • OpenCV 图像处理基础操作指南(二)
  • NetBIOS 设置
  • MySQL的索引优化与查询优化:
  • AI搜索引擎下的内容优化新范式:GEO的关键技术解析
  • 12V电压控制小板
  • EXTI配置流程
  • Day15 Docker
  • 软件I2C实现(2):I2C协议实现
  • 小迪安全v2023学习笔记(六十三讲)—— JS加密断点调试
  • Linux-Vim编辑器最简美化配置
  • CSS 核心知识点全解析:从基础到实战应用
  • 【每日一题】Day 4
  • 解决 Microsoft Edge 显示“由你的组织管理”问题