如何用 Frp 实现外网访问群晖 NAS

  linux干货

为什么写这篇文章

因为有在外面访问家里 NAS 的需求,群晖自带的动态域名解析访问又太慢(因为群晖自带动态域名的 DNS 服务器在国外)。所以需要用内网穿透技术来实现通过其他公网 IP 来访问家里的 NAS 设备的需求。所以才有了这篇文章。

概念解释

  • NAS – 简单的说就是一个存储中心。
  • Frp – 一种内网穿透技术。
  • 内网穿透 – 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。

内网穿透

内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。
但我个人认为 Frp 是目前最好用配置最简单的(经过测试)

  • 花生壳
    配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。
  • Ngrok
    发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。因为折腾许久没有成功过,最后放弃。
  • Frp
    配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。

具体过程

准备工作

  • 一台有公网 IP 的服务器 (VPS、云主机)之前注册了一个国外的 VPS, 准备做内网穿透和 vpn 用,但由于访问速度。果断放弃,最后换成了自己阿里云 ECS。
  • NAS (客户端)群晖 DS 416 play

基本步骤

由于 Frp 官网说明文档还是比较详细。我不过多做解释。

服务器端配置:

  1. 登录服务器,在 Release页面 下载自己服务器对应版本 Frp
    wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_amd64.tar.gz

    实例中:我的阿里云 ECS 用的 centos7 所以我选择 linux_amd64 64位的
    Frp 0.12.0 最新测试版的

  2. 使用 tar 指令解压 tar.gz 文件
    tar -zxvf frp_0.12.0_linux_amd64.tar.gz
  3. 进入 frp 目录
    cd frp_0.12.0_linux_amd64
  4. 删除不必要的客户端文件
    rm -f frpc frpc_full.ini frpc.ini

    版本不同可能稍有差异,
    frpc 为客户端文件
    frps 为服务器端文件

  5. 配置服务器端文件
    vi frps.ini

    frps.ini 为服务器配置文件

  6. 编辑配置文件
    [common]
    bind_port = 7000
    vhost_http_port = 8080
    dashboard_port = 7500
    dashboard_user = 用户名
    dashboard_pwd = 密码
    max_pool_count = 5
    authentication_timeout = 900
    
    subdomain_host = lekee.cc
    
    [ssh]
    listen_port = 6000
    auth_token = 和客服端 token 对应

    简单解释:

    [common] 必填的

    bind_port Frp 服务端口(可自定义)
    vhost_http_port http 访问端口(可自定义)
    dashboard_port dashboard 界面端口
    dashboard_user 登录 dashboard 用户名
    dashboard_pwd 登录 dashboard 密码
    max_pool_count 最大连接池数量
    authentication_timeout 超时验证时间
    subdomain_host 自定义二级域名

    [ssh]

    listen_port ssh 访问端口
    auth_token 用户身份认证

    详细配置

    点击官方

  7. 保存上面配置文件吗,启动 frp 服务器
    ./frps -c ./frps.ini

    需要后台运行,请看下面

服务端配置结束。

客户端配置

客户端就是您本地需要做外网服务的设备,可以是 PC、Mac、NAS、路由器、或者虚拟机里的 liunx 系统。

这篇文章主要是利用 Frp 技术访问在群晖 NAS 服务的应用。实例也是 NAS 系统。

  1. SSH 登录群晖 NAS (群晖必须开启 ssh)nas_ssh_start
    ssh nas

    我设置过别名,详情查看我的另一篇文章MAC 终端 SSH 别名代替 IP 的方法
    ssh nas = ssh user@ip

  2. 下载 Frp, 删除服务端文件。(因为和服务端配置一样,不再一一赘述。)
    sudo -i // 切换 root 用户
    wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_386.tar.gz 
    tar -zxvf  frp_0.12.0_linux_386.tar.gz
    cd frp_0.12.0_linux_386
    rm -f frps frps_full.ini frps.ini
  3. 编辑 frpc.ini 文件(客户端配置文件)
    vi frpc.ini
  4. 编辑配置文件如下
    [common]
    server_addr = ip
    server_port = 7000
    auth_token = 和服务器端对应
    pool_count = 1
    
    [ssh]
    type = tcp
    local_ip = NAS 局域网ip
    local_port = 22
    remote_port = 6000
    
    [nas]
    type = http
    local_port = 5000
    subdomain = nas
    
    [web]
    type = http
    local_port = 80
    subdomain = web

    简单解释:

    [common] 必填的

    server_addr 服务器端公网
    server_port frp 服务端口,和服务器端 bind_port 一致
    auth_token 和前面服务器端 [ssh] auth_token 一致
    pool_count 连接池数量

    [ssh]

    type 服务类型(tcp、http、https、udp)
    local_ip NAS 本地局域网内网 ip
    local_port NAS 开启 ssh 服务端口号,默认 22
    remote_port 服务器端 ssh 端口,和服务器端 [ssh] listen_port 配置一致

    [nas] NAS 管理界面

    subdomain 二级域名 nas.lekee.cc 访问 NAS
    type = http 服务类型为 http
    local_port NAS 默认端口 5000

    [web] NAS web Station 服务,没用可以不用设置

    type = http 类型为 http
    local_port = 80 NAS web 服务端口
    subdomain = web 二级域名 web.lekee.cc
    使用自定义二级域名的时候,域名 *.lekee.cc 要解析到服务器 IP

    详细配置

    点击官方

  5. 保存,运行。(后台运行,请看下面)
    ./frpc -c ./frpc.ini

    此时在服务端会看到”start proxy sucess”字样,即连接成功。

测试运行

ssh 测试

ssh -p 6000 user@服务器ip

user 为你登录群晖 NAS 的用户名

nas 界面

打开浏览器输入 nas.lekee.cc.com:8080, 显示群晖登录界面成功。

nas

NAS web Station

打开浏览器输入 web.lekee.cc.com:8080, 显示下面页面成功。

nas_web

域名后面 8080 端口可以隐藏,下面介绍如何隐藏 8080 端口。

扩展应用

后台运行

后台运行服务的方法有很多,这里只说一种可以在服务器端(Linux)和客户端(NAS)都可以用的 nohup指令

服务器端

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

客户端

nohup ./frpc -c ./frpc.ini &

自动启动

我的另一篇文章 《frp 自动启动》

隐藏 8080 端口

浏览《Frp 隐藏 8080 端口》

总结疑问

使用状态

目前使用一切正常,能满足我的日常需求。
在外面需要访问 NAS 里的的文件的时候速度还比较满意。
今天还测试在外面看 NAS 里的视频,也一点都不卡。

我的担心

但我的担心就是在外面观看 NAS 里的视频的时候,流量有点害怕。
因为我现在使用阿里云 ECS 计费方式是按流量计费的。
不知道这样在外面看视频,用阿里云做中转。流量到底是怎么计算的。
还需要进一步探究。不过之前阿里云上预存1000元,都好几个月了。还有999.78元。

展望

这个技术伟大之处就是,只要设备能上网。不管有没有公网 IP,都可以让任何一个能上网的机子访问该设备。该设备可能是一台 PC,一个服务器,一个路由器,一个NAS,一个摄像头,一个… 无限扩展无限衍生,无限可能…
希望本文能您带来帮助!