Skip to content

Frp内网穿透

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

为什么使用 frp

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

  • 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
  • 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

Linux默认下载

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

其他版本下载

github下载地址

An image

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

  • 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

shell
[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表示不限制

简化版

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

启动frp服务端

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

shell
./frps -c frps.ini

封装服务

创建service文件

shell
vim /etc/systemd/system/frps.service

service配置

shell
[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
  • 设置权限

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

    shell
    systemctl daemon-reload
  • 启动服务

    shell
    systemctl start frps
  • 设置开机自启

    sh
    systemctl enable frps

Frp客户端

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

配置文件frpc.ini

shell
[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

纯净版

shell
[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文件夹下执行启动命令

shell
./frpc -c frpc.ini

封装服务

创建service文件

shell
vim /etc/systemd/system/frpc.service

service文件配置

shell
[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
  • 设置权限

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

    shell
    systemctl daemon-reload
  • 启动服务

    shell
    systemctl start frpc
  • 设置开机自启

    sh
    systemctl enable frpc

防火墙设置

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

关闭防火墙

shell
sudo systemctl stop firewalld

关闭开机自启

shell
sudo systemctl disable firewalld

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

停止iptables服务

shell
sudo systemctl stop iptables

禁用iptables服务

shell
sudo systemctl disable iptables