cd ~

, with read , about 21min.

frp基础http穿透配置

[TOC]

frp 用于内网穿透,支持多种协议,是一种将局域网访问暴露至公网的穿透技术。 以 http 为例,我需要公网能够直接访问到为我本地机器上的开发项目(web应用。)

frp 和 花生壳 的区别在于,花生壳简单易用,但是收费且有带宽限制。 frp 需要自己搭建客服双端。 需要一个公网服务器, 借用公网和本地机器通信,从而实现公网访问本地机器的目的, 这里的公网服务器作为中间层,类似一个转发代理。

本文主要是为了记录,在配置是遇到的一个小问题,找不到解决方法,所以记录一下:

遇到的问题是配置万完后启动客户端,报出下面错误导致不能成功访问:

start error: port unavailable

1. 下载 解压 frp 程序

https://github.com/fatedier/frp/releases

$ wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
$ tar -xvf  frp_0.44.0_linux_amd64.tar.gz
copy success

下载的程序中,有客户端(frpc) + 服务端(frps) 两组:

jayce@jayce:frp_0.44.0_linux_amd64$ tree
.
├── frpc # 客户端软件
├── frpc_full.ini
├── frpc.ini #  客户端配置文件
├── frpc.log
├── frps # 服务端软件
├── frps_full.ini #  服务端配置文件
├── frps.ini
└── LICENSE
copy success

本地机器保留客户端, 服务器保留服务端。 可以选择将两组程序分别放置, 也可以各自下载一套,只用对应的部分。

2. 服务端配置:

  1. 下载好服务端程序后,将解压后的文件移动至服务端 /usr/local , 本教程以 服务端 ip为 12.34.56.78 为例

    mkdir /usr/local/frp
    mv frp_0.38.0_linux_amd64/* /usr/local/frp/
    copy success
  2. 配置 systemctl 接管 frp 的运行

    新建 /usr/lib/systemd/system/frp.service

    $ sudo vim /usr/lib/systemd/system/frp.service
    copy success

    写入以下内容,注意上文移动放置的路径和此处有关。这里是启动的服务端

    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
    KillSignal=SIGQUIT
    TimeoutStopSec=5
    KillMode=process
    PrivateTmp=true
    StandardOutput=syslog
    StandardError=inherit
    
    [Install]
    WantedBy=multi-user.target
    copy success

    重新加载服务的配置文件

    $ systemctl daemon-reload
    copy success

    现在就可以用 systemctl 套装来控制 frp 了。

    启动/停止/重启,查看状态,设置开机自启/关闭开机自启

    systemctl start frp
    systemctl stop frp
    systemctl restart frp
    systemctl status frp
    systemctl enable frp
    systemctl disable frp
    copy success
    1. 配置服务端配置文件:
    sudo vim /usr/local/frp/frps.ini
    copy success
      1 [common]
      2 #frp 服务端口
      3 bind_port = 9999
      4 #http 服务通信端口
      5 vhost_http_port = 8888
      6 #https 服务通信端口,(服务器未支持,或不需要 可以不配置)
      7 vhost_https_port = 8889
      8 #日志输出文件
      9 log_file = ./frps.log
     10 log_level = info 
     11 
     12 #后台管理面板服务端口以及账户密码
     13 dashboard_port = 7500
     14 dashboard_user = admin
     15 dashboard_pwd = 1234
     16 
     17 #frp最大建立连接数量,默认为5
     18 max_pool_count = 50
    copy success

    启动服务端 frp 服务:

    $ systemctl start frp
    # 查看运行状态
    $ systemctl status frp
    copy success
  3. 对外开放云平台服务器端口

    略, 但确保上述配置的端口,都需要开放。

4. 客户端配置:

  1. 进入 frpc 文件所在目录, 编辑客户端配置文件 frpc.ini:

    $ vim frpc.ini
    copy success
    [common]
    server_addr = 12.34.56.78 # 你的公网服务器 IP 地址
    server_port = 9999 # 你公网服务器 frps 配置的通信端口,需要和上面的 frps.ini `bind_port` 配置保持一致
    
    [web]
    type = http #协议类型
    local_ip = 127.0.0.1 # 本地机器IP 地址,(就是当前配置文件,frpc.ini 所在的客户端,默认就是 127.0.0.1, 所以也可以不写)
    local_port = 5467  # 本地机器 需要被暴露出去的 web应用服务端口(我需要将本地机器上的一个vue 项目暴露出去,其 devServer.port 配置的是 5467, 这不是固定的)
    remote_port = 8888 # 公网服务器 frps.ini 中 `vhost_http_port` 的http 通信地址,如果 默认是 80 端口,如果就用默认端口, 那么 frps.ini 中的 `vhost_http_port`  和这里的 `remote_port` 都可以不写,保持默认即可
    custom_domains = 12.34.56.78 # type 为 http 时,必填,为你公网服务器绑定的 能够正常解析的域名地址, 如果没有,就写 公网IP 就行。
    copy success

    ⚠️ 注意,type为 http 时, custom_domains 这个字段必须要配置, 如果公网服务器购买过并绑定过 域名,这里就填写 域名, 如果没有,就填写公网服务器IP 地址。必须要写,否则会报错 post unavailable。

  2. 启动客户端:

    $ ./frpc -c frpc.ini
    copy success

    如下输出为正常启动:

    ...
    2022/08/28 20:13:17 [I] [control.go:181] [c864e521ba457c00] [web] start proxy success
    ...
    copy success

5. 测试连接

浏览器尝试访问 : http://12.34.56.78:8888, 看能不能成功访问 开发机上的web应用。

参考:

https://developer.aliyun.com/article/853534

https://www.bilibili.com/video/BV1PY4y1F7cb?spm_id_from=333.337.search-card.all.click

https://github.com/fatedier/frp/issues/1288#issuecomment-502463457

cd ~
GO BACK (Backspace)
BACK TO TOP (ESC)
COMMENTS (C)