繁华依在的小站

🌉 家里的服务器如何上外网?FRP 内网穿透实战指南

技术 作者:admin | 发布时间:2026-02-03 16:14 | 更新时间:2026-04-09 00:26 | 阅读:10 |
标签: FRP 内网穿透 服务器 网络 家庭服务器

🌉 家里的服务器如何上外网?FRP 内网穿透实战指南

你有一台旧电脑放在家里跑着博客,很自豪对吧?但是... 只有你能访问 😢

今天我们来解决这个问题,让你的家庭服务器"重见天日"!🌍


🏠 场景说明

你有

  • ✅ 一台 24 小时开着的电脑/服务器
  • ✅ 上面跑了很棒的服务(博客、网站等)
  • ✅ 本地访问正常 http://localhost:5000

但是

  • ❌ 没有公网 IP(家庭宽带)
  • ❌ 路由器不能做端口映射
  • ❌ 外面的朋友访问不了

怎么办?

答案:内网穿透! 🚇


🎯 什么是内网穿透?

想象一下:

text
1你家(内网)
2    ↓ 有围墙
3外面的世界(互联网)
4    ↓ 进不去

内网穿透就像打隧道

text
1外面的世界 🌍
23[云服务器 - 有公网 IP] 🏢
4    ↓ 🚇 隧道
5你的电脑(内网)🏠

🛠️ 方案对比

方案 难度 成本 速度 推荐度
FRP ⭐⭐ 💰💰 🚀🚀🚀 ⭐⭐⭐⭐⭐
Ngrok 💰💰💰 🚀🚀 ⭐⭐⭐⭐
Cloudflare Tunnel ⭐⭐ 🆓 🚀🚀🚀 ⭐⭐⭐⭐⭐
花生壳 💰💰💰💰 🚀 ⭐⭐

本文重点:FRP(Fast Reverse Proxy)


📦 准备工作

需要

  1. 一台云服务器(VPS)

    • 阿里云、腾讯云、搬瓦工等
    • 最便宜的配置就够(1 核 1G)
    • 必须有公网 IP
  2. 一个域名(可选但推荐)

    • 可以不要,用 IP 也能访问
    • 有域名更专业
  3. 家庭服务器

    • 你的博客运行在这里

🚀 第一步:配置 FRP 服务器

下载 FRP

GitHub Releases 下载:

bash
1# 服务器端(云服务器)
2wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
3
4# 解压
5tar xzf frp_0.52.3_linux_amd64.tar.gz
6cd frp_0.52.3_linux_amd64

配置服务器

frps.toml

toml
 1[common]
 2# 监听端口
 3bindPort = 7000
 4
 5# Dashboard(可选,管理界面)
 6webServer.addr = "0.0.0.0"
 7webServer.port = 7500
 8webServer.user = "admin"
 9webServer.password = "设置强密码"
10
11# 认证 Token
12auth.token = "生成一个随机字符串"

生成 Token

bash
1openssl rand -hex 32

启动服务器

bash
1# 测试启动
2./frps -c frps.toml
3
4# 看到 "start frps success" 就成功了

配置 Systemd 服务

/etc/systemd/system/frps.service

ini
 1[Unit]
 2Description=FRP Server
 3After=network.target
 4
 5[Service]
 6Type=simple
 7User=root
 8ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
 9Restart=always
10
11[Install]
12WantedBy=multi-user.target
bash
1# 启动服务
2sudo systemctl enable frps
3sudo systemctl start frps
4sudo systemctl status frps

🏠 第二步:配置 FRP 客户端

在家庭服务器上操作

bash
1# 下载同样的 FRP 程序
2wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
3tar xzf frp_0.52.3_linux_amd64.tar.gz
4cd frp_0.52.3_linux_amd64

配置客户端

frpc.toml

toml
 1[common]
 2# 服务器地址
 3serverAddr = "你的云服务器IP"
 4serverPort = 7000
 5
 6# 认证 Token(和服务器一样)
 7auth.token = "和服务器相同的token"
 8
 9[[proxies]]
10# 隧道名称
11name = "blog"
12
13# 类型:http
14type = "http"
15
16# 本地服务地址
17localIP = "127.0.0.1"
18localPort = 5000
19
20# 域名(如果有)
21customDomains = ["blog.yourdomain.com"]

启动客户端

bash
1# 测试启动
2./frpc -c frpc.toml
3
4# 看到 "start proxy success" 就成功了

配置 Systemd 服务

/etc/systemd/system/frpc.service

ini
 1[Unit]
 2Description=FRP Client
 3After=network.target
 4
 5[Service]
 6Type=simple
 7User=你的用户名
 8ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml
 9Restart=always
10RestartSec=5
11
12[Install]
13WantedBy=multi-user.target
bash
1# 启动服务
2sudo systemctl daemon-reload
3sudo systemctl enable frpc
4sudo systemctl start frpc
5sudo systemctl status frpc

🌐 第三步:配置域名(可选)

如果有域名

在域名 DNS 设置中添加:

text
1类型: CNAME
2名称: blog
3值: 你的云服务器IP

或者 A 记录直接指向 IP。

如果没有域名

直接用 IP 访问:http://云服务器IP


✅ 第四步:测试访问

1. 检查 FRP 状态

服务器端

bash
1# 查看 FRP 日志
2sudo journalctl -u frps -f
3
4# 或查看 Dashboard
5http://云服务器IP:7500

客户端

bash
1# 查看 FRP 日志
2sudo journalctl -u frpc -f
3
4# 应该看到 "login to server success"

2. 测试访问

bash
1# 从外网测试
2curl http://blog.yourdomain.com
3
4# 或
5curl http://云服务器IP

3. 浏览器访问

text
1http://blog.yourdomain.com

成功的话,你的博客就能从外网访问了! 🎉


🔒 安全加固

1. 修改端口

toml
1# 不要用默认端口
2serverPort = 7000  # 改成其他端口

2. 启用加密

toml
1[common]
2# 传输加密
3use_encryption = true
4
5# 压缩传输
6use_compression = true

3. 访问控制

toml
1[[proxies]]
2name = "blog"
3type = "http"
4# 只允许特定域名访问
5customDomains = ["blog.yourdomain.com"]
6# HTTP 用户验证
7httpUser = "username"
8httpPassword = "password"

📊 监控和管理

FRP Dashboard

访问:http://云服务器IP:7500

可以查看: - 连接状态 - 流量统计 - 代理信息 - 客户端列表

命令行查看

bash
1# 查看连接
2sudo netstat -anp | grep frp
3
4# 查看进程
5ps aux | grep frp
6
7# 查看日志
8tail -f /var/log/frp.log

🚨 常见问题

问题 1:无法连接到服务器

检查

bash
1# 1. 服务器防火墙
2sudo ufw allow 7000/tcp
3
4# 2. 云服务器安全组
5# 在云控制台添加 7000 端口规则
6
7# 3. 测试连通性
8telnet 服务器IP 7000

问题 2:连接成功但访问不了

检查

bash
1# 1. 本地服务是否运行
2curl http://localhost:5000
3
4# 2. 客户端日志
5sudo journalctl -u frpc -n 50
6
7# 3. 代理配置
8# 确认 localIP 和 localPort 正确

问题 3:连接经常断开

原因:网络不稳定

解决

toml
1[common]
2# 心跳间隔
3heartbeatInterval = 10
4
5# 超时时间
6heartbeatTimeout = 90

💡 进阶用法

1. 多个服务

toml
 1# 博客
 2[[proxies]]
 3name = "blog"
 4type = "http"
 5localPort = 5000
 6customDomains = ["blog.yourdomain.com"]
 7
 8# 另一个服务
 9[[proxies]]
10name = "app"
11type = "http"
12localPort = 8000
13customDomains = ["app.yourdomain.com"]

2. TCP 隧道(SSH)

toml
1[[proxies]]
2name = "ssh"
3type = "tcp"
4localIP = "127.0.0.1"
5localPort = 22
6remotePort = 6000

然后可以从外网 SSH:

bash
1ssh -p 6000 用户@云服务器IP

3. HTTPS

如果你有 SSL 证书,可以在 FRP 层面启用:

toml
1[[proxies]]
2name = "blog"
3type = "https"
4localIP = "127.0.0.1"
5localPort = 5000
6customDomains = ["blog.yourdomain.com"]

🎉 成功案例

我的配置

text
 1云服务器:阿里云 1 核 1G
 2  - IP:X.X.X.X
 3  - 带宽:1 Mbps
 4  - 成本:60 元/年
 5
 6家庭服务器:
 7  - 旧电脑(i3-4130,8G 内存)
 8  - 运行:Flask 博客 + 其他服务
 9  - 成本:0 元(本来就闲置)
10
11域名:
12  - .top 域名
13  - 成本:10 元/年
14
15总成本:70 元/年 ≈ 6 元/月 ☕

性能表现

指标 数值
访问速度 1-2 秒
并发能力 10+ 并发
可用性 99%+
流量限制 取决于云服务器带宽

📚 总结

优点

✅ 成本低(云服务器便宜) ✅ 配置简单(一条命令搞定) ✅ 性能稳定(速度快) ✅ 功能强大(支持多种协议)

缺点

❌ 需要云服务器 ❌ 依赖服务器稳定性 ❌ 安全需要注意

适用场景

  • 家庭服务器对外提供服务
  • 开发环境临时测试
  • 小型个人项目
  • 学习网络知识

🔗 相关资源


💬 互动

你有什么内网穿透的经验吗?

  • 用过哪些工具?
  • 遇到过什么坑?
  • 有什么心得体会?

欢迎在评论区分享!🎤


下一篇预告:如何用 Cloudflare Tunnel 免费(0 元)做内网穿透!💰

评论 (0)

暂无评论,快来抢沙发吧~

发表评论