如何用 Frp 实现外网访问群晖 NAS – 运维 – SegmentFault 思否

为什么写这篇文章

因为有在外面访问家里 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)

    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 本地局域网内网 iplocal_port NAS 开启 ssh 服务端口号,默认 22remote_port 服务器端 ssh 端口,和服务器端 [ssh] listen_port 配置一致

    [nas] NAS 管理界面

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

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

    type = http 类型为 httplocal_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 web Station

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

域名后面 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,一个摄像头,一个… 无限扩展无限衍生,无限可能…希望本文能您带来帮助!

未经允许不得转载:球盖网 » 如何用 Frp 实现外网访问群晖 NAS – 运维 – SegmentFault 思否

赞 (1) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏