使用 FRP 搭配云服务器实现内网穿透访问内网设备

1. FRP 介绍

FRP(Fast Reverse Proxy)是一款开源的、高性能的反向代理工具,主要用于内网穿透场景。通过 FRP,你可以将内网的服务(如 NAS、路由器、Web 服务器等)暴露到外网。更多内容参考:FRP 官方文档


2. FRP 工作原理

FRP 分为服务端(frps)和客户端(frpc),以下是详细介绍:

FRP 服务端(frps)

  • 部署在拥有公网 IP 的云服务器上
  • 负责处理外网请求

FRP 客户端(frpc)

  • 部署在需要穿透的内网设备上
  • 与服务端保持长连接,将本地服务暴露到外网

3. 在云服务器上部署 FRP 服务端(frps)

以下是一个完整的教程,适合国内用户在云服务器(如腾讯云或阿里云)上部署 FRP 服务端(frps),并解决云服务器访问 GitHub 下载困难的问题。以安装了 Ubuntu 的云服务器为例。

3.1 下载 FRP 到本地电脑

  1. 前往 FRP GitHub 仓库在你的本地电脑上你可以采取多种方法来快速访问Github,例如通过代理、Watt Toolkit、国内镜像网站等等。
  2. 根据云服务器的操作系统架构(一般是 Linux amd64),选择对应版本的压缩包(如 frp_0.61.1_linux_amd64.tar.gz),并下载到本地电脑。
  3. 通过解压工具(如 Bandizip)将压缩包解压。

解压完成后你会得到以下文件:

  • frpc
  • frpc.toml
  • frps
  • frps.toml
  • LICENSE

其中,frpcfrps 是 FRP 的核心可执行文件,分别用于客户端和服务端;frpc.tomlfrps.toml 是对应的配置文件;LICENSE 是 FRP 的开源协议说明文件。

注意:需要将 frpsfrps.toml 上传到云服务器中。

3.2 上传文件到云服务器

  1. 使用 MobaXterm 连接云服务器

    • 下载并安装 MobaXterm
    • 使用服务器的 IP、用户名(root)、密码登录云服务器。
  2. 上传文件

    • 在 MobaXterm 的左侧资源管理器中,将解压后的 frpsfrps.toml 文件拖拽上传到云服务器的 /root/frp(新建文件夹)或其他自定义目录。

3.3 配置 FRP 服务端

  1. 进入上传的文件夹

    cd /root/frp
    
  2. 编辑配置文件

    nano frps.toml
    

    基础配置内容如下:

    [common]
    bind_port = 7000
    token = abcd123412341234abcd
    

    配置说明

    • bind_port:服务端监听的端口,用于客户端连接。需要在防火墙中开启允许访问。
    • token:用于客户端认证,保证连接安全。建议使用密码生成器生成复杂长密码。

    更多详细配置可以参考:frps_full_example.toml

3.4 配置服务端为系统服务

为了方便管理,将 FRP 配置为系统服务:

  1. 创建服务文件

    nano /etc/systemd/system/frps.service
    
  2. 添加以下内容

    [Unit]
    Description=FRP Server
    After=network.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/path/to/frps -c /path/to/frps.toml
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    注意

    • /path/to/frps 替换为实际的 frps 文件路径。
    • /path/to/frps.toml 替换为实际的配置文件路径。
  3. 启动并设置开机自启

    systemctl daemon-reload
    systemctl start frps
    systemctl enable frps
    

3.5 开启云服务器防火墙端口

确保服务器防火墙允许 FRP 服务使用的端口(如 7000),详细步骤请参考:


4. 部署 FRP 客户端(frpc)

原则上 FRP 客户端(frpc)可以部署在任何设备上,考虑到需要长期运行以及功耗等问题,推荐将 frpc 部署到如路由器(OpenWrt)、NAS、开发板等设备。

以安装了 fnOS 飞牛系统的 NAS 为例,fnOS 是基于 Debian 的 NAS 系统,支持通过终端(SSH)访问,便于直接部署和运行 frpc

4.1 上传文件到 fnOS

与在云服务器上部署 FRP 服务端完全相同,使用 MobaXterm 连接 fnOS。详细参考 3.2 上传文件到云服务器

注意:由于是部署客户端(frpc),需要上传 frpcfrpc.toml 文件到 fnOS 中。

4.2 配置 FRP 客户端

  1. 编辑配置文件

    nano frpc.toml
    

    基础配置内容如下:

    [common]
    server_addr = "x.x.x.x"
    server_port = 7000
    token = abcd123412341234abcd
    
    [NAS]
    type = "tcp"
    local_ip = "192.168.1.55"
    local_port = 5666
    remote_port = 1234
    use_compression = true
    use_encryption = true
    

    配置说明

    • 通用部分配置 [common]

      • server_addr:FRP 服务端的 IP 地址(即云服务器 IP 地址)或域名,frpc 通过此地址连接服务端。
      • server_port:FRP 服务端监听的端口(与服务端 bind_port 对应)。
      • token:认证密钥,用来校验客户端与服务端的连接请求是否匹配,需与服务端配置一致。
    • 隧道配置部分 [NAS]

      • type:隧道类型,定义要穿透的服务类型,如 tcp,普通 TCP 服务。
      • local_ip:内网设备 IP 地址,指定需要穿透的本地服务所在设备的地址。
      • local_port:内网服务端口,指定本地设备上运行的服务端口。
      • remote_port:外网端口,指定在服务端暴露的端口,通过该端口访问内网服务。需要在防火墙中开启允许访问。
      • use_compression:是否启用流量压缩,可以减少传输的数据量(适合带宽有限的场景)。
      • use_encryption:是否启用流量加密,增强安全性,防止流量被中间人截获。

    更多详细配置可以参考:frpc_full_example.toml

4.3 配置客户端为系统服务

为了方便管理,将 FRP 配置为系统服务:

  1. 创建服务文件

    nano /etc/systemd/system/frpc.service
    
  2. 添加以下内容

    [Unit]
    Description=FRP Client
    After=network.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/path/to/frpc -c /path/to/frpc.toml
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    注意

    • /path/to/frpc 替换为实际的 frpc 文件路径。
    • /path/to/frpc.toml 替换为实际的配置文件路径。
  3. 启动并设置开机自启

    systemctl daemon-reload
    systemctl start frpc
    systemctl enable frpc
    

4.4 开启客户端防火墙端口

确保客户端设备的防火墙允许 FRP 服务使用的端口(如 1234),详细步骤请参考:


5. 验证穿透效果

在浏览器地址栏输入 x.x.x.x:1234,即可正常访问内网 192.168.1.55:5666 的页面。


结束

通过以上步骤,你已经成功配置并部署了 FRP 服务端和客户端,实现了内网服务的外网访问。确保定期更新 FRP 以获得最新的功能和安全性提升。

Fayoo Wang

Fayoo Wang