FRP

FRP(Fast Reverse Proxy)是一个高性能的内网穿透工具,用于帮助内网服务通过公网访问。它主要适用于无法直接从外部访问的内网环境,比如家庭网络、企业内部网络等。
FRP 可以帮助你将内网的各种服务(如HTTP、SSH等)映射到外网上,方便远程访问。

主要特性

  • 反向代理:FRP 支持 TCP、UDP、HTTP、HTTPS 等多种协议的反向代理。
  • 配置灵活:通过配置文件可以灵活地设定不同的转发规则和监听端口。
  • 安全性:支持通过密钥认证的方式确保连接的安全性。
  • 多用户支持:可以为不同的用户配置不同的权限和资源限制

工作原理

FRP 包括两个部分:frps(服务端)和 frpc(客户端)。服务端部署在具有公网 IP 的服务器上,客户端部署在需要进行内网穿透的本地机器上。
客户端(frpc):在内网机器上配置要映射到外网的服务,然后连接到服务端。
服务端(frps):接收来自客户端的连接请求,根据配置将请求转发到指定的内网服务上。

快速部署

公网部署服务端

  1. 编写服务端配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cat << EOF > frps.toml
    [common]
    bind_port = 7000
    authentication_method = token
    # 设置 token,客户端连接时需要提供这个 token
    token = ILoveChinese

    dashboard_port = 7001
    dashboard_user = admin
    dashboard_pwd = admin123
    EOF
  2. 编写frps的docker-compose文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    version: '3'
    services:
    frps:
    image: snowdreamtech/frps:latest
    container_name: frps
    restart: always
    network_mode: host
    volumes:
    - './frps.toml:/etc/frp/frps.toml'
  3. 部署服务
    1
    docker-compose up -d
  4. 验证
    1
    http://${IP}:7001

内网部署客户端

代理到内网的其他机器上,在本机器充当客户端

  1. 编写客户端配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cat << EOF > frpc.toml
    [common]
    server_addr = <公网服务器的IP地址>
    server_port = 7000 # frps配置的bind_port
    token = ILoveChinese

    # 代理内网HTTP服务
    [https_server]
    type = tcp
    local_ip = 192.168.5.208 # 假设内网服务部署在192.168.5.208:8843
    local_port = 8843 # 代理服务的访问端口
    remote_port = 7888 # 外网IP:该端口 就可以访问该服务 访问外网IP:7888 即可

    # 代理内网hub仓库
    [https_hub]
    type = tcp
    local_ip = 192.168.5.190 # 假设内网hub服务是部署在192.168.5.190,并且使用了自签证书使用https访问
    local_port = 443
    remote_port = 9001
    # 使用: docker login -u username -p password http://外网IP:9001/
    EOF

    注意:
    如果docker登录报错如下:

    1
    2
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    Error response from daemon: Get "https://外网IP:9001/v2/": tls: failed to verify certificate: x509: cannot validate certificate for 外网IP because it doesn't contain any IP SANs

    解决方案:
    编辑docker的daemon.json文件, insecure-registries 增加外网IP和Port即可, "外网IP:9001",重启docker服务

  2. 编写frpc的docker-compose文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    version: '3'
    services:
    frps:
    image: snowdreamtech/frpc:latest
    container_name: frpsc
    restart: always
    network_mode: host
    volumes:
    - './frpc.toml:/etc/frp/frpc.toml'

  3. 部署服务

    1
    docker-compose up -d
  4. 验证
    通过访问外网IP:被代理的端口