🌉 家里的服务器如何上外网?FRP 内网穿透实战指南
🌉 家里的服务器如何上外网?FRP 内网穿透实战指南
你有一台旧电脑放在家里跑着博客,很自豪对吧?但是... 只有你能访问 😢
今天我们来解决这个问题,让你的家庭服务器"重见天日"!🌍
🏠 场景说明
你有
- ✅ 一台 24 小时开着的电脑/服务器
- ✅ 上面跑了很棒的服务(博客、网站等)
- ✅ 本地访问正常
http://localhost:5000
但是
- ❌ 没有公网 IP(家庭宽带)
- ❌ 路由器不能做端口映射
- ❌ 外面的朋友访问不了
怎么办?
答案:内网穿透! 🚇
🎯 什么是内网穿透?
想象一下:
text
1 2 3 4 | 你家(内网)
↓ 有围墙
外面的世界(互联网)
↓ 进不去
|
内网穿透就像打隧道:
text
1 2 3 4 5 | 外面的世界 🌍
↓
[云服务器 - 有公网 IP] 🏢
↓ 🚇 隧道
你的电脑(内网)🏠
|
🛠️ 方案对比
| 方案 | 难度 | 成本 | 速度 | 推荐度 |
|---|---|---|---|---|
| FRP | ⭐⭐ | 💰💰 | 🚀🚀🚀 | ⭐⭐⭐⭐⭐ |
| Ngrok | ⭐ | 💰💰💰 | 🚀🚀 | ⭐⭐⭐⭐ |
| Cloudflare Tunnel | ⭐⭐ | 🆓 | 🚀🚀🚀 | ⭐⭐⭐⭐⭐ |
| 花生壳 | ⭐ | 💰💰💰💰 | 🚀 | ⭐⭐ |
本文重点:FRP(Fast Reverse Proxy)
📦 准备工作
需要
一台云服务器(VPS)
- 阿里云、腾讯云、搬瓦工等
- 最便宜的配置就够(1 核 1G)
- 必须有公网 IP
一个域名(可选但推荐)
- 可以不要,用 IP 也能访问
- 有域名更专业
家庭服务器
- 你的博客运行在这里
🚀 第一步:配置 FRP 服务器
下载 FRP
去 GitHub Releases 下载:
bash
1 2 3 4 5 6 | # 服务器端(云服务器) wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 解压 tar xzf frp_0.52.3_linux_amd64.tar.gz cd frp_0.52.3_linux_amd64 |
配置服务器
frps.toml
toml
1 2 3 4 5 6 7 8 9 10 11 12 | [common] # 监听端口 bindPort = 7000 # Dashboard(可选,管理界面) webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "设置强密码" # 认证 Token auth.token = "生成一个随机字符串" |
生成 Token:
bash
1 | openssl rand -hex 32 |
启动服务器
bash
1 2 3 4 | # 测试启动 ./frps -c frps.toml # 看到 "start frps success" 就成功了 |
配置 Systemd 服务
/etc/systemd/system/frps.service
ini
1 2 3 4 5 6 7 8 9 10 11 12 | [Unit] Description=FRP Server After=network.target [Service] Type=simple User=root ExecStart=/opt/frp/frps -c /opt/frp/frps.toml Restart=always [Install] WantedBy=multi-user.target |
bash
1 2 3 4 | # 启动服务 sudo systemctl enable frps sudo systemctl start frps sudo systemctl status frps |
🏠 第二步:配置 FRP 客户端
在家庭服务器上操作
bash
1 2 3 4 | # 下载同样的 FRP 程序 wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz tar xzf frp_0.52.3_linux_amd64.tar.gz cd frp_0.52.3_linux_amd64 |
配置客户端
frpc.toml
toml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [common] # 服务器地址 serverAddr = "你的云服务器IP" serverPort = 7000 # 认证 Token(和服务器一样) auth.token = "和服务器相同的token" [[proxies]] # 隧道名称 name = "blog" # 类型:http type = "http" # 本地服务地址 localIP = "127.0.0.1" localPort = 5000 # 域名(如果有) customDomains = ["blog.yourdomain.com"] |
启动客户端
bash
1 2 3 4 | # 测试启动 ./frpc -c frpc.toml # 看到 "start proxy success" 就成功了 |
配置 Systemd 服务
/etc/systemd/system/frpc.service
ini
1 2 3 4 5 6 7 8 9 10 11 12 13 | [Unit] Description=FRP Client After=network.target [Service] Type=simple User=你的用户名 ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml Restart=always RestartSec=5 [Install] WantedBy=multi-user.target |
bash
1 2 3 4 5 | # 启动服务 sudo systemctl daemon-reload sudo systemctl enable frpc sudo systemctl start frpc sudo systemctl status frpc |
🌐 第三步:配置域名(可选)
如果有域名
在域名 DNS 设置中添加:
text
1 2 3 | 类型: CNAME 名称: blog 值: 你的云服务器IP |
或者 A 记录直接指向 IP。
如果没有域名
直接用 IP 访问:http://云服务器IP
✅ 第四步:测试访问
1. 检查 FRP 状态
服务器端:
bash
1 2 3 4 5 | # 查看 FRP 日志 sudo journalctl -u frps -f # 或查看 Dashboard http://云服务器IP:7500 |
客户端:
bash
1 2 3 4 | # 查看 FRP 日志 sudo journalctl -u frpc -f # 应该看到 "login to server success" |
2. 测试访问
bash
1 2 3 4 5 | # 从外网测试 curl http://blog.yourdomain.com # 或 curl http://云服务器IP |
3. 浏览器访问
text
1 | http://blog.yourdomain.com |
成功的话,你的博客就能从外网访问了! 🎉
🔒 安全加固
1. 修改端口
toml
1 2 | # 不要用默认端口 serverPort = 7000 # 改成其他端口 |
2. 启用加密
toml
1 2 3 4 5 6 | [common] # 传输加密 use_encryption = true # 压缩传输 use_compression = true |
3. 访问控制
toml
1 2 3 4 5 6 7 8 | [[proxies]] name = "blog" type = "http" # 只允许特定域名访问 customDomains = ["blog.yourdomain.com"] # HTTP 用户验证 httpUser = "username" httpPassword = "password" |
📊 监控和管理
FRP Dashboard
访问:http://云服务器IP:7500
可以查看: - 连接状态 - 流量统计 - 代理信息 - 客户端列表
命令行查看
bash
1 2 3 4 5 6 7 8 | # 查看连接 sudo netstat -anp | grep frp # 查看进程 ps aux | grep frp # 查看日志 tail -f /var/log/frp.log |
🚨 常见问题
问题 1:无法连接到服务器
检查:
bash
1 2 3 4 5 6 7 8 | # 1. 服务器防火墙 sudo ufw allow 7000/tcp # 2. 云服务器安全组 # 在云控制台添加 7000 端口规则 # 3. 测试连通性 telnet 服务器IP 7000 |
问题 2:连接成功但访问不了
检查:
bash
1 2 3 4 5 6 7 8 | # 1. 本地服务是否运行 curl http://localhost:5000 # 2. 客户端日志 sudo journalctl -u frpc -n 50 # 3. 代理配置 # 确认 localIP 和 localPort 正确 |
问题 3:连接经常断开
原因:网络不稳定
解决:
toml
1 2 3 4 5 6 | [common] # 心跳间隔 heartbeatInterval = 10 # 超时时间 heartbeatTimeout = 90 |
💡 进阶用法
1. 多个服务
toml
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 博客 [[proxies]] name = "blog" type = "http" localPort = 5000 customDomains = ["blog.yourdomain.com"] # 另一个服务 [[proxies]] name = "app" type = "http" localPort = 8000 customDomains = ["app.yourdomain.com"] |
2. TCP 隧道(SSH)
toml
1 2 3 4 5 6 | [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 |
然后可以从外网 SSH:
bash
1 | ssh -p 6000 用户@云服务器IP |
3. HTTPS
如果你有 SSL 证书,可以在 FRP 层面启用:
toml
1 2 3 4 5 6 | [[proxies]] name = "blog" type = "https" localIP = "127.0.0.1" localPort = 5000 customDomains = ["blog.yourdomain.com"] |
🎉 成功案例
我的配置
text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 云服务器:阿里云 1 核 1G - IP:X.X.X.X - 带宽:1 Mbps - 成本:60 元/年 家庭服务器: - 旧电脑(i3-4130,8G 内存) - 运行:Flask 博客 + 其他服务 - 成本:0 元(本来就闲置) 域名: - .top 域名 - 成本:10 元/年 总成本:70 元/年 ≈ 6 元/月 ☕ |
性能表现
| 指标 | 数值 |
|---|---|
| 访问速度 | 1-2 秒 |
| 并发能力 | 10+ 并发 |
| 可用性 | 99%+ |
| 流量限制 | 取决于云服务器带宽 |
📚 总结
优点
✅ 成本低(云服务器便宜) ✅ 配置简单(一条命令搞定) ✅ 性能稳定(速度快) ✅ 功能强大(支持多种协议)
缺点
❌ 需要云服务器 ❌ 依赖服务器稳定性 ❌ 安全需要注意
适用场景
- 家庭服务器对外提供服务
- 开发环境临时测试
- 小型个人项目
- 学习网络知识
🔗 相关资源
💬 互动
你有什么内网穿透的经验吗?
- 用过哪些工具?
- 遇到过什么坑?
- 有什么心得体会?
欢迎在评论区分享!🎤
下一篇预告:如何用 Cloudflare Tunnel 免费(0 元)做内网穿透!💰
0 人点赞
评论 (0)
暂无评论,快来抢沙发吧~
发表评论