一、群辉NAS应用场景
你是否有过这样的需求?
1. 远程办公
日常的工作资料太多太杂乱,换个电脑根本没法工作?团队间资料共享太麻烦?Drive套件这个远程办公神器都能解决。
我的文件相当于远程的“我的文档”,“团队文件”是可以与团队成员共享。在PC端和手机端都可以方便地打开。
2. 私人云盘——WebDAV
直接将nas远程挂在到自己的电脑里,随时随地调用自己的文件。下图是我在单位打开家里nas调取资料的情况。在网络不卡的情况下与本地操作并没有多大区别。
当然还有群晖nas还可以做全程流媒体服务器,远程下载服务器,云同步服务器。在带宽允许的情况下,你在局域网内能够折腾的套件都可以搬到公网上来。
…
NAS毕竟是一台网络服务器。尽管群晖已经提供了非常友好的图形化操作界面,但是大量的设置仍然是晦涩难懂的网络工程师语言。想要完成稍微进阶一点的NAS设置,就要求使用者有基本的网络概念,对拓扑、路由规则、TCP/IP设置等有一定的了解。
举例来说,如果要获得最佳的外网访问体验,你需要开通DDNS服务,让外网可以直接通过DDNS的方式随时访问你的NAS:
而这只是设置的开始。要想通过DDNS直接访问NAS,还需要家里的光猫桥接路由器,由路由器完成拨号,同时路由器拨号得到的WAN IP还必须是公网IP,如果不是,还需要向运营商申请,这之后,不管是DMZ的方式还是uPNP端口映射,都需要大量专业的路由/NAS设置,不断解决遇到的各式问题才能设置成功。
除此之外,大部分套件并非装好即用。套件本身也涉及到各种专业设置、以及一些软件出厂就有的小BUG,都需要需要搜索到解决方案,并尝试自己解决。比如我在docker里安装的Jellyfin媒体服务器程序,到现在也无法完成核显的硬解。
绝⼤多数家庭⽹络都是ISP(运营商)提供的内⽹,所以,当你搭建的群晖NAS处于家庭内⽹的环境 时,就只能在局域⽹当中发挥作⽤,⽽要发挥群晖NAS的真正作⽤,则需要向ISP申请公⽹,这样⼀来,配合路由器中NAT端⼝映射,你就可以在全球各地随时随地不受⽹络环境影响地去访 问你的群晖NAS了,但是我国各地对公⽹管理条例各不相同,因此具体需要向当地的ISP咨询, 不过如果你是⽩群晖,则可以通过QuickConnect账户在局域⽹外进⾏访问,不过速度很感⼈。
下面就分享一下公⽹、NAT、DDNS、证书等的配置,让你发挥群晖NAS的最⼤能⼒。
二、群晖公网访问解决方案
第一种方法:在接入群晖NAS的路由器上做端口转发NAT
无论是用哪种方式,只要是连接外网访问Nas都需要在路由器中设置端口转发才能实现。
端口转发只需在路由器上设置一下就OK。具体要转发端口取决于你需要什么服务。比如说群晖NAS管理端口是5000 (HTTP)和5001 (HTTPS)等等,具体什么套件转发什么端口。可以参考群晖官网的详细列表:
打电话到运营商如电信是10000、移动10086,首先要求给你公网IP,然后改路由为桥接模式,由路由拨号,在路由里面设置端口映射或DDNS。
下面是我的NAS的内网IP地址。
下面是我家路由器的公网IP地址。
然后在路由器上做端口转发,如图,有最后一行就可以,我的是其他应用用了其他端口,所以我也做了单独的转发。
然后出差在外通过公网就能访问了,通过家里的固定IP地址,如图。
第二种方法:通过群晖自己的DDNS
DDNS是动态域名解析,因为家用即使是公网ip,重新拨号ip也会发生变化。
电信宽带可以免费申请公网ip,申请了后,就会发现群晖得乐趣了,访问外网速度真是快。
这种方式需要宽带支持公网IP。然后只要申请一个固定的域名。把域名的相关信息填入到群晖NAS中就可以实现DDNS访问。由于不需要中转服务器,这种访问的速度和体验。而且黑群晖和虚拟机都可以用,不受硬件限制。
有个简单的办法可以检测你是不是公网IP。在百度搜索关键词“ip地址”,可以在结果中查到你目前的外网ip地址。与自己路由器上的拨号地址一对照。如果一致,就表示你拥有公网IP了。
流程:
1) 域名申请,要用DNS当然首先得有域名,由于下面使用的是dnspod的ddns工具,因此需要在dnspod申请,如果想在其它平台申请,应该需要另找ddns工具或者修改工具。
2) 在NAS的Package Center中安装git套件,直接搜索安装即可。
3) 从git下载开源DDNS实现:git clone https://github.com/kkkgo/dnspod-ddns-with-bashshell.git
4) 在dnspod平台生成一个API Token,入口特难找,无语!所以把地址贴出来:https://console.dnspod.cn/account/token
5) 修改dnspod_ddns.sh中的以下几个变量,注意host是需要解析的主机名,也就是dns中配置的子域名前缀。
API_ID=12345
API_Token=abcdefghijklmnopq2333333
domain=example.com
host=home
6) 测试,直接run 一下脚本dnspod_ddns.sh,正常情况会出现以下输出。
Mon Feb 24 11:55:01 CST 2020
[URL IP]:114.248.123.234
[DNS IP]:221.219.123.234
[API IP]:114.248.123.234
IP SAME IN API,SKIP UPDATE.
7) 添加crontab定时调起dnspod_ddns.sh,直接vi /etc/crontab。要注意dnspod_ddns.sh一定要加上x权限,另外DSM的crontab和POSIX的不太兼容,多了一项执行用户,如下示例:
*/5 * * * * root sh /**/dnspod_ddns.sh 2>&1 >> /var/log/ddns.log
中间的root就是你要使用什么账号运行脚本,另外这里把所有输出重定向到日志了,便于排查问题。
8)权限配置
由于dnspod_ddns.sh中保存了你的access token,这是很重要的信息,建议将其改为运行账号的权限,如上是用root执行,那么用如下命令修改权限:
sudo chown root:root dnspod_ddns.sh
chmod 700 dnspod_ddns.sh
以保证不被非法篡改或被无关人查看。
具体操作:
在群晖的控制面板中>>外部访问>>DDNS
然后这是个自定义的域名
动态的公网ip可以通过ddns来解决。
例如华硕路由器自带ddns服务,能把动态ip解析成一个固定的域名,然后你外网访问的时候只需要输入这个域名加你NAS的端口号就可以了。
也可以花生壳的免费域名。域名资源很多且费用不高,大家花点精力去注册一个就好。但依据政策:购买和启用域名都必须通过实名认证。所以大家购买之后也要注意保管好自己的域名,不要随便外借给别人使用。
因为目前IPV4地址资源有限。大部分宽带用户需要申请公网IP。不过各大运营商手中还是有公网IP资源的,且公网IP目前需求属于小众。打电话给客服说自己有远程监控需求,一般都能停申请到公网IP。
本人是移动宽带用户,也成功申请到了公网IP。成功与否在于你的话术和诚恳度,多申请几次总会通过的。
(风险提示,有部分地区对通过通过DDNS解析的个人网站加大了查处力度。所以这种方式在某些地区存在一些风险。如果你的nas公司内部使用,那么去跟运营商申请一个固定IP(笔者所在城市的注册公司可以申请办理)。再去申请正规的网站备案,基本就没有后顾之忧了。
第三种方法:通过群晖的quickconnect
最简单的外网访问方式,但是速度是所有方法中最慢的,偶尔出现卡顿。
如果不喜欢折腾,又购买了正版群晖NAS(俗称白群晖),NAS初始化的同时去注册一个synology账号,就可以用DSM登陆链接(http://QuickConnect.to/xxx)进行远程访问了。
通过控制面板的quickconnect,设置quickconnect。
QuickConnect服务相当于官方提供的内网穿透服务。
优点是方便,不需要太多的网络知识,缺点是需要通过群晖中转服务器,连接速率会慢一些,体验上会打一些折扣。
第四种方法:网云穿内网穿透
1、配置隧道,填写正确的内网 IP 和端口号
我们先在网云穿官网上配置好群晖使用的“隧道”,可以参考上面电脑穿透教程的第一步,注册帐号并领取你的免费隧道。
在群晖的控制面板→网络→DSM 设置里可以查看当前 NAS 使用的端口号,默认一般是 5000,这样我们进入网云穿的网页控制台,把隧道的内网端口设置成 5000
,内网 IP 写 127.0.0.1
即可。
然后,这里需要先记录下此隧道的「令牌」以及你的「二级域名」,后面会需要用到。
2、在群晖 NAS 上安装网云穿内网穿透客户端
开启 SSH (此操作是为了安装客户端)
要在群晖上安装内网穿透工具,需要先“开启 SSH 权限”,进入群晖控制面板→终端机和 SNMP→终端机→勾选“启动 SSH 功能”,默认 22 端口即可。
使用 ssh 工具登录群晖:我们可使用 Putty (Windows)、macOS 自带终端,或各种你熟悉的 SSH 客户端进行连接,然后顺序执行下面的命令:
# 第一步:
# 通过 SSH 登录群晖
# 如果你用 Putty 等“图形界面”的 SSH 客户端,就在软件上进行连接,并略过此步。
# 如使用 Mac 终端、Win10 新版自带的命令行等,则执行:
ssh 用户名@群晖的局域网IP
# 例子如“ssh [email protected]”
# 第二步:
# 获取管理员权限
sudo -i
# 第三步:
# 下载网云穿客户端
# 这里要根据你的机型 CPU 选择 ARM 版或是 Intel (x86) 版,网上搜索自己机型规格。
# == 注意区分版本,不要下载错机型 ==
# x86 处理器 - 下载网穿云 Linux 版命令:
wget https://down.xiaomy.net/linux/wyc_linux_64
# ARM 处理器 - 下载网穿云 Linux ARM 版命令:
wget https://down.xiaomy.net/linux/wyc_linux_arm
# 第四步:
# 给客户端文件设置运行权限
# == 注意区分版本 ==
# ARM 处理器:
chmod -R 777 ./wyc_linux_arm
# 其他处理器:
chmod -R 777 ./wyc_linux_64
# 搞定!至此已经完成了在命令行的工作了
3、在群晖内增加自定义任务,开机自动运行网云穿客户端
进入群晖后台→控制面板→任务计划,然后点新增→触发的任务→用户定义的脚本,如下图
给任务设置一个名称,比如 WangYunChuan,帐号是 root,事件为“开机”:
点击「任务设置」,在下面的“用户定义的脚本”区域里填入你的命令,这段脚本在下面:
如果你的群晖是 ARM 处理器,那么拷贝这一段进去,而且还要记得替换成你自己的令牌:
cd /root
nohup ./wyc_linux_arm -token=令牌 &
# 注意令牌后面跟着一个空格,接着还有个符号&别漏掉
如果是 Intel 的处理器,那么就复制这一段,记得替换成你自己的令牌。另外,和之前一样,机型也别弄错了。
cd /root
nohup ./wyc_linux_64 -token=令牌 &
# 注意令牌后面跟着一个空格,接着还有个符号&别漏掉
填好脚本命令之后,点击确定。然后在列表里找到此任务,右键点击选择“运行”即可。之后每次 NAS 开机,网云穿的客户端都会自动启动。
4、远程访问你的群晖 NAS!
这时已经大功告成了!在互联网上任何的电脑或手机上,现在都能通过访问你的隧道域名,如 http://xxxx.dongtaiyuming.net
,连接上你家里的群晖 NAS。由于这个隧道选择了 HTTP 模式,我们无需添加端口都能直接访问;而如果选 TCP 模式,则需用 域名:外网端口
方式访问 (外网端口在控制台→显示隧道信息那里可以查看)。实测我这个 3m 的免费隧道下载文件也能跑满 3m,一般日常的办公文档传输都够用了。
第五种方法: FRP 内网穿透
一、获取frp服务器,建议自建服务器,也可以临时借用免费服务器进行搭建。
1.1 免费服务器推荐:https://freefrp.net/
frp1.freefrp.net
连接端口 :7000 密码 :freefrp.net
开放端口 :80 / 443 , 10001 – 50000免费域名 :*.a.freefrp.net
frp2.freefrp.net
连接端口 :7000 密码 :freefrp.net
开放端口 :80 / 443 , 10001 – 50000免费域名 :*.b.freefrp.net
frp3.freefrp.net
美国 – 水牛城
连接端口 :7000 密码 :freefrp.net
开放端口 :80 / 443 , 10001 – 50000免费域名 :*.c.freefrp.net
frp4.freefrp.net
美国 – 洛杉矶
连接端口 :7000 密码 :freefrp.net
开放端口 :80 / 443 , 10001 – 50000免费域名 :*.d.freefrp.net
1.2 测试服务器线路是否正常。使用前必须先ping下服务器看是否线路正常,免费的特点就是不稳定,如果服务器线路不通,你无论如何也是调试不通的。
win+R,打开cmd,ping命令测试。
以frp1.freefrp.net线路举例测试。
服务器线路测试结果正常。
二、将需要使用的域名在域名解析服务商控制台设置CNAME
指向 frp 服务器地址,具体参见https://www.ioiox.com/archives/26.html,大神级教程。
三、frp客户端设置
3.1 配置frpc.ini
在群晖NAS任意位置新建或者上传frpc.ini文件,建议使用群晖的文本编辑套件来创建和编辑.ini文件,避免Windows下的后缀问题导致容器错误。
以/Docker/frp/frpc.ini为例。
3.2 编辑frpc.ini文件,具体可参考https://www.ioiox.com/archives/26.html。
四、frp服务器端搭建设置
4.1 进入群晖,打开docker,左列“注册表”里搜索“frp”
4.2 这里选择stilleshan的版本进行下载。
4.3 在映像里等待下载完成,选择映像,启动
4.4 创建容器,选择使用高权限执行容器
4.5 进行设置
4.6 点击”下一步“。
4.7 进行容器创建前的信息确认。
五、验证测试通过,收工!
第六种:硬件内网穿透
因为申请到了公网IP,所以就没有去研究各种类型的穿透方式了。
建议购买类似花生棒和蒲公英的硬件穿透方案。
硬件穿透方案相对来讲简单一些,价格也不贵。用软件方式内网穿透的方案也有很多,优点是可以找到免费资源。不过方法都比较复杂。
第七种方法:虚拟局域网软件 ZeroTier 和 Tailscale
异地访问 NAS,IP+DDNS 或 FRP 方案,需要暴露较多的端口在公网上,因此有时候需要考虑使用虚拟局域网组网。
ZeroTier 稳定易用,但异网打洞成功率较低,且由于中继服务器在外国,中继后对速度较慢,要求高的可以尝试自建 Moon/ 根服务器或采用双 ZeroTier 网络 ( 参考扩展链接 ) 。
Tailscale 打洞成功率更高,支持 MagicDNS(https://tailscale.com/kb/1081/magicdns/),使用也很方便。
笔者由于目前使用环境是电信与联通组网,ZeroTier 无法成功打洞,且暂不想折腾自建 Moon,所以选用 Tailscale。
由于 DSM 7 不允许第三方应用直接使用 root 权限运行,因此使用 Docker 安装。
本文在容器上执行的所有操作都通过 Docker CLI 完成。
本文均为在 DSM7 下操作,理论上可以兼容 DSM6(未测试)。
创建持久性 TUN
使用 SSH 连接到 NAS
ssh [email protected] -p 22
以下设置步骤必须以 root 用户身份运行
sudo -i
写入脚本,使得设备启动时调用 /dev/net/tun
echo -e ‘ #!/bin/sh -e ninsmod /lib/modules/tun.ko ’ > /usr/local/etc/rc.d/tun.sh
给这段脚本添加权限(其实应该先 vi 这个空的脚本,然后添加权限,最后在写入上面的脚本内容,不然会提示你 readonly)
chmod a+x /usr/local/etc/rc.d/tun.sh
运行脚本一次以创建 TUN
/usr/local/etc/rc.d/tun.sh
检查 TUN 的运行状态
ls /dev/net/tun
/dev/net/tun
在 NAS 上安装 Docker
打开套件中心 ->搜索 Docker->安装
ZeroTier 的安装和配置
设置容器
创建目录以存储 ZeroTier 的身份和配置
mkdir /volume1/docker/zerotier-one
创建 ZeroTier 容器,命名为 zt ( Repo: zerotier/zerotier-synology )
docker run -d
— name zt
— restart=always
— device=/dev/net/tun
— net=host
— cap-add=NET_ADMIN
— cap-add=SYS_ADMIN
-v /volume1/docker/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest
授权入网
查看节点 ID 和状态(c715e6680c 为节点 ID)
docker exec -it zt zerotier-cli status
200 info c715e6680c 1.6.5 ONLINE
加入您的网络 (替换成自己的网络 ID)
docker exec -it zt zerotier-cli join e5cd7a9e1cae134f
在管理后台(https://my.zerotier.com/),对 NAS 进行授权和分配 ID。
ZeroTier 管理后台的其他设置和详细用法可以参考官方文档或者网上其他教程
常用命令
查看节点状态
docker exec -it zt zerotier-cli status
查看网络状态
docker exec -it zt zerotier-cli listnetworks
显示正在运行的容器(可选)
docker ps
输入容器(可选)
docker exec -it zt bash
Tailscale 的安装和配置
设置容器
创建目录以存储 Tailscale 的身份和配置
mkdir /volume1/docker/tailscale
创建 Tailscale 容器,命名为 ts ( Repo: tailscale/tailscale )
docker run -d
— name ts
— restart=always
— device=/dev/net/tun
— net=host
— cap-add=NET_ADMIN
— cap-add=SYS_ADMIN
-v /volume1/docker/tailscale:/var/lib/tailscale tailscale/tailscale:stable
授权入网
执行以下代码,获取授权链接
docker exec ts tailscale up
复制并在浏览器打开授权链接,然后登录(鉴于国内环境,建议选择 Microsoft)并授权
可以进入管理后台查看节点状态(https://login.tailscale.com/admin/machines)
可选操作
禁用授权自动过期(Tailscale 的授权默认 6 个月过期)
操作路径:后台 ->Machines->点击节点右侧『』->Disable key expiry
启用 MagicDNS(可使用用机器名作为域名访问设备
操作路径:后台 ->DNS->Add nameserver 然后 Enable MagicDNS
在外网访问群晖所在内网的其他设备
设置群晖的内网转发
使用 SSH 连接到 NAS 并切换到 ROOT 身份
启用 IP 转发(永久修改)
echo ‘ net.ipv4.ip_forward = 1 ’ | tee -a /etc/sysctl.conf
echo ‘ net.ipv6.conf.all.forwarding = 1 ’ | tee -a /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
第三行可能会执行失败,可以重启系统或者执行以下代码临时开启 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
设置 NAT 转发
方式一(推荐)
iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE
方式二
eth0 为网卡名,如果是多网口的机器,请使用 ifconfig 查找自己机器的网卡名
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
添加用户自定义脚本,使得启动时自动设置 NAT 转发
操作路径:
控制面板 ->服务 ->任务计划 ->新增 ->触发的任务 ->用户自定义的脚本
常规 ->一般设置 ->事件 ->开机
任务设置 ->用户自定义的脚本,输入以下代码并确定
为保证开机启动已加载所有网络模块,延迟 1 分钟再添加 NAT,否则会遇到模块不存在错误
sleep 1m
iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE
设置 ZeroTier
登录管理后台(https://my.zerotier.com/),进入 NetWorks 管理页面
在 NetWorks->Advanced->Managed Routes 添加子网路由规则即可
10.10.2.0/24 via 10.10.10.10
根据自己实际设置,第一个为群晖所在内网的 IP 段、第二个为 ZeroTier 分配给群晖的 IP
设置 Tailscale
设置子网路由(10.10.2.0/24 为当前节点的内网段,自行替换)
docker exec ts tailscale up — advertise-routes=10.10.2.0/24 — accept-routes
登录管理后台(https://login.tailscale.com/admin/machines)并启用该节点的子网:
操作路径:后台 ->Machines->点击节点右侧『』->Edit route settings->打开对应子网前面的开关
验证
在外网设备上配置好对应的虚拟局域网客户端,然后就可以直接 Ping 群晖以及内网 IP 了。
外网访问内网设备的重点在于设置 TUN 和设置内网转发部分,虽然是以群晖为例,但各位也可以根据下方的官方文档稍加变通,应用于其他设备。
三、推荐几款群辉NAS套件
1、Synology Drive远程套件
Synology Drive是一款非常好用的云办公软件。在线文档存储,团队共享。设置共享时限、共享范围等功能非常实用。非常适合中小型公司远程办公使用。
安装套件时,我需要将Driver server 、 office和文档查看器三个套件一起安装好。
安装好这些套件以后,就可以从主菜单的Driver菜单中进入远程办公选项。
进入driver界面之后,打开加号菜单。在线文档、电子表格和ppt幻灯片制作功能一应俱全。
文档编辑功能上相比WPS之类的还是稍差了些,不过与一般在线文档没有太多差别,因为是自建远程办公服务器,所有的高级功能都“免费”开放。也几乎没有空间限制。
自建模板保存与调取都非常方便。
除了以上功能之外,文稿的每一次更改保存都会有历史版本备份。发生误删等操作时候可以通过时间线快速找回历史版本。
分享链接时也可以设置密码和链接有效期。
有电脑和手机端都可以通吃,同时根据不同文件类型。还可以选择浏览一类文档。功能基本与在线网盘一致。
此外还有“Drive Client”的PC客户端。能够实现pc主机与服务器端的自动同步功能。
设置完成后,进入Drive PC客户端的控制面板,将同步模式改成“单向上传”,点击应用。就可以为客户端的文档做自动备份。
2、WebDAV私人云盘
通过打开WebDAV服务,群晖NAS也可以用作云盘挂载。这个功能目前国内主流网盘都不支持。我们却可以通过几步设置就可以轻松得到一个大容量网盘。
1、服务端设置
套件中心内搜索 “webdav”,安装套件。
设置方面非常简单,只要记住https的端口号。在路由器中添加一条端口映射就可以了。安全性考虑不建议勾选匿名登陆。如果是多用户登陆,可以开启速度限制。
2、客户端设置
本来Windows 的文件管理器原生支持添加 WebDAV 文件夹。但体验方面非常一般,不仅反应慢,还有文件大小限制和http连接限制。虽然可以通过修改注册表解决部分问题,但也有点忒麻烦了。
我们直接用第三方神器——RaiDrive 。RaiDrive有免费版本,且支持中文,体验友好。
软件可以自行在度娘下载,并不困难。安装完毕后软件会指引你设置添加webDAV地址。我们先不忙设置,到setting里改一下中文界面。
按照此路径,将语言改成简体中文。
然后我们再回到原来的“添加”界面,服务类型选择:NAS>WEBDAV。最后添上地址、端口号、用户名、密码 。虚拟驱动器盘符自选,只要不与原来冲突就行。
全部设置完毕点击“确定”。就会建立一个网盘链接,点击箭头开启。远程挂载便完成了。
以上两个例子算是抛砖引玉,群晖NAS的远程基本都是这样的玩法。只要实现了远程登录,路由器端设置了端口转发。我们就可以通过注册的域名远程登录各种套件。实现和本地一样的功能。
除了以上两个套件外,还也用photo (远程相册)Video(流媒体在线转码),cloud(云同步)等等功能。其他软件具体使用方法,可以参考我之前的教程。