Frp 介绍

说明

此文档说使用的frp版本为: 0.59.0

下载地址: https://github.com/fatedier/frp/releases

存放目录为: /opt/module/frp_server(frp_client)

frp能干什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转

frp的组成

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,

服务端部署在具有公网 IP 地址的机器上,

客户端部署在需要穿透的内网服务所在的机器上

工作原理

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

支持的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务

Frp 配置

将Frp 下载到对客户端和服务端, 并解压至/opt/module/frp_server(frp_client)

Server

  1. 服务端基本配置 vim /opt/module/frp_server/frps.toml 输入以下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [common]
    # 客户端访问服务端的密码
    token = 123456..**&&??

    # 服务端和客户端的TCP通信端口, 建议1024以上端口
    bind_port = 7000

    # 服务端web服务的端口, 可以用浏览器访问查看
    dashboard_port = 7500

    # 服务端仪表盘的用户密码
    dashboard_user = frp
    dashboard_pwd = 123456..

    # http https
    vhost_http_port = 8081
    vhost_http_timeout = 6000
    #vhost_https_port = 443

    # 域名
    subdomain_host = xiaoguiyu.cn

    # 日志保存设定, 保存位置、保存时长
    log_file = ./frps.log
    log_level = info
    log_max_days = 7
  2. 将frp设置成linux系统的服务,基于systemd方式管理(可以使用system命令来启动和关闭)

    vim /usr/lib/systemd/system/frps.service 输入一下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Frp Server Service
    After=network.target

    [Service]
    Type=simple
    User=root
    Restart=on-failure
    RestartSec=5s
    ExecStart=/opt/module/frp_server/frps -c /opt/module/frp_server/frps.toml

    [Install]
    WantedBy=multi-user.target
  3. 将frps设置为开机自启

    1
    2
    3
    #frps
    systemctl enable frps
    systemctl start frps
  4. 手动启动frps, 以便查看log 信息

    1
    /opt/module/frp_server/frps -c /opt/module/frp_server/frps.toml 

Client

  1. 客服端基本配置 vim /opt/module/frp_server/frpc.toml 输入以下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    [common]
    # 服务端公网IP
    server_addr = xiaoguiyu.cn
    # 客户端访问服务端的密码
    token = 123456..**&&??
    # 客户端与服务端通信端口
    server_port = 7000

    # log
    log_file = ./frpc.log
    log_level = info
    log_max_days = 2

    [mysql]
    # 指定TCP连接类型
    type = tcp
    # 客户端IP, 这里填本地IP就可以
    local_ip = 127.0.0.1
    # 表示客户端本地的端口号
    local_port = 3306
    # 表示服务端的代理端口号
    remote_port = 33060


    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 15678

    [minio]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 9001
    remote_port = 9001

    [minioapi]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 9000
    remote_port = 9000

    #[web example]
    #type = http
    #local_ip = 127.0.0.1
    #local_port = 9000
    #subdoamin = test
    #custom_domains = xiaoguiyu.cn
  2. 将frp设置成linux系统的服务,基于systemd方式管理(可以使用system命令来启动和关闭)

    vim /usr/lib/systemd/system/frpc.service 输入一下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Frp Client Service
    After=network.target

    [Service]
    Type=simple
    User=root
    Restart=on-failure
    RestartSec=5s
    ExecStart=/opt/module/frp_client/frpc -c /opt/module/frp_client/frpc.toml

    [Install]
    WantedBy=multi-user.target
  3. 将frpc设置为开机自启

    1
    2
    3
    #frpc
    systemctl enable frpc
    systemctl start frpc