FRP 内网通透玩指南
那个让我在星巴克也能远程家里电脑的神器 - FRP 内网通透玩指南
这是一个关于"我在公司,但急需家里电脑上的文件"的故事。当然,还有拯救这个尴尬局面的神器——FRP。
故事开始:一个尴尬的下午
那是一个阳光明媚的下午,我坐在公司楼下星巴克里,享受着难得的摸鱼时光。突然,老板的消息弹了出来:
"小李啊,那个项目的最新方案在你家里电脑上,你能不能现在发给我?半小时内要。"
我擦了擦额头的汗——家里的电脑,我在公司啊!
这时候,有两种选择: 1. 实话实说:"老板,我得回家一趟"(然后被扣工资) 2. 虚张声势:"好的马上"(然后疯狂Google解决方案)
聪明的你肯定猜到了,我选择了后者。于是,我遇见了它——FRP。
什么是 FRP?(用人话版)
官方说:FRP (Fast Reverse Proxy) 是一款高性能的反向代理应用。
翻译成人话就是: 它能让你在任何地方,访问你家里/公司内网里的任何设备。
工作原理(一图胜千言)
你在星巴克 ☕️
│
│ 想要连接
↓
互联网 ☁️
│
│ 通过中转站
↓
你的公网服务器 🖥️ ← FRP 服务端住在这里
│
│ 建立隧道
↓
你家里的电脑 🏠 ← FRP 客户端住在这里
│
│
↓
终于找到了!那个文件 📄
简单理解: - 服务端 = 中转站(需要公网IP) - 客户端 = 家里/公司内网的机器 - 结果 = 你在世界任何角落都能访问内网
为什么你需要 FRP?
真实场景大赏
场景1:居家办公,文件没带
问题:重要的PPT在家里电脑,你在公司 解决:用FRP穿透SSH,直接远程操作家里电脑
场景2:想给客户演示本地项目
问题:项目在本地开发环境,客户想看 解决:用FRP暴露本地Web服务,给客户一个链接
场景3:家里NAS想在外面访问
问题:电影都存家里NAS,出差想看 解决:用FRP穿透NAS Web界面,随时随地看片
场景4:物联网设备调试
问题:设备在内网,想远程调试 解决:用FRP暴露设备端口,远程SSH连进去
总结一句话:只要你有内网需要外网访问的需求,FRP都能搞定!
快速上手(5分钟搞定)
准备工作
必备物品: - ✅ 一台有公网IP的服务器(阿里云/腾讯云都行,最便宜的那种即可) - ✅ 需要穿透的内网机器(你的电脑/NAS/树莓派等) - ✅ 一杯咖啡(可选,但推荐)
第一步:服务端安装(中转站)
登录你的公网服务器,执行以下命令:
# 下载FRP(选择适合你系统的版本)
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.53.2_linux_amd64.tar.gz
cd frp_0.53.2_linux_amd64
# 创建配置文件(密码记得改复杂点!)
cat > frps.toml << 'EOF'
[common]
# 中转站端口号
bindPort = 7000
# 认证密码(客户端和服务端要一样,别用这个默认的!)
auth.token = "请改成你的复杂密码_比如生日加手机号"
# Dashboard管理界面(可选,但推荐开启)
[webServer]
addr = "0.0.0.0"
port = 7500
user = "admin"
password = "admin123"
# HTTP穿透端口(如果你要暴露Web服务)
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
EOF
# 启动服务端
nohup ./frps -c frps.toml > frps.log 2>&1 &
恭喜!你的中转站已经建好了! 🎉
第二步:防火墙配置(别忘记这步!)
# Ubuntu/Debian 系统
sudo ufw allow 7000/tcp # FRP通信端口
sudo ufw allow 7500/tcp # Dashboard管理界面
sudo ufw allow 8080/tcp # HTTP穿透(如果需要)
# CentOS/RHEL 系统
sudo firewall-cmd --add-port={7000,7500,8080}/tcp --permanent
sudo firewall-cmd --reload
⚠️ 重要提醒: 很多同学失败都是因为忘了这步!
客户端配置(家里/公司内网机器)
场景1:SSH 穿透(最常用)
需求: 在公司远程SSH回家里电脑
在家里电脑上创建配置文件:
# 创建 frpc.toml
cat > frpc.toml << 'EOF'
[common]
# 你的服务器公网IP(替换成你自己的)
serverAddr = "123.45.67.89"
serverPort = 7000
# 认证密码(和服务端保持一致!)
auth.token = "请改成你的复杂密码_比如生日加手机号"
# SSH穿透配置
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22 # 内网机器的SSH端口
remotePort = 6000 # 通过服务器的6000端口访问
EOF
# 启动客户端
./frpc -c frpc.toml
测试连接:
现在你在公司电脑上执行:
ssh -p 6000 你的用户名@123.45.67.89
神奇的事情发生了: 你成功连接到了家里电脑!🎊
场景2:本地Web服务暴露
需求: 给客户演示本地开发的项目
[common]
serverAddr = "123.45.67.89"
serverPort = 7000
auth.token = "你的密码"
[[proxies]]
name = "my-web-project"
type = "http"
localPort = 3000 # 本地项目端口
customDomains = ["demo.yourdomain.com"] # 你的域名
访问方式:
客户访问 http://demo.yourdomain.com:8080 就能看到你的本地项目了!
⚠️ 前提: 需要把 demo.yourdomain.com 解析到你的服务器IP
场景3:数据库穿透
需求: 在外面访问家里的MySQL数据库
[[proxies]]
name = "mysql-home"
type = "tcp"
localPort = 3306
remotePort = 6306
连接方式:
mysql -h 123.45.67.89 -P 6306 -u root -p
进阶玩法(装X必备)
1. 多服务同时穿透
家里有好多服务需要穿透?一个配置文件全搞定:
[common]
serverAddr = "123.45.67.89"
serverPort = 7000
auth.token = "你的密码"
# SSH
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
# Web服务
[[proxies]]
name = "website"
type = "http"
localPort = 80
customDomains = ["home.yourdomain.com"]
# NAS
[[proxies]]
name = "nas"
type = "http"
localPort = 5000
customDomains = ["nas.yourdomain.com"]
# MySQL
[[proxies]]
name = "mysql"
type = "tcp"
localPort = 3306
remotePort = 6306
# Redis
[[proxies]]
name = "redis"
type = "tcp"
localPort = 6379
remotePort = 6379
2. 私密代理(STCP)
这是什么? 只有知道暗号的人才能访问,安全性更高!
# 被访问端配置
[[proxies]]
name = "secret_ssh"
type = "stcp"
localPort = 22
sk = "只有我知道的暗号"
# 访客端配置(需要单独配置)
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "secret_ssh"
sk = "只有我知道的暗号"
bindAddr = "127.0.0.1"
bindPort = 6000
3. 加密传输
给数据传输加把锁:
[[proxies]]
name = "secure-db"
type = "tcp"
localPort = 3306
remotePort = 6306
useEncryption = true # 加密
useCompression = true # 压缩(省流量)
4. 带宽限制
防止某个服务把带宽吃光:
[[proxies]]
name = "limited-web"
type = "http"
localPort = 80
customDomains = ["slow.yourdomain.com"]
bandwidthLimit = "1MB" # 限制1MB/s
Dashboard 管理界面(可视化管理)
启动服务端后,访问 http://你的服务器IP:7500,输入用户名密码,你就能看到:
- 📊 客户端连接状态
- 📈 代理列表和流量统计
- 🔗 连接信息详情
简直就是一个控制台! 看起来特别专业!
实用小技巧
技巧1:开机自启动
不想每次重启都要手动启动?用 systemd:
# 创建服务文件
sudo vim /etc/systemd/system/frps.service
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/frp
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
# 启用开机自启
sudo systemctl enable frps
sudo systemctl start frps
# 查看状态
sudo systemctl status frps
技巧2:查看日志
# 实时查看服务端日志
tail -f /opt/frp/frps.log
# 查看客户端日志
tail -f /opt/frp/frpc.log
技巧3:健康检查
让客户端自动检测本地服务是否正常:
[[proxies]]
name = "web-with-health"
type = "tcp"
localPort = 80
remotePort = 8080
healthCheckType = "tcp"
healthCheckIntervalS = 10 # 每10秒检查一次
healthCheckMaxFailed = 3 # 失败3次标记为离线
healthCheckTimeoutS = 3
安全建议(重要!)
1. 使用强密码
# 生成随机密码
openssl rand -hex 16
2. 修改默认端口
不要使用默认端口,改成自己记得的数字:
bindPort = 7XXX # 改成你喜欢的数字
3. 限制Dashboard访问
只允许本地访问,通过SSH隧道连接:
[webServer]
addr = "127.0.0.1" # 只监听本地
port = 7500
然后使用SSH隧道:
ssh -L 7500:localhost:7500 user@server
# 本地访问 http://localhost:7500
4. 定期更新
FRP会定期更新,关注官方版本并及时升级。
常见问题(避坑指南)
Q1: 客户端连接不上服务端?
排查清单:
- [ ] 服务端是否启动?ps aux | grep frps
- [ ] 防火墙是否开放端口?sudo ufw status
- [ ] Token是否一致?仔细检查配置文件
- [ ] 网络是否通?telnet 服务器IP 7000
Q2: 穿透成功但访问不了?
可能原因: - 本地服务没启动 - 端口填错了 - 防火墙阻止了
解决: 先本地测试 curl localhost:端口,确保本地服务正常
Q3: 连接经常断开?
增加心跳时间:
[common]
serverAddr = "服务器IP"
serverPort = 7000
auth.token = "密码"
# 心跳配置
heartbeatInterval = 30 # 心跳间隔(秒)
heartbeatTimeout = 90 # 心跳超时(秒)
Q4: 端口被占用?
# 查看端口占用
sudo lsof -i :7000
# 或
sudo netstat -tlnp | grep 7000
真实案例分享
案例1:我的居家办公神器
背景: 疫情期间居家办公,重要文件在公司电脑
解决方案: - 公司电脑:运行FRP客户端,暴露SSH - 家里电脑:通过FRP服务端连接公司SSH - 结果:像在公司一样操作公司电脑,老板完全不知道我在家!😎
案例2:给客户的临时演示环境
背景: 客户想看演示,但部署环境太复杂
解决方案: - 本地启动项目 - FRP暴露HTTP服务 - 给客户一个临时域名链接 - 演示结束关闭即可
案例3:家庭NAS远程访问
背景: 家里NAS存了很多电影,出差想看
解决方案: - NAS运行FRP客户端 - 暴露Web界面和SSH - 随时随地访问NAS
性能优化小贴士
1. 启用TCP多路复用
[common]
tcpMux = true
2. 调整连接池
[common]
poolCount = 5
3. 增加文件描述符限制
ulimit -n 65536
总结与建议
FRP 的优点
✅ 简单易用:配置简单,几分钟上手 ✅ 功能强大:支持多种协议和高级特性 ✅ 性能优秀:Go语言编写,性能稳定 ✅ 开源免费:完全开源,不花钱 ✅ 社区活跃:问题容易找到解决方案
何时使用 FRP?
✅ 临时需要访问内网服务 ✅ 不想购买昂贵的VPN设备 ✅ 需要灵活的端口映射 ✅ 预算有限但需求明确
何时不推荐使用?
❌ 需要极高的安全性(建议用专业VPN) ❌ 大流量生产环境(建议用专线) ❌ 对网络延迟非常敏感
最后的话
回到开头的故事——
那次我当然成功拿到了文件,老板还夸我效率高。从那以后,FRP成了我工具箱里的必备神器。
技术本身不难,难的是知道在什么场景用什么工具。
希望这篇文章能帮到你,让你在内网穿透的道路上少走弯路。如果你觉得有用,欢迎分享给更多需要的朋友!
相关资源:
- 📖 官方文档:https://github.com/fatedier/frp
- 💬 问题反馈:https://github.com/fatedier/frp/issues
- 🌟 给个Star:https://github.com/fatedier/frp
作者的话:
这篇文章花了我整整一个周末整理,如果对你有帮助,不如请我喝杯咖啡?☕️
发布时间: 2026-01-21 分类: 技术教程 标签: 内网穿透, FRP, 运维工具, 实用技巧
💡 温馨提示: 技术虽好,但记得注意安全哦!不要用这个做坏事,也不要把重要端口暴露给整个互联网。
评论 (0)
暂无评论,快来抢沙发吧~
发表评论