繁华依在的小站

FRP 内网通透玩指南

技术 作者:admin | 发布时间:2026-01-20 16:49 | 更新时间:2026-04-09 01:44 | 阅读:33 |
标签: 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/树莓派等) - ✅ 一杯咖啡(可选,但推荐)

第一步:服务端安装(中转站)

登录你的公网服务器,执行以下命令:

```bash

下载FRP(选择适合你系统的版本)

wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp0.53.2linux_amd64.tar.gz

解压

tar -xzf frp0.53.2linuxamd64.tar.gz cd frp0.53.2linuxamd64

创建配置文件(密码记得改复杂点!)

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 & ```

恭喜!你的中转站已经建好了! 🎉

第二步:防火墙配置(别忘记这步!)

```bash

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回家里电脑

在家里电脑上创建配置文件:

```bash

创建 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 ```

测试连接:

现在你在公司电脑上执行:

bash ssh -p 6000 你的用户名@123.45.67.89

神奇的事情发生了: 你成功连接到了家里电脑!🎊

场景2:本地Web服务暴露

需求: 给客户演示本地开发的项目

```toml [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数据库

toml [[proxies]] name = "mysql-home" type = "tcp" localPort = 3306 remotePort = 6306

连接方式:

bash mysql -h 123.45.67.89 -P 6306 -u root -p


进阶玩法(装X必备)

1. 多服务同时穿透

家里有好多服务需要穿透?一个配置文件全搞定:

```toml [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)

这是什么? 只有知道暗号的人才能访问,安全性更高!

```toml

被访问端配置

[[proxies]] name = "secret_ssh" type = "stcp" localPort = 22 sk = "只有我知道的暗号"

访客端配置(需要单独配置)

[[visitors]] name = "secretsshvisitor" type = "stcp" serverName = "secret_ssh" sk = "只有我知道的暗号" bindAddr = "127.0.0.1" bindPort = 6000 ```

3. 加密传输

给数据传输加把锁:

toml [[proxies]] name = "secure-db" type = "tcp" localPort = 3306 remotePort = 6306 useEncryption = true # 加密 useCompression = true # 压缩(省流量)

4. 带宽限制

防止某个服务把带宽吃光:

toml [[proxies]] name = "limited-web" type = "http" localPort = 80 customDomains = ["slow.yourdomain.com"] bandwidthLimit = "1MB" # 限制1MB/s


Dashboard 管理界面(可视化管理)

启动服务端后,访问 http://你的服务器IP:7500,输入用户名密码,你就能看到:

  • 📊 客户端连接状态
  • 📈 代理列表和流量统计
  • 🔗 连接信息详情

简直就是一个控制台! 看起来特别专业!


实用小技巧

技巧1:开机自启动

不想每次重启都要手动启动?用 systemd:

```bash

创建服务文件

sudo vim /etc/systemd/system/frps.service ```

```ini [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 ```

```bash

启用开机自启

sudo systemctl enable frps sudo systemctl start frps

查看状态

sudo systemctl status frps ```

技巧2:查看日志

```bash

实时查看服务端日志

tail -f /opt/frp/frps.log

查看客户端日志

tail -f /opt/frp/frpc.log ```

技巧3:健康检查

让客户端自动检测本地服务是否正常:

toml [[proxies]] name = "web-with-health" type = "tcp" localPort = 80 remotePort = 8080 healthCheckType = "tcp" healthCheckIntervalS = 10 # 每10秒检查一次 healthCheckMaxFailed = 3 # 失败3次标记为离线 healthCheckTimeoutS = 3


安全建议(重要!)

1. 使用强密码

```bash

生成随机密码

openssl rand -hex 16 ```

2. 修改默认端口

不要使用默认端口,改成自己记得的数字:

toml bindPort = 7XXX # 改成你喜欢的数字

3. 限制Dashboard访问

只允许本地访问,通过SSH隧道连接:

toml [webServer] addr = "127.0.0.1" # 只监听本地 port = 7500

然后使用SSH隧道:

```bash 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: 连接经常断开?

增加心跳时间:

```toml [common] serverAddr = "服务器IP" serverPort = 7000 auth.token = "密码"

心跳配置

heartbeatInterval = 30 # 心跳间隔(秒) heartbeatTimeout = 90 # 心跳超时(秒) ```

Q4: 端口被占用?

```bash

查看端口占用

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多路复用

toml [common] tcpMux = true

2. 调整连接池

toml [common] poolCount = 5

3. 增加文件描述符限制

bash 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)

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

发表评论