内网穿透系列(一):还在为公网IP发愁?frp教你“打洞”回家!

嘿,各位技术宅们!大家好,我是小明同学。
你是不是也遇到过这种“甜蜜的烦恼”:
-
家里有台吃灰的旧电脑,想搭个NAS,在外网随时访问照片、电影?
-
想远程控制家里的电脑,但公司网络限制重重,TeamViewer都连不上?
-
自己写了个酷炫的Web应用,想给朋友展示,但又没服务器,只能在本地跑?
-
想在外地访问家里的监控摄像头,看看毛孩子有没有捣乱?
是不是每次一想到“公网IP”、“路由器端口映射”、“防火墙”这些词,头就大了?感觉就像隔着一堵厚厚的墙,想回家却找不到门?
别急!今天,我就要给你介绍一个免费、开源、超好用的“打洞神器”——frp!
项目地址:https://github.com/fatedier/frp

它能帮你轻松穿透内网,让你的家庭服务器、本地应用、远程桌面,都能像拥有公网IP一样,被外网轻松访问!
frp 是个啥?它怎么“打洞”?
简单来说,frp 就是一个内网穿透工具。你可以把它想象成一个“快递中转站”和“快递员”的组合。
-
frps** (frp server):快递中转站** -
它需要部署在一台拥有公网IP的服务器上(比如你租的云服务器,阿里云、腾讯云、华为云等等)。它的作用是接收来自外网的请求,并把这些请求转发给正确的“快递员”。
-
frpc** (frp client):快递员** -
它部署在你的内网设备上(比如家里的电脑、NAS、树莓派)。它会主动连接到“快递中转站”(
frps),建立一条稳定的“秘密通道”(隧道)。当“中转站”收到外网的请求时,它会通过这条“秘密通道”把请求转交给对应的“快递员”,然后“快递员”再把内网服务的响应传回去。
核心原理就是: 内网设备(frpc)主动向公网服务器(frps)发起连接,建立一条持久的隧道。这样,即使内网没有公网IP,也能通过这条隧道与外网进行通信。
为什么选 frp?它有啥优点?
-
免费开源:白嫖党的福音!GitHub上代码完全公开,安全可靠。
-
配置简单:相比其他复杂的方案,
frp的配置简直是傻瓜式,几行代码就能搞定。 -
功能强大:
-
支持多种协议:HTTP、HTTPS、TCP、UDP,甚至SSH、远程桌面、FTP,统统不在话下!域名绑定:可以直接用你的域名访问内网服务,比如
myhome.yourdomain.com。安全性:支持加密通信和身份验证,保障数据安全。 -
性能高效:用Go语言编写,性能杠杠的,稳定不掉线。
怎么用 frp?实战演练!
别看原理有点绕,实际操作起来,简单到让你怀疑人生!
准备工作:
-
一台有公网IP的云服务器(比如最低配的ECS/CVM,一年几十块钱那种就够了)。
-
一台你想穿透的内网设备(比如你的Windows电脑、Linux服务器、NAS)。
第一步:下载 frp
去 frp 的 GitHub Release 页面下载最新版本:
https://github.com/fatedier/frp/releases

根据你的服务器和内网设备的操作系统和架构,选择对应的压缩包。比如:
-
Linux服务器:
frp_xxx_linux_amd64.tar.gz -
Windows电脑:
frp_xxx_windows_amd64.zip
下载后解压,你会看到 frps、frps.toml (服务器端) 和 frpc、frpc.toml (客户端) 等文件。

第二步:配置并启动 frps (服务器端)
把 frps 和 frps.toml 传到你的云服务器上。
编辑 frps.toml 文件,最简单的配置如下:
# frps.toml
bindPort=7000# frp服务端口,客户端连接用
vhostHTTPSPort=443# # 启用 HTTPS
auth.method="token"# 使用令牌进行身份验证
auth.token="helloworld"# 令牌,客户端与服务端一致才能连接成功 推荐配置复杂一点保存后,在服务器上运行 frps:
命令行执行
# 进入frp目录
cd /opt/frps
# 添加可执行权限
chmod +x frps
# 启动frps (推荐使用nohup后台运行)
nohup ./frps -c ./frps.toml &
使用 systemd控制frps(推荐)
1.安装 systemd
如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd # 使用 apt 安装 systemd(Debian/Ubuntu)
aptinstall systemd2.创建 frps.service 文件
cat>/etc/systemd/system/frps.service<<EOF
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target [Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frps/frps -c /opt/frps/frps.toml [Install]
WantedBy = multi-user.target
EOF3.使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置 frps 开机自启动
sudo systemctl enable frps
别忘了在你的云服务器安全组/防火墙里,放行 7000、443 等端口!
第三步:配置并启动 frpc (客户端)
把 frpc 和 frpc.toml 传到你的内网设备上。
编辑 frpc.toml 文件。这里我们以穿透一个本地的Web服务并https访问(比如你本地跑在 7892 端口的网站)为例:
# frpc.toml
serverAddr="你的云服务器公网IP"# 填写你的云服务器IP
serverPort=7000# 和frps.toml里的bindPort一致 auth.method="token"
auth.token="helloworld"# 令牌,必须与服务端一致 否则无法连接 [[proxies]]
name="web"# 这是一个代理名称,可以随便起
type="https"# 代理类型,这里是HTTP
customDomains=["dm.laolang.dpdns.org"]# 绑定自己的域名 [proxies.plugin]
type="https2http"
localAddr="127.0.0.1:7892"# 内网服务地址 # HTTPS 证书相关的配置
crtPath="./server.crt"
keyPath="./server.key"
hostHeaderRewrite="127.0.0.1"
requestHeaders.set.x-from-where="frp"请注意,您需要根据您的域名和证书路径自行更改上述配置。 我这里使用Cloudflare的客户端证书,自行创建

自己复制内容到对应证书文件中,最后点击确定。

在自己的域名服务商哪里添加域名,记录值就是你的云服务器公网IP,我这里使用Cloudflare进行演示,注意关掉CDN代理,就是那个小黄云。

保存后,在内网设备上运行 frpc:
命令行执行
# 进入frp目录
cd /path/to/your/frp # 启动frpc (Windows双击frpc.exe或命令行运行,Linux推荐nohup)
# 添加可执行权限
chmod +x frpc
# Linux:
nohup ./frpc -c ./frpc.toml &
# Windows:
frpc.exe -c frpc.toml
使用 systemd控制frpc(推荐) 配置参考上面
cat>/etc/systemd/system/frpc.service<<EOF
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target [Service]
Type = simple
# 启动frpc的命令,需修改为您的frpc的安装路径
ExecStart = /opt/frpc/frpc -c /opt/frpc/frpc.toml [Install]
WantedBy = multi-user.target
EOF
代理TCP服务,端口号3002,配置如下(可以配置多个proxies):
# frpc.toml
serverAddr="你的云服务器公网IP"# 填写你的云服务器IP
serverPort=7000# 和frps.toml里的bindPort一致 auth.method="token"
auth.token="helloworld"# 令牌,必须与服务端一致 否则无法连接
[[proxies]]
name="sunpanel"
type="tcp"
localIP="127.0.0.1"
localPort=3002
remotePort=9000第四步:验证!
如果一切顺利,现在你就可以通过外网访问你的内网服务了!直接访问 https://dm.laolang.dpdns.org。

访问我们代理的TCP服务,浏览器输入服务器IP:remotePort

是不是超简单?你的内网服务,瞬间就拥有了“公网身份”!
总结一下
frp 就像一把万能钥匙,帮你打开了内网和外网之间的那扇门。无论是远程办公、搭建个人博客、分享文件,还是远程控制家里的智能设备,它都能帮你轻松搞定。
这只是 frp 的冰山一角,它还有很多高级玩法,比如TCP穿透、UDP穿透、身份验证、Dashboard监控等等。
更多用法请查看官网文档:https://gofrp.org/zh-cn/
赶紧动手试试吧!让你的内网服务,也能在互联网上“C位出道”!
觉得有用的话,别忘了点赞、分享、收藏,让更多小伙伴知道这个神器!我们下期再见!👋
好了,以上就是今天给大家分享的内容,我是爱分享的小明同学,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~

📚 往期推荐
