Rocky & Sky IT技术和管理

和大家分享一些技术,聊一聊有趣的话题

通过frp部署web应用和内网穿透

实验环境

  1. 内网电脑-Windows 10
  2. 外网服务器-Vultr Ubuntu 19.10-x64

    frp介绍和安装

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。本次实验使用的frp版本是最新版本v0.31.1。
    下载地址:frp Github
    Windows版本安装

    • 下载win64版本的压缩包:Win-x64
    • 解压缩到电脑中的文件夹中:我是放在G:\projects\frp文件夹中。文件结构如下:
      《通过frp部署web应用和内网穿透》
      Linux版本安装
    • 下载linux-x64版本的压缩包。
    • 创建frp文件夹:mkdir frp
    • 进入文件夹:cd frp,并下载压缩包:
       wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
    • 解压缩frp压缩包
       tar -zxvf frp_0.31.1_linux_amd64.tar.gz
    • 通过ll命令查看linux下的文件夹:
      《通过frp部署web应用和内网穿透》

      frp配置和使用

      我们看到有frpc,frpc_full.ini,frpc.ini以及 frps,frps_fill.ini, frps.ini这几个文件
      如果是作为客户端,那么配置frpc.ini文件,如果是作为反向代理的服务端则使用frps.ini文件。这个实验中,我们用vultr的VPS作为外网服务器,提供反向代理服务。
      修改frps.ini文件:

      [common]
      bind_port = 7000           #与客户端绑定的进行通信的端口
      vhost_http_port = 8080     #访问客户端web服务自定义的端口号

      保存文件并启动

    • 直接启动:

      ./frps -c ./frps.ini,

    • 后台启动:

      nohup ./frps -c ./frps.ini &

    启动以后,frp作为服务端就在工作了,开始监听7000端口的请求,并转发到响应的内网服务器上。
    我的内网服务器是我直接的测试PC,为了测试http内网穿透的功能。配置了一个最简单的Django网站,并使用了8199这个端口,当然也可以部署其他的web应用,这里只是做一个示例,具体的配置就不详细展开了。

    《通过frp部署web应用和内网穿透》

    下面我们来配置frpc.ini这个文件,直接打开文本编辑器,然后打开frpc.ini文件:

    [common]
    server_addr = 45.77.xxx.xxx
    server_port = 7000
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    
    [web]
    type = http
    local_port = 8199
    custom_domains = test.xxx123.com

    然后在在命令行模式启动frpc.exe, 这里只是一个示范,在实际的应用中并不建议运行在windows上。请注意设置域名的解析到服务器IP上,然后访问 http://test.xxx123.com,发现网站可以正常打开,到此已经完成了基本的设置

    《通过frp部署web应用和内网穿透》

    性能的考虑:

    我们有时候使用的穿透用反向代理服务器有可能是在境外,我的实验机就是用的Vultr的VPS,所以会出现大量的丢包和延迟现象,frp支持kcp协议,能够大大改善这种情况,是访问速度明显提升。在服务器端配置kcp端口

    # frps.ini
    [common]
    bind_port = 7000
    # kcp 绑定的是 udp 端口,可以和 bind_port 一样
    kcp_bind_port = 7000

    同时可以在客户端开启kcp协议:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    # server_port 指定为 frps 的 kcp_bind_port
    server_port = 7000
    protocol = kcp

    负载均衡

    可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。
    目前只支持 TCP 和 HTTP 类型的 proxy。

    # frpc.ini
    [test1]
    type = tcp
    local_port = 8080
    remote_port = 80
    group = web
    group_key = 123
    
    [test2]
    type = tcp
    local_port = 8081
    remote_port = 80
    group = web
    group_key = 123

    用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。
    TCP 类型代理要求 group_key 相同,做权限验证,且 remote_port 相同。
    HTTP 类型代理要求 group_key, custom_domains 或 subdomain 和 locations 相同

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注