FRP 内网穿透实战:从零搭建专属公网访问通道
一、 什么是 FRP?
FRP(Fast Reverse Proxy)是一款专注于内网穿透的高性能反向代理应用。它支持 TCP、UDP、HTTP、HTTPS 等多种协议,能够将内网服务以安全、便捷的方式通过具有公网 IP 的节点暴露到公网。
简单来说,FRP 的核心架构分为两部分:
- 服务端(frps):部署在拥有公网 IP 的云服务器上,作为流量中转的“桥梁”。
- 客户端(frpc):部署在家庭或公司的内网设备上,主动与服务端建立加密通道。
二、 前期准备
在开始部署前,请确保你已准备好以下资源:
- 公网服务器:一台拥有固定公网 IPv4 的云服务器(推荐阿里云、腾讯云等,系统推荐 CentOS 或 Ubuntu)。
- 内网设备:运行本地服务的电脑(Windows/Linux 均可,如本地博客、NAS、远程桌面等)。
- FRP 安装包:前往 FRP 官方 GitHub 仓库([https://github.com/fatedier/frp/
三、 服务端(frps)部署
以下以 Linux 服务器为例
1. 上传并解压文件
将下载的 Linux 版本 FRP 压缩包上传至服务器,并解压:
bash
apt install wget -y
wget https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz
tar -zxvf frp_0.69.1_linux_amd64.tar.gz
cd frp_0.69.1_linux_amd642. 配置服务端
编辑服务端配置文件 frps.toml(新版 FRP 推荐使用 toml 格式):
toml
# 服务端与客户端通信的端口
bindPort = 7000
#日志
#log.to = "./frps.log"
log.level = "debug"
log.maxDays = 3
log.disablePrintColor = false
detailedErrorsToClient = true
# 身份验证配置
auth.method = "token"
auth.token = "YourStrongSecretToken123!" # 务必设置复杂密码
# 管理控制台配置(可选,用于查看运行状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"3. 开放防火墙端口
确保云服务器的安全组和本机防火墙已放行以下端口:
7000(FRP 核心通信端口)7500(管理控制台端口)- 后续穿透业务所需的端口(如 HTTP 的 80/8080,SSH 的 6000 等)
4. 启动服务端
bash
./frps -c ./frps.toml进阶建议:生产环境中,建议使用 systemd 配置开机自启和后台运行。方法在最后
四、 客户端(frpc)部署
1. 下载并解压文件
以下以 Windows 本地电脑为例
将下载的 windows 版本 FRP 压缩包下载到电脑,并解压:
bash
#下载地址,复制浏览器下载
https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_windows_amd64.zip
2. 解压文件
解压 Windows 版 FRP 压缩包,删除服务端文件(frps.exe 等),仅保留 frpc.exe 和 frpc.toml。
3. 配置客户端
编辑 frpc.toml,填入你的服务器公网 IP 和 Token:
toml
# 服务端公网 IP
serverAddr = "123.123.123.123"
serverPort = 7000
# 身份验证(必须与服务端一致)
auth.method = "token"
auth.token = "YourStrongSecretToken123!"
# 示例1:穿透 Windows 远程桌面 (RDP)
[[proxies]]
name = "windows-rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6000 # 外网通过 服务器IP:6000 访问3. 启动客户端
在命令行中运行:
cmd
./frpc.exe -c frpc.toml若控制台提示 start proxy success,即表示穿透通道建立成功!
五、进阶配置:使用 Systemd 注册守护进程(推荐)
直接通过命令行启动 FRP 时,一旦终端窗口关闭或 SSH 断开连接,服务就会随之停止。为了实现长期稳定运行,强烈建议使用 Linux 的 systemd 将其注册为守护进程。
1. 创建 Service 配置文件
使用文本编辑器(如 vim 或 nano)在 /etc/systemd/system/ 目录下创建服务文件。以服务端为例:
bash
sudo vim /etc/systemd/system/frps.service2. 写入服务配置
将以下代码粘贴到文件中。注意:请务必将 ExecStart 的路径修改为你实际的 FRP 存放路径!
ini
[Unit]
Description=FRP Server Service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
# 核心启动命令(请根据实际安装路径修改)
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
# 进程异常退出时自动重启
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target3. 重载并启动服务
保存并退出编辑器后,依次执行以下命令使配置生效并启动服务:
bash
# 1. 重新加载 systemd 配置
sudo systemctl daemon-reload
# 2. 启动 FRP 服务
sudo systemctl start frps
# 3. 设置开机自启
sudo systemctl enable frps
# 4. 查看运行状态(确认显示为 active (running))
sudo systemctl status frps常用管理命令速查:
- 停止服务:
sudo systemctl stop frps- 重启服务:
sudo systemctl restart frps- 查看实时日志:
sudo journalctl -u frps -f
(注:如果你需要为客户端配置守护进程,只需将上述步骤中的 frps 全部替换为 frpc,并将 ExecStart 指向客户端的配置文件即可。)
六、 常见问题排查
- 客户端无法连接服务端:检查服务器公网 IP 和
bindPort是否正确;确认云服务器安全组是否放行了对应端口;检查token是否完全一致。 - HTTP 穿透无法访问:确认域名已正确解析至服务器公网 IP;检查服务端是否配置了
vhostHTTPPort(新版为在客户端直接配置 type="http")。 - 访问速度慢或频繁断开:尝试在客户端开启数据压缩(
transport.useCompression = true);检查公网服务器的带宽是否达到瓶颈。
免责声明:内网穿透涉及网络安全,请严格遵守当地法律法规,切勿利用穿透工具搭建违规网站或从事非法活动。建议仅在个人学习、测试及合法办公场景下使用。
评论