51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【Docker】搭建实用的内网穿透工具 - FRP

本文最后更新于 2024-09-24,文章可能存在过时内容,如有过时内容欢迎留言或者联系我进行反馈。

前言 {#%E5%89%8D%E8%A8%80}

本教程基于群晖的NAS设备DS423+docker 功能进行搭建FRP的客户端,DSM版本为 7.2.1-69057 Update 5。采用香港机Debian 12系统的服务器来安装FRP的服务端作为演示。

服务器购买地址https://www.crash.work/aff/AQXGDNKY

简介 {#%E7%AE%80%E4%BB%8B}

FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,它可以帮助您将内网服务通过反向代理暴露到公网上。FRP使用Go语言编写,具有跨平台的特性,可以在多种操作系统上运行。以下是FRP的一些主要特点:

  1. 多协议支持:FRP支持多种协议,包括HTTP、HTTPS、TCP、UDP等,使得它可以代理多种类型的服务。

  2. 端口映射:FRP可以将内网服务的端口映射到公网,使得用户可以通过公网访问内网服务。

  3. 加密通信:FRP支持TLS/SSL加密,可以保证数据传输的安全性。

  4. 身份验证:FRP提供了多种身份验证方式,包括Token、HTTP Basic Auth等,以增强安全性。

  5. 插件系统:FRP具有插件系统,允许开发者自定义功能,如日志记录、认证等。

  6. Web管理界面:FRP提供了一个Web管理界面,方便用户监控和管理代理服务。

  7. 配置简单:FRP的配置文件简单明了,易于设置和管理。

  8. 高可用性:FRP支持服务的高可用性配置,可以设置多个服务器进行负载均衡。

  9. 跨平台:由于FRP是用Go语言编写的,它可以在Windows、Linux、MacOS等多种操作系统上运行。

FRP通常用于以下场景:

  • 内网穿透,允许远程访问内网服务。

  • 负载均衡,将流量分发到多个服务器。

  • 服务的安全性增强,通过代理进行加密和身份验证。

FRP是一个开源项目,可以在GitHub上找到其源代码和文档。

部署 {#%E9%83%A8%E7%BD%B2}

1Panel {#1panel}

为了方便,我将先部署一个1Panel 来作为管理面板,然后在此基础上安装Frps。若服务器内存较小,建议跳过此步骤,直接通过systemd​管理方式直接部署。

环境要求 {#%E7%8E%AF%E5%A2%83%E8%A6%81%E6%B1%82}

安装前请确保您的系统符合安装条件:

  • 操作系统:支持主流 Linux 发行版本(基于 Debian / RedHat,包括国产操作系统);

  • 服务器架构:x86_64、aarch64、armv7l、ppc64le、s390x;

  • 内存要求:建议可用内存在 1GB 以上;

  • 浏览器要求:请使用 Chrome、FireFox、IE10+、Edge等现代浏览器;

  • 可访问互联网。

安装部署 {#%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2}

  1. 使用你熟悉的SSH工具连接到服务器,我使用的是Xterminal。

  2. 先安装Docker,输入以下命令脚本一键安装Docker。

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
    

  3. 是否安装最新版本的 Docker Engine ,输入Y​然后回车。

  4. 请选择并输入你想使用的 Docker CE 源,输入13​然后回车。

    因为我的服务器不是中国大陆的,所以我直接选择了官方源,国内服务器请选择其他源。

  5. 请选择并输入你想使用的 Docker registry 源,输入14​然后回车,等待安装。

    因为我的服务不是中国大陆的,是香港的服务器,所以我选择了14,实际根据自己服务器情况进行选择。

  6. 显示以下界面,则表示安装完成。

  7. 根据自己的服务器系统选择1Panel的安装脚本。

    • RedHat / CentOS

      curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
      
    • Ubuntu

      curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
      
    • Debian

      curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
      
    • openEuler / 其他

      1. 安装 docker
      bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
      
      1. 安装 1Panel
      curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
      

    我所使用的是Debian,因此我将使用Debian的服务器系统作为安装演示。

  8. 设置 1Panel 安装目录(默认为/opt),直接回车,默认将1Panel安装在/opt​目录下。

  9. 设置 1Panel 端口(默认为19526),不推荐使用默认端口,容易被人爆破登录,因此我们这里修改一下默认端口,我修改成了1998​

  10. 设置 1Panel 安全入口,面板安全入口仅支持字母、数字、下划线,长度 3-30 位。我设置成了1panel​

  11. 设置 1Panel 面板用户,我设置成了admin​,请根据自己的实际情况进行修改。

  12. 设置 1Panel 面板密码,输入密码时,不会有显示,所以输入完以后直接回车。

  13. 在浏览器中输入访问地址,根据自己设置的账号和密码进行登录。

Frp服务端 {#frp%E6%9C%8D%E5%8A%A1%E7%AB%AF}

基于1Panel部署 {#%E5%9F%BA%E4%BA%8E1panel%E9%83%A8%E7%BD%B2}

若服务器内存较小,建议通过systemd​管理方式直接部署。

  1. 在1Panel面板中,进入到"应用商店",搜索frp​,选择frp服务端​,点击"安装"。

  2. 将"服务端口"、"Dashboard 端口"和"密码"的默认值进行修改。

  3. 等待安装完成后,点击"📂"文件夹小图标进入安装目录。

  4. 找到frps.toml​这个文件,点击"打开"。

  5. 编辑修改一下"auth.token"的值,然后点击"确认"。

    每次修改配置后,记得要重启容器,才能生效。

基于Linux系统直接部署 {#%E5%9F%BA%E4%BA%8Elinux%E7%B3%BB%E7%BB%9F%E7%9B%B4%E6%8E%A5%E9%83%A8%E7%BD%B2}

  1. 根据自己的系统在Github仓库中找到对应的安装包 https://github.com/fatedier/frp/releases

  2. 根据仓库中的版本和文件名称替换下面的命令中的版本号和安装包名称,使用wget​命令进行安装包在线下载。

    wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
    

  3. 解压安装包,安装包的名称需要根据你实际下载的安装包名称进行修改。

    tar -zxvf frp_0.60.0_linux_amd64.tar.gz
    

  4. 安装vim​编辑器,如已安装vim​可跳过此步骤。

    # 使用 yum 安装 systemd(CentOS/RHEL)
    sudo yum install vim
    
    使用 apt 安装 systemd(Debian/Ubuntu)
    ================================
    
    
    `sudo apt install vim`
    

  5. 解压成功后,使用vim​编辑器进行编辑。

    vim /root/frp_0.60.0_linux_amd64/frps.toml
    

    按下Insert​键后写入内容,然后按下ESC​键,最后输入:wq​保存并退出。

    bindAddr = "0.0.0.0"
    # frp监听的端口,默认是7000,可以改成其他的
    bindPort = 7000
    
    vhostHTTPPort = 8080
    vhostHTTPSPort = 8443
    
    
    auth.method = "token"
    
    
    授权码,请改成更复杂的,这个token之后在客户端会用到
    ============================
    
    
    
    auth.token = "p@ssw0rd"
    
    
    webServer.addr = "0.0.0.0"
    
    
    frp管理后台端口,请按自己需求更改
    ==================
    
    
    
    webServer.port = 7500
    
    
    frp管理后台用户名和密码,请改成自己的
    ====================
    
    
    `webServer.user = "admin"
    webServer.password = "p@ssw0rd"`
    

  6. 安装systemd​,如已安装systemd​可跳过此步骤。

    # 使用 yum 安装 systemd(CentOS/RHEL)
    yum install systemd
    
    使用 apt 安装 systemd(Debian/Ubuntu)
    ================================
    
    
    `apt install systemd`
    

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

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

    按下Insert​键后写入内容,然后按下ESC​键,最后输入:wq​保存并退出。

    [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`
    

  8. 使用 systemd 命令管理 frps 服务。

    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
    
  9. 设置 frps 开机自启动。

    sudo systemctl enable frps
    

Frp客户端 {#frp%E5%AE%A2%E6%88%B7%E7%AB%AF}

  1. 打开群晖Web管理后台,在"File Station"中创建一个目录,用于存储Frp客户端数据。

  2. 在本地新建一个文本文档,然后编辑文本,输入以下内容。

    # 服务器地址
    serverAddr = "192.168.1.1"
    # 服务器端口
    serverPort = 7007
    # 鉴权方式,默认为token
    auth.method = "token"
    # 鉴权密钥,与服务端设置必须一致,否则无法连接
    auth.token = "xiaoxiaobijidadayongchu"
    
    \[\[proxies\]\]
    
    
    隧道名称,可自定义,不能重复
    ==============
    
    
    
    name = "web_nas_http"
    
    
    隧道类型,可用tcp, udp, http, https, tcpmux, stcp, sudp, xtcp
    ======================================================
    
    
    
    type = "tcp"
    
    
    本地IP地址,如果是本机就127.0.0.1
    ======================
    
    
    
    localIP = "127.0.0.1"
    
    
    本地端口,本地服务端口
    ===========
    
    
    
    localPort = 30080
    
    
    远程端口,连接隧道时用的端口
    ==============
    
    
    
    remotePort = 80
    
    `[[proxies]]
    name = "web_nas_https"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 30443
    remotePort = 443`
    

    填写完成以后把注释删除掉,以免产生其他影响。

  3. 将文本文档上传至之前我们创建好的路径。

  4. 在"Container Manager"内,选择"注册表",搜索stilleshan/frpc​​,选中后点击"下载",等待下载完成。

  5. 在"容器"内,点击"新增","映像"选择我们刚刚下载好的镜像,然后勾选一下"启用自动重新启动",最后点击"下一步"。

  6. 点击"添加文件"。

  7. 选择我们之前上传的frpc配置文件。

  8. 容器的存储目录请填写固定的/frp/frpc.toml​不要修改,然后点击"下一步"。

  9. 网络更改为host​,然后点击"下一步"。

  10. 检查一下配置,没问题的话,直接点击"完成"。

  11. 在浏览器中输入Frp的控制面板地址,查看穿透的对应的端口是否生效。



赞(0)
未经允许不得转载:工具盒子 » 【Docker】搭建实用的内网穿透工具 - FRP