什么是frp?

frp (Fast Reverse Proxy) 是一个高性能的反向代理应用,可以帮助您轻松实现内网穿透,将内网服务暴露到公网。无论您是想远程访问家里的NAS、监控摄像头,还是需要调试本地开发环境,frp都是绝佳选择。

环境准备

服务器端需求

  • 具有公网IP的云服务器(1核1G配置即可)
  • Linux系统(推荐CentOS 7+或Ubuntu 18.04+)
  • 开放所需端口权限

客户端需求

  • 需要暴露服务的内网设备
  • Windows/Linux/macOS系统均可

部署步骤

第一步:下载frp

访问 frp GitHub发布页面 下载最新版本。

服务器端操作:


# 下载最新版本(请替换为实际版本号)
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.65.0_linux_amd64.tar.gz
cd frp_0.65.0_linux_amd64

第二步:frps身份认证

目前 frpc 和 frps 之间支持两种身份验证方式,tokenoidc,默认为 token。这些认证方式允许您验证客户端与服务端之间的通信,并确保只有授权用户能够建立连接。

Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。

# frps.toml
bindPort = 7000
auth.token = "abc"
# frpc.toml
auth.token = "abc"

第三步:通过自定义域名访问内网的 Web 服务

HTTP 类型的代理非常适合将内网的 Web 服务通过自定义域名提供给外部用户。相比于 TCP 类型代理,HTTP 代理不仅可以复用端口,还提供了基于 HTTP 协议的许多功能。

HTTPS 与此类似,但是需要注意,frp 的 https 代理需要本地服务是 HTTPS 服务,frps 端不会做 TLS 终止。也可以结合 https2http 插件来实现将本地的 HTTP 服务以 HTTPS 协议暴露出去。

  1. 配置 frps.toml

    在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:

    bindPort = 7000
    vhostHTTPPort = 80
    vhostHTTPSPort = 443
    

    如果需要配置 HTTPS 代理,还需要设置 vhostHTTPSPort

  2. 配置 frpc.toml

    在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:

    serverAddr = "x.x.x.x"
    serverPort = 7000
    
    [[proxies]]
    name = "web"
    type = "http"
    localPort = 80
    customDomains = ["www.yourdomain.com"]
    
    [[proxies]]
    name = "web2"
    type = "http"
    localPort = 8080
    customDomains = ["www.yourdomain2.com"]
    
  3. 启动 frps 和 frpc

  4. 域名解析

    www.yourdomain.comwww.yourdomain2.com 的域名 A 记录解析到服务器的 IP 地址 x.x.x.x。如果服务器已经有对应的域名,您还可以将 CNAME 记录解析到原始域名。另外,通过修改 HTTP 请求的 Host 字段也可以实现相同的效果。

  5. 通过浏览器访问

    使用浏览器访问 http://www.yourdomain.com:8080 即可访问内网机器上的 80 端口服务,访问 http://www.yourdomain2.com:8080 可以访问内网机器上的 8080 端口服务。

第四步:管理 frps 服务

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 安装 systemd

    如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

    使用 yum 安装 systemd(CentOS/RHEL)

    yum install systemd
    

    使用 apt 安装 systemd(Debian/Ubuntu)

    apt install systemd
    
  2. 创建 frps.service 文件

    使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

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

    写入内容

    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /path/to/frps -c /path/to/frps.toml
    
    [Install]
    WantedBy = multi-user.target
    
  3. 使用 systemd 命令管理 frps 服务

    启动frp

    sudo systemctl start frps
    

    停止frp

    sudo systemctl stop frps
    

    重启frp

    sudo systemctl restart frps
    

    查看frp状态

    sudo systemctl status frps
    

    设置 frps 开机自启动

    sudo systemctl enable frps