什么是FRP
frp 是什么?
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
为什么选择 frp?
通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:
- 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
- TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用:多个服务可以通过同一个服务端端口暴露。
- P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
- 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
- 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
- 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
官网:https://gofrp.org/zh-cn/docs/overview/
开源地址:https://github.com/fatedier/frp/releases
安装步骤
1、首先需要备一个具备公网IP 的云服务器
2、然后在该服务器上安装FRP 服务端
1 2 3 4 5
| wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
tar -zxvf frp_0.59.0_linux_amd64.tar.gz -C /usr/local
|
进入 /etc/systemd/system/ 目录建立新的文件 frps.service 配置成Systemd服务
frps.service 中填写如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [Unit] Description=frps service After=network.target syslog.target Wants=network.target [Service] Type=simple
Restart=on-failure RestartSec=5s
ExecStart=/usr/local/frp_0.65.0_linux_amd64/frps -c /usr/local/frp_0.65.0_linux_amd64/frps.toml [Install] WantedBy=multi-user.target
|
注意,云服务器中要配置安全规则,放行7000,7500,7001, 6000等端口。

然后配置frps.toml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [common] bind_port = 7000 kcp_bind_port = 7000 vhost_https_port = 7001 dashboard_addr = 0.0.0.0 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin log_file = ./frps.log log_level = info log_max_days = 3 authentication_timeout = 900 token=mowangmowang allow_ports = 2000-3000,3001,3003,4000-50000,3362 max_pool_count = 50 max_ports_per_client = 0
|
最后设置系统自动启动frp
1 2 3 4 5 6 7 8 9 10
| sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
sudo systemctl restart frps
sudo systemctl stop frps
|
3、配置需要被内网穿透的服务器
同样在**/etc/systemd/system/** 目录建立新的文件 frpc.service 配置成Systemd服务
配置内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [Unit] Description=frpc service After=network.target syslog.target Wants=network.target [Service] Type=simple
Restart=on-failure RestartSec=5s
ExecStart=/usr/local/frp_0.65.0_linux_amd64/frpc -c /usr/local/frp_0.65.0_linux_amd64/frpc.toml [Install] WantedBy=multi-user.target
|
然后根据需求映射需要穿透的端口。这样以ssh工具为例,ssh 使用服务器的22号端口。所以这里我要映射内网的22端口到云服务器的6000端口。
配置 frpc.toml 文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11
| [common] server_addr = 14.103.242.86 server_port = 7000 token = "mowangmowang"
[[proxies]] name = "web" type = "tcp" local_ip = "127.0.0.1" local_port = 22 remote_port = 6000
|
其中14.103.242.86 为云服务的公网地址。
local_port = 22 配置内网服务器要映射出去的端口。
remote_port = 6000 配置云服务器对应的端口。
这样配置后,意味着访问云服务器6000端口的流量会被转发到内网服务器的22号端口。
最后设置frp自动启动。
1 2 3 4 5 6 7 8 9 10
| sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc
sudo systemctl restart frpc
sudo systemctl stop frpc
|
使用映射的ssh
使用如下命令来通过ssh访问内网服务器:
1
| ssh -o Port=6000 ws@14.103.242.86
|
其中ws 为内网服务器的用户名
14.103.242.86 为云服务器的公网IP。
获取详细的错误日志
这是最关键的第一步,系统日志通常会直接告诉您失败的原因。
1
| sudo journalctl -u frps -n 50 --no-pager
|
或者查看系统日志:
1
| sudo tail -n 50 /var/log/syslog | grep frps
|
参考
https://blog.loli.wang/blog/2024-08-17-frpinit/doc/