大家早上好,中午好,晚上好
1. 内网穿透:打破网络边界的神奇技术
想象一下:你坐在家里,却能直接访问公司内网的服务器;或者你在咖啡馆,却能像在办公室一样操作家里的NAS。这种"魔法"般的技术,就是内网穿透(Port Forwarding) ——它像一座数字桥梁,让外部网络能够直接访问内部网络的特定设备。
为什么需要内网穿透?
- 🌐 突破NAT限制:解决没有公网IP的困境
- 🛡️ 安全访问:避免将内网服务直接暴露在公网
- ⚡ 高效传输:相比传统VPN更轻量高效
在众多实现方案中(包括VPN、云服务等),frp(Fast Reverse Proxy) 以其极简配置和卓越性能脱颖而出,成为开发者们的首选利器。
2. 真实场景:我的穿透需求剖析
最近接了个公众号网页的项目,需要进行调试,微信需要访问到我的最新前端代码的服务,所以需要将本地的vue项目,暴露到公网,让微信能够访问。
理想解决方案:
通过frp建立安全隧道,让云服务器的Nginx能够:
- 接收公网请求(如:api.mydomain.com)
- 自动转发到本地开发机(192.168.1.100:8080)
- 最终实现:全球任意设备访问公网IP ≈ 直接操作我的本地服务!
(效果预览:当你在星巴克用手机访问云服务器IP时,实际上正在调试你卧室电脑里的最新代码!)
3. 手把手实战:5步搭建你的穿透通道
3.1 获取神器:下载frp最新版
工欲善其事必先利其器,首先我们要获取frp工具:
💡 下载小贴士:
以我的环境为例:
- ☁️ 云服务器:选择
frp_*_linux_amd64.tar.gz - 💻 本地开发机:选择
frp_*_windows_amd64.zip
(小技巧:右键复制下载链接,后面会用到!)
3.2 极速安装:两种方法任你选
方法一:传统安装(适合已有下载包)
# 上传压缩包后执行(记得替换实际文件名)
tar -xzvf frp_0.52.3_linux_amd64.tar.gz
方法二:一键直达(推荐!)
# 直接下载+解压(版本号可替换)
curl -L https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz | tar -xz
✨ 为什么推荐方法二?
- 避免手动上传的繁琐
- 自动完成下载解压全过程
- 版本更新只需修改命令中的数字
(看到解压出的frp_*目录了吗?恭喜,武器库已就位!)
3.3 文件解析:解密frp的核心组件
解压后你会发现一个"宝藏箱"般的文件集合,但别担心——我们只需要关注其中两个关键文件:
frp_0.52.3_linux_amd64/
├── frps # 服务端核心程序(Server)
├── frps.toml # 服务端配置文件
├── frpc # 客户端核心程序(Client)
├── frpc.toml # 客户端配置文件
└── LICENSE # 开源协议
🔍 关键文件说明(划重点!)
-
服务端双雄(云服务器使用):
frps:穿透服务的"大脑",负责接收和路由所有外部请求frps.toml:服务配置中枢(相当于大脑的"使用说明书")
-
客户端双侠(本地电脑使用):
frpc:连接服务的"使者",建立与服务器的安全隧道frpc.toml:客户端配置指南(使者的"任务清单")
💡 重要概念图解
公网用户 → [ frps 服务端 ] ←→ [ frpc 客户端 ] → 你的本地服务
(云服务器) (加密隧道) (192.168.x.x)
⚠️ 新手常见误区警示:
- 服务端和客户端需要分别配置,不能混用
- Windows用户注意:对应的是
.exe后缀程序(如frpc.exe) - 配置文件的
.toml后缀是新一代配置文件格式(比传统ini更强大)
(现在你已经能分清这些"双胞胎"文件了,接下来让我们赋予它们灵魂——配置!)
3.4 服务端配置:打造你的安全堡垒
现在我们要给云服务器上的frps注入灵魂!用命令vi frps.toml打开这个文件,并写入以下配置:
# 基础通信配置(必填)
bindPort = 7000 # 客户端敲门端口(防火墙需放行此端口!)
auth.method = "token" # 启用最高安全级别的令牌认证
auth.token = "your_password" # ⚠️请修改为高强度密码(建议16位混合字符)
# 可视化控制台(强烈推荐开启)
webServer.addr = "0.0.0.0" # 监听所有网络接口
webServer.port = 7500 # 管理后台端口
webServer.user = "admin" # 登录用户名
webServer.password = "admin" # 登录密码(生产环境必须修改!)
🔧 配置详解(知其所以然)
-
核心通信配置:
bindPort:这是frp隧道的"总闸门",客户端通过此端口与服务端握手- 安全建议:可以在云服务器安全组中仅对特定IP开放此端口
-
安全认证三件套:
auth.method = "token" # 比传统password更安全 auth.token = "My$ecureP@ss!2024" # 正确示范:包含大小写/符号/数字 -
管理面板配置:
- 通过
http://你的服务器IP:7500访问 - 实时查看:在线客户端、流量统计、连接状态
- 安全提示:务必修改默认凭证,否则等于敞开大门!
- 通过
🛠️ 实战小技巧
-
生成高强度token:
openssl rand -base64 16。怎么安装openssl。看我的另一篇文章 -
测试配置是否正确:
./frps verify -c ./frps.toml -
需要HTTPS?加上这些:
webServer.tls.certFile = "/path/to/cert.pem" webServer.tls.keyFile = "/path/to/key.pem"上面的两个文件可以用openssl生成。
(配置保存后,你已经为frp服务器穿上了铠甲,接下来就让它披挂上阵吧!)
4. 点火发射:启动并测试你的穿透服务
🚀 启动服务端四部曲
-
赋予执行权限(让程序获得"超能力")
chmod +x frps # 这相当于给程序开了绿灯 -
常规启动方式
./frps -c frps.toml | tee frps.log # 同时输出日志到文件
🔍 健康检查指南
-
查看实时日志:
tail -f frps.log # 监控运行状态(Ctrl+C退出) -
验证端口监听:
ss -tulnp | grep frps # 应该看到7000和7500端口 -
访问管理面板:
浏览器打开:http://你的服务器IP:7500- ✅ 成功标志:看到frp的仪表盘登录界面
- ❌ 故障排查:检查防火墙/安全组规则
(看到管理界面了吗?恭喜你的frp服务端已经成功升空!接下来我们要配置客户端连接了)
- 还有一步,就是你的服务器需要开防火墙,比如我用的是华为的云服务器,需要将对应的端口开放:
5. 客户端配置:建立你的专属数据隧道
🖥️ Windows客户端安装指南
tips:需要关闭Windows的防火墙,不然会被认为是病毒!!
-
解压下载包:
-
解压
frp_0.52.3_windows_amd64.zip -
你会看到这些关键文件: frpc.exe # 客户端主程序 frpc.toml # 客户端配置文件
-
-
核心文件说明:
- 只需关注
frpc.exe和frpc.toml这对黄金组合 - 其他文件可以暂时忽略(但不要删除,以备后用)
- 只需关注
✍️ 配置客户端连接(重点!)
用记事本或者VS Code打开frpc.toml,写入以下配置:
# 服务器连接配置
serverAddr = "你的云服务器IP" # 替换为真实公网IP
serverPort = 7000 # 必须与服务端bindPort一致
auth.token = "your_password" # 必须与服务端token完全一致
# 端口映射规则(实现穿透的核心)
[[proxies]]
name = "web-service" # 连接名称(自定义)
type = "tcp" # 传输协议类型
localIP = "127.0.0.1" # 本地服务IP(本机固定这个值)
localPort = 9000 # 本地服务端口
remotePort = 3000 # 云服务器暴露端口
🚦 启动客户端三部曲
-
启动连接:
frpc.exe -c frpc.toml- 看到
success提示说明连接成功! - 保持窗口开启(关闭会断开连接)
- 看到
🌐 连接测试验证
-
在云服务器执行:
telnet 127.0.0.1 3000 # 测试端口是否开放 -
在任意电脑测试:
浏览器访问:http://云服务器IP:3000
💡 配置深度解析
-
remotePort:这是公网访问的"大门号码"
-
localPort:你本地服务的"房间号码"
-
工作原理: 公网访问:3000 → 云服务器 → 隧道 → 你本机的:9000
(看到连接成功的日志了吗?你的本地服务已经成功登上公网舞台!)
6. 查看
6.1本地服务
6.2公网IP访问开发服务器
6.3 frp管理面板
我想说
经过这趟技术之旅,你已经成功:
- 突破了网络边界:让没有公网IP的本地服务直面互联网
- 搭建了安全隧道:通过token认证+端口映射实现加密通信
- 掌握了全栈控制:从服务端配置到客户端连接的全流程
- 解锁了远程开发:现在你可以在任何地方调试本地代码!
更多功能如域名绑定、多服务映射,请自行查看官方文档哈。此文章仅仅是入门!!
(遇到问题?欢迎在评论区留言交流!如果觉得有用,别忘了点赞收藏~)