繁华依在的小站

FRP 内网通透玩指南

技术 作者:admin | 发布时间:2026-01-20 16:49 | 更新时间:2026-02-07 17:49 | 阅读:16 |
标签: 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)

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

发表评论