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

XunHuanTi
• 阅读 85730

为什么写这篇文章

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

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

    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, 显示群晖登录界面成功。

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

NAS web Station

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

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
SSH 隧道实现内网穿透
家里买了台NETGEAR路由器刷了梅林固件,可以在USB接口上挂个存储当NAS用,发现家里的移动宽带是没有公网ip的,于是在外网访问不到内网,ddns也没法用了(不要给我推荐花生壳内网版😝)。那么,需求就是如何让外网访问到内网ip。于是想到了从内网到公网上的某台机器建立一条ssh隧道,通过访问公网机器把数据穿透到内网,实现方法:在内
Stella981 Stella981
3年前
SoftEther异地组网
需求与现状如果要远程访问内网的资源,如电脑,NAS,路由器等等,目前的做法大概有下面几种:在路由器上面进行ARP绑定和端口映射。这种方式操作简单方便,但是缺点也
Wesley13 Wesley13
3年前
黑群晖DS3617xs
这两天闲来没事在某宝上搞了个黑群晖主机就j1900/4G小主机系统是DCM6.1.7up315284版网上修改的教程很多,走了好多弯路终于搞定我的黑群NAS,现分享给各位道友,有不足的地方请给位指出。!(https://oscimg.oschina.net/oscnet/daf8a1578d67a774d4a58837e2
Stella981 Stella981
3年前
CentOS8轻松搭建内网穿透frp和设置开机自动启动方法
!最高软件专注商标以及域名系统开发(https://static.oschina.net/uploads/img/202009/24161534_xOfD.jpeg)当下各种NAS各种私有云盛行的时代,如果想让其他人通过域名访问或测试本地构建的Web服务器,但是由于本地计算机没有公网固定IP,因此域名无法解析为本地计算机。此功能可以通过frp实现。
Stella981 Stella981
3年前
Jenkins打Docker镜像推送到私有仓库
Jenkins打Docker镜像推送到私有仓库因为我的Jenkins是安装在群晖NAS中的docker,所以我这边就以Docker安装Jenkins为例!(https://oscimg.oschina.net/oscnet/up32dceca60af852573f508da551328bc92
Wesley13 Wesley13
3年前
K8S使用群晖DS218+的NFS
欢迎访问我的GitHubhttps://github.com/zq2599/blog\_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;群晖和K8S1.学习K8S时经常用到网络存储,于是想找个稳定的NFS服务,正好家里的群晖DS218长期开着,空间又充足
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
NAS服务器和传统服务器的区别
NAS服务器和传统服务器的显著区别可提供更加可靠和安全的数据保护可提供不间断地在线扩容存储空间,不需停机可实现数据的集中存储和备份,节省硬件投入支持各种类型的网络用户,多平台操作系统的用户都可以访问NAS上的共享数据配置简单,管理方便,节省人员成本所谓NAS,通俗地讲就是直接挂接在网上的存储设备,实际上就是一台专用数据服务器,它不再承