Skip to content

frp 内网穿透

介绍

FRP(Fast Reverse Proxy)内网穿透是一种技术,它允许外部网络用户访问位于内网中的服务,而无需直接暴露内网的IP地址。FRP是一个高性能的反向代理应用,专注于实现内网穿透功能。以下是关于FRP内网穿透的详细解释:

一、FRP内网穿透的基本原理

FRP内网穿透通过以下步骤实现:

  1. 部署服务端:在具有公网IP的服务器上部署FRP服务端(frps)。这个服务端负责接收来自外部网络的连接请求,并进行转发。
  2. 部署客户端:在内网中的机器上部署FRP客户端(frpc)。客户端负责将本地服务(如Web服务器、SSH等)通过端口映射发送到FRP服务端。
  3. 建立连接:客户端启动后,会与服务端建立长连接。当外部用户尝试访问内网服务时,他们的请求会首先发送到FRP服务端。服务端根据配置信息,将请求转发到对应的内网客户端。
  4. 流量转发:客户端收到来自服务端的请求后,会处理该请求并将其转发到本地服务。然后,客户端将本地服务的响应发送回服务端,再由服务端转发给外部用户。

二、FRP内网穿透的优点

  1. 安全性:FRP内网穿透不需要直接暴露内网的IP地址,从而减少了遭受网络攻击的风险。此外,FRP还支持使用SSL/TLS进行加密传输,进一步提高了数据传输的安全性。
  2. 便捷性:通过FRP,用户可以轻松地将内网服务暴露到外网,而无需进行复杂的网络配置。这使得远程访问和管理内网服务变得更加方便。
  3. 高性能:FRP是一个高性能的反向代理应用,能够处理大量的并发连接和数据传输。这使得FRP内网穿透在实际应用中具有很高的可用性和稳定性。

三、FRP内网穿透的应用场景

FRP内网穿透适用于以下场景:

  1. 远程访问:用户可以通过FRP内网穿透技术远程访问家庭或办公室中的计算机、服务器等设备。
  2. 搭建Web服务:开发者可以将自己的Web应用部署在内网中,并通过FRP将其暴露到外网,以便其他用户访问。
  3. 调试和测试:在开发过程中,开发者可能需要远程访问和调试位于内网中的服务。FRP内网穿透技术可以方便地实现这一需求。
  4. 数据同步和备份:用户可以通过FRP将内网中的数据同步到外部存储设备上,或进行定期备份。

四、使用FRP进行内网穿透的步骤

  1. 下载FRP:从FRP的官方网站或GitHub页面下载适合你系统的FRP版本。
  2. 配置服务端:在具有公网IP的服务器上解压下载的FRP文件,并编辑frps.ini配置文件。设置绑定端口、管理界面端口、管理界面用户名和密码等参数。
  3. 启动服务端:在服务器上运行FRP服务端程序,并指定配置文件路径。
  4. 配置客户端:在内网中的机器上解压下载的FRP文件,并编辑frpc.ini配置文件。设置服务端地址、服务端端口、本地服务类型、本地服务端口和远程端口等参数。
  5. 启动客户端:在内网中的机器上运行FRP客户端程序,并指定配置文件路径。
  6. 访问内网服务:外部用户可以通过访问FRP服务端的公网IP和配置的远程端口来访问内网中的服务。

综上所述,FRP内网穿透是一种安全、便捷且高性能的技术,适用于多种应用场景。通过合理的配置和使用,用户可以轻松地将内网服务暴露到外网,实现远程访问和管理。

模拟搭建 frp 环境

准备 frp 服务端和客户端主机,在生产环境中 frp 服务端为外网能够访问的主机,frp 客户端为能够同时访问公司内网资源和连接外网 frp 服务端的主机

frp 服务端信息如下:

  • ip 为 192.168.1.171
  • 操作系统 CentOS8

frp 客户端信息如下:

  • ip 为 192.168.1.170
  • 操作系统 CentOS8

安装和配置 frp 服务端

  • SSH 登录 frp 服务端 192.168.1.171

  • 参考 链接 安装 dcli

  • 使用 dcli 安装和配置 frp 服务端

    bash
    dcli frp install
    • 选择安装 frp 组件为服务器
    • 不输入端口,使用默认的 frp 服务器端口 7707
    • 不输入token,使用默认的 frp 服务器身份鉴别 token
  • 查看 frp 服务端是否正常运行

    bash
    # 查看 frp 服务端是否监听 7707 端口
    netstat -ntlp | grep 7707
    
    # 查看 frp 服务端服务是否正常
    systemctl status frps

安装和配置 frp 客户端

  • SSH 登录 frp 客户端 192.168.1.170

  • 参考 链接 安装 dcli

  • 使用 dcli 安装和配置 frp 客户端

    bash
    dcli frp install
    • 选择安装 frp 组件为客户端
    • 输入 frp 服务端 ip 地址为 192.168.1.171
    • 不输入 frp 服务端端口,使用默认的 7707 端口配置
    • 不输入 frp 服务端身份鉴别 token,使用默认的 token
  • 查看 frp 客户端是否正常运行

    bash
    # 查看 frp 客户端服务是否正常
    systemctl status frpc

配置 frp 客户端实现内网穿透 58 测试环境

  • SSH 登录 frp 客户端 192.168.1.170

  • 编辑 /etc/frp/frpc.ini 内容如下:

    properties
    [common]
    server_addr = 192.168.1.171
    server_port = 7707
    
    #token
    privilege_token = xxxxxxxxxxxx
    
    [58-uat-env]
    type = tcp
    # 被内网穿透服务的目标端口
    local_port = 80
    # 被内网穿透服务的目标ip
    local_ip = 192.168.1.58
    # frp 服务端暴露在外网的端口
    remote_port = 30000
  • 重启 frp 客户端

    bash
    systemctl restart frpc

测试通过 frp 服务端访问 58 测试环境以模拟内网穿透

  • 访问http://192.168.1.171:30000/如果网页显示正确说明成功模拟内网穿透。