frp
Abstract
frp 是一个快速反向代理工具,可以把位于 NAT 或防火墙后的本地服务暴露到公网。它支持 TCP、UDP、HTTP 和 HTTPS 协议,也可以通过域名把公网请求转发到内网服务。

常见的部署方式
公网服务器运行 frps,内网机器运行 frpc,外部用户访问公网服务器端口或域名后,请求会被转发到对应的内网服务。frp 也提供 P2P 连接模式,适合在网络条件允许时让客户端之间尽量直接通信。
网络规划
| 角色 | 组件 | 说明 |
|---|---|---|
| 公网服务器 | frps |
有公网 IP,负责接收外部连接 |
| 内网主机 | frpc |
连接 frps,把本地服务映射出去 |
示例目标:把内网主机 127.0.0.1:22 映射到公网服务器 6000 端口。
下载
在服务端和客户端都下载同一版本的 frp:
版本选择
版本号可以按需替换为 GitHub Releases 中的新版,但服务端和客户端建议保持一致。
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64
服务端配置
-
准备目录
sudo mkdir -p /etc/frp /opt/frp sudo cp frps /opt/frp/ sudo cp frps.toml /etc/frp/ -
编辑
/etc/frp/frps.tomlbindPort = 7000 auth.token = "<strong-token>" -
创建 systemd 服务
/etc/systemd/system/frps.service[Unit] Description=frp server After=network.target [Service] Type=simple ExecStart=/opt/frp/frps -c /etc/frp/frps.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target -
启动服务
sudo systemctl daemon-reload sudo systemctl enable --now frps sudo systemctl status frps
防火墙
公网服务器需要放行控制端口和被映射端口。
sudo ufw allow 7000/tcp
sudo ufw allow 6000/tcp
客户端配置
-
准备目录
sudo mkdir -p /etc/frp /opt/frp sudo cp frpc /opt/frp/ sudo cp frpc.toml /etc/frp/ -
编辑
/etc/frp/frpc.tomlserverAddr = "<server-public-ip>" serverPort = 7000 auth.token = "<strong-token>" [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 -
创建 systemd 服务
/etc/systemd/system/frpc.service[Unit] Description=frp client After=network.target [Service] Type=simple ExecStart=/opt/frp/frpc -c /etc/frp/frpc.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target -
启动服务
sudo systemctl daemon-reload sudo systemctl enable --now frpc sudo systemctl status frpc
访问内网 SSH
从外部机器连接:
ssh -p 6000 <user>@<server-public-ip>
映射 Web 服务
如果内网 Web 服务监听 127.0.0.1:8080,可以增加一个代理:
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080
然后访问:
curl http://<server-public-ip>:8080
常用维护命令
sudo systemctl status frps
sudo systemctl restart frps
sudo journalctl -u frps -f
sudo systemctl status frpc
sudo systemctl restart frpc
sudo journalctl -u frpc -f
排查
frpc连接不上:检查serverAddr、serverPort、公网安全组、auth.token。- 外部访问失败:检查
remotePort是否放行,内网服务是否正常监听。 - 端口冲突:更换
remotePort,并同步更新防火墙和访问命令。