什么是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 服务端
Bash
# 使用wget命令下载服务端压缩包
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压到 /usr/local
tar -zxvf frp_0.59.0_linux_amd64.tar.gz -C /usr/local
进入 /etc/systemd/system/ 目录建立新的文件 frps.service 配置成Systemd服务
frps.service 中填写如下内容:
Bash
# frps.service
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#Restart=always
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文件
Bash
[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
Bash
# 设为开机自启
sudo systemctl enable frps
# 启动frp
sudo systemctl start frps
# 查看启动日志
sudo systemctl status frps
# 重启frp服务
sudo systemctl restart frps
# 关闭frp服务
sudo systemctl stop frps
3、配置需要被内网穿透的服务器
同样在**/etc/systemd/system/** 目录建立新的文件 frpc.service 配置成Systemd服务
配置内容如下:
Bash
# frps.service
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#Restart=always
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 文件,内容如下:
Bash
[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自动启动。
Bash
# 设为开机自启
sudo systemctl enable frpc
# 启动frp
sudo systemctl start frpc
# 查看启动日志
sudo systemctl status frpc
# 重启frp服务
sudo systemctl restart frpc
# 关闭frp服务
sudo systemctl stop frpc
使用映射的ssh
使用如下命令来通过ssh访问内网服务器:
Bash
ssh -o Port=6000 ws@14.103.242.86
其中ws 为内网服务器的用户名
14.103.242.86 为云服务器的公网IP。
获取详细的错误日志
这是最关键的第一步,系统日志通常会直接告诉您失败的原因。
Bash
sudo journalctl -u frps -n 50 --no-pager
或者查看系统日志:
Bash
sudo tail -n 50 /var/log/syslog | grep frps