内网穿透系列(一):还在为公网IP发愁?frp教你“打洞”回家!
想让家里的 NAS、旧电脑、摄像头或本地开发服务在外网访问?但家里没有公网 IP,路由器端口映射和防火墙配置又让人头疼。
本文介绍免费开源的内网穿透工具 frp,用公网服务器中转流量,让内网服务获得“公网身份”。

项目地址:https://github.com/fatedier/frp
版本提示: 本文截图和配置来自 2025 年 8 月。frp 配置项会随版本调整,请使用官方最新稳定版,并以官方文档为准。
一、frp 的工作原理
frp 分为两部分:
frps:服务端,部署在有公网 IP 的云服务器上,负责接收外网请求并转发流量。frpc:客户端,部署在内网设备上,主动连接frps并建立隧道。
外网请求先到达 frps,再通过隧道交给内网的 frpc,最后转发给本机或其他局域网服务。即使内网没有公网 IP,也可以通过这种方式对外提供服务。
二、准备事项
- 一台有公网 IP 的云服务器;
- 一台需要穿透的内网设备;
- 如需 HTTPS 和域名访问,准备一个域名。
三、部署 frps
1. 下载 frp
进入 frp Releases,根据系统选择压缩包:
- Linux 服务器:
frp_xxx_linux_amd64.tar.gz - Windows 设备:
frp_xxx_windows_amd64.zip


2. 配置服务端
把 frps 和 frps.toml 上传到云服务器,示例配置:
1 | bindPort = 7000 |
安全提示: 示例中的简单令牌只用于演示。生产环境请使用长随机令牌,并只放行必要端口。
临时启动:
1 | cd /opt/frps |

3. 使用 systemd 管理服务
创建 /etc/systemd/system/frps.service:
1 | cat >/etc/systemd/system/frps.service<<EOF |
常用命令:
1 | sudo systemctl start frps |

记得在云服务器的安全组或防火墙放行 7000、443 和实际使用的远程端口。
四、部署 frpc
把 frpc 和 frpc.toml 放到内网设备上。
1. HTTPS 服务示例
1 | serverAddr = "你的云服务器公网IP" |
域名需要解析到云服务器公网 IP。本文示例使用 Cloudflare 客户端证书:


如果使用 Cloudflare DNS,并且 frp 直接处理证书,先关闭该记录的 CDN 代理。

2. TCP 服务示例
例如把内网 3002 端口映射到公网 9000:
1 | serverAddr = "你的云服务器公网IP" |
3. 启动客户端
1 | chmod +x frpc |

也可以创建 /etc/systemd/system/frpc.service:
1 | cat >/etc/systemd/system/frpc.service<<EOF |

五、验证访问
- HTTPS 代理:使用绑定的域名访问,例如
https://home.example.com; - TCP 代理:使用
服务器公网IP:remotePort访问。


六、安全建议
- 使用强随机令牌,不要复用示例值;
- 只放行必要的代理端口;
- 为被穿透服务设置强密码和访问控制;
- 定期更新 frp 和系统补丁;
- 敏感服务优先加入 VPN、访问列表或 Cloudflare Access。
更多用法见 frp 中文文档。
总结
frp 是一个轻量、稳定的内网穿透方案,适合有公网服务器、希望完全自主控制的用户。部署的关键不是“跑起来”,而是令牌安全、端口收敛和被穿透服务本身的防护。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小明同学!
评论



