frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

为什么使用 frp

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。

  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。

  • 代理组间的负载均衡。

  • 端口复用,多个服务通过同一个服务端端口暴露。

  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。

  • 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。

  • 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。

  • 服务端和客户端 UI 页面。

Linux默认下载

wget https://github.com/fatedier/frp/releases/download/v0.50.0/frp_0.50.0_linux_amd64.tar.gz

其他版本下载

github下载地址

根据自己电脑系统配置选择对应的版本

  • frp_0.56.0_darwin_amd64.tar.gz: 适用于 macOS(darwin)系统上的64位x86处理器(amd64)的版本。

  • frp_0.56.0_darwin_arm64.tar.gz: 适用于 macOS(darwin)系统上的64位ARM处理器(arm64)的版本。

  • frp_0.56.0_freebsd_amd64.tar.gz: 适用于 FreeBSD 操作系统上的64位x86处理器(amd64)的版本。

  • frp_0.56.0_linux_amd64.tar.gz: 适用于 Linux 操作系统上的64位x86处理器(amd64)的版本。

  • frp_0.56.0_linux_arm.tar.gz: 适用于 Linux 操作系统上的32位ARM处理器的版本。

  • frp_0.56.0_linux_arm64.tar.gz: 适用于 Linux 操作系统上的64位ARM处理器(arm64)的版本。

  • frp_0.56.0_linux_mips.tar.gz: 适用于 Linux 操作系统上的MIPS处理器的版本。

  • frp_0.56.0_linux_mips64.tar.gz: 适用于 Linux 操作系统上的MIPS64处理器的版本。

  • frp_0.56.0_linux_mips64le.tar.gz: 适用于 Linux 操作系统上的Little-endian MIPS64处理器的版本。

  • frp_0.56.0_linux_mipsle.tar.gz: 适用于 Linux 操作系统上的Little-endian MIPS处理器的版本。

  • frp_0.56.0_windows_amd64.zip: 适用于 Windows 操作系统上的64位x86处理器(amd64)的版本。

  • frp_0.56.0_windows_386.zip: 适用于 Windows 操作系统上的32位x86处理器的版本。

  • frp_0.56.0_windows_arm.zip: 适用于 Windows 操作系统上的ARM处理器的版本。

Frp文件介绍

Frp服务端一般都放在服务器中,这里只说在linux系统的安装配置,选择自己的版本下载后,解压完成就能看到基本的文件了,主要有以下这些

  • frpc: 这是 frp 客户端程序的可执行文件,用于在客户端机器上运行以与 frps 服务器进行通信。

  • frpc_full.ini: 这是 frpc 客户端程序的完整配置文件,包含了所有配置选项和详细设置。

  • frpc.ini: 这是 frpc 客户端程序的简化配置文件,通常包含基本的配置选项,如服务器地址、端口、认证信息等。

  • frps: 这是 frp 服务器程序的可执行文件,用于在服务器端运行以接受来自客户端的连接请求并进行转发。

  • frps_full.ini: 这是 frps 服务器程序的完整配置文件,包含了所有配置选项和详细设置。

  • frps.ini: 这是 frps 服务器程序的简化配置文件,通常包含基本的配置选项,如监听端口、token 等。

  • LICENSE: 这是软件的许可证文件,通常包含有关软件许可协议的信息,用户需要遵守这些协议才能使用软件。

Frp服务端

服务端主要使用frpc(服务端程序) 和frps.ini(服务端配置文件)

配置文件frps.ini

[common]
bind_addr = x.x.x.x     # 服务器的内网IP,用于客户端程序的连接,若允许所有链接则设置0.0.0.0
bind_port = 7000        # frp程序监听的端口,用于客户端程序的连接
kcp_bind_port = 7000    # KCP 协议绑定的端口,通常与 bind_port 保持一致
vhost_https_port = 7001 # 虚拟主机的 HTTPS 端口
dashboard_addr = x.x.x.x # 监控面板的内网IP地址,若允许所有链接则设置0.0.0.0
dashboard_port = 7500   # 监控面板的端口
dashboard_user = admin  # 监控面板的管理账号
dashboard_pwd = admin   # 监控面板的管理密码
log_file = ./frps.log   # 日志文件保存位置
log_level = info        # 日志级别设置为info
log_max_days = 3        # 日志保留时间,最长3天
authentication_timeout = 900 # 认证超时时间,单位为秒
token=12345678          # 访问密钥,服务端和客户端需保持一致
allow_ports = 2000-3000,3001,3003,4000-50000,3362  
                        # 允许客户端程序映射到服务器的端口范围,用逗号隔开
max_pool_count = 50     # 最大连接池数量
max_ports_per_client = 0 # 每个客户端允许使用的最大端口数,0表示不限制
​

简化版

[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_port = 7500
token = qwertyuiop
dashboard_user = admin
dashboard_pwd = admin

启动frp服务端

在frp文件夹下执行启动命令

./frps -c frps.ini

封装服务

创建service文件

vim /etc/systemd/system/frps.service

service配置

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
 
[Service]
Type=simple
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=always
RestartSec=1
StartLimitInterval=0
  • 设置权限

    sudo chmod 644 /etc/systemd/system/frps.service
  • 重新加载服务

    systemctl daemon-reload
  • 启动服务

    systemctl start frps 
  • 设置开机自启

    systemctl enable frps

Frp客户端

配置frp客户端主要是frpc(客户端程序)和 frpc.ini(客户端配置文件)

配置文件frpc.ini

[common]
#这里填写frp服务端的地址
server_addr = 192.168.0.10
#frp服务端的端口
server_port = 7000
#服务端的秘钥
token=qwertyuiop
​
​
[ssh]
#这里填写本地需穿透的服务器及端口
type = tcp
#127.0.0.1即为本地
local_ip = 127.0.0.1
#本地22端口
local_port = 22
#映射到公网服务端对应的端口,服务端需开启防火墙
remote_port = 6000
#服务器与客户机之间的心跳连接,每隔30秒连接一次,如果没有会自动断开。
heartbeat_timeout = 30

纯净版

[common]
server_addr = 192.168.0.10
server_port = 7000
token=qwertyuiop
​
​
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
heartbeat_timeout = 30

启动frp客户端

在frp文件夹下执行启动命令

./frpc -c frpc.ini

封装服务

创建service文件

vim /etc/systemd/system/frpc.service

service文件配置

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
 
[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
Restart=always
RestartSec=1
StartLimitInterval=0
​
[Install]
WantedBy=multi-user.target
  • 设置权限

    sudo chmod 644 /etc/systemd/system/frpc.service
  • 重新加载服务

    systemctl daemon-reload
  • 启动服务

    systemctl start frpc 
  • 设置开机自启

    systemctl enable frpc

防火墙设置

因为这里会到端口,且端口固定,可以直接关闭防火墙

关闭防火墙

sudo systemctl stop firewalld

关闭开机自启

sudo systemctl disable firewalld

如果您的系统使用的是iptables而不是firewalld,您可以使用以下命令来关闭

停止iptables服务

sudo systemctl stop iptables

禁用iptables服务

sudo systemctl disable iptables