外网通过群晖NAS访问家里内网的所有设备

外网通过群晖NAS访问家里内网的所有设备

有许多使用黑群晖的朋友由于没有公网IP而无法访问家中的NAS,庆幸的是目前有许多免费的内网穿透方案,要实现外网访问家中的NAS并不难,今天就带大家一起使用群晖安装ZeroTier实现外网访问,不仅如此还能通过群晖访问家中内网的所有设备,除了ZeroTier还有一款类似功能的叫Tailscale,有兴趣的可以了解下,两者都用过,对比个人还是认为ZeroTier更为简单、稳定、速度快。

ZeroTier是一款利用 UDP 打洞来实现内网穿透的工具,工作原理是组建一个虚拟局域网,只要加入这个虚拟局域网就可以实现互联互通。

外网通过群晖NAS访问家里内网的所有设备

便于理解画了一张图,如上,处在外网的手机和家里的NAS加入通过ZeroTier组建的虚拟网,实现手机如同在局域网中访问NAS,同时手机可通过NAS访问家中内网的所有设备。

OK,废话不多说,开整!

搭建ZeroTier虚拟网

访问:https://my.zerotier.com (第一次访问ZeroTier网站加载较慢,需要一点耐心多尝试几次,或用手机移动网络访问)如下图:

外网通过群晖NAS访问家里内网的所有设备

国内用户推荐使用微软账号注册,注册后如下图:

外网通过群晖NAS访问家里内网的所有设备

点击Create A Network按钮创建一个虚拟网,虚拟网ID就是后面设备加入该网的钥匙,点击进入虚拟网设置,如下图:

外网通过群晖NAS访问家里内网的所有设备

可以改个名称其他提议保持默认,后续实现外网访问内网多设备还需设置,后面再细说,我们先记住这个虚拟网络ID即可。

群晖安装ZeroTier

1、访问群晖,在套件中心找到Docker套件并安装(注意⚠️,由于我使用的是群晖DSM最新7.2版本,Docker已更名为Container Manager,两者功能一样只是名称不同,不影响),如已安装请忽略。

外网通过群晖NAS访问家里内网的所有设备

2、使用SSH链接群晖并切换高级root身份(我们需要用到命令行界面操作),如不知如何链接请查看这篇教程:
https://www.toutiao.com/article/7230343447864050191/

外网通过群晖NAS访问家里内网的所有设备

3、检查是否安装了tun,在命令行界面输入:

lsmod | grep tun

外网通过群晖NAS访问家里内网的所有设备

4、安装tun,如上图,表明已安装可跳过,如无,则执行以下命令:

insmod /lib/modules/tun.ko

安装后可执行上一步命令查看是否已安装成功。

5、写入脚本,使得设备启动时调用/dev/net/tun

echo -e '#!/bin/sh -e 
insmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh

6、给脚本添加权限

chmod a+x /usr/local/etc/rc.d/tun.sh

7、运行一次,以创建tun

/usr/local/etc/rc.d/tun.sh

8、检查tun工作,显示“/dev/net/tun”表明OK

ls /dev/net/tun

外网通过群晖NAS访问家里内网的所有设备

9,回到群晖界面,在docker文件目录下创建一个名为“zerotier”的文件夹,查看属性,复制其路径,如下图:

外网通过群晖NAS访问家里内网的所有设备

9、回到命令行界面,在Docker中创建zerotiert容器,执行以下命令:

docker run -d           
  --name zerotier       
  --restart=always      
  --device=/dev/net/tun 
  --net=host            
  --cap-add=NET_ADMIN   
  --cap-add=SYS_ADMIN   
  -v /volume1/docker/zerotier:/var/lib/zerotier-one zerotier/zerotier-synology:latest

命令中/volume1/docker/zerotier替换为上一步创建的文件夹地址

10、查看节点ID和状态,显示“200 info 4e3fe6bbc7 1.8.4 ONLINE”(4e3fe6bbc7 为该设备节点ID)

docker exec -it zerotier zerotier-cli status

外网通过群晖NAS访问家里内网的所有设备

11、加入前面我们在ZeroTier网站创建的虚拟网(“000”替换成你的虚拟网ID)

docker exec -it zerotier zerotier-cli join 000

12、登录ZeroTier管理后台(https://my.zerotier.com/),对 NAS 进行授权和分配虚拟网IP,如下图

外网通过群晖NAS访问家里内网的所有设备

刚加入设备是未钩上的,点击钩上表明授权加入,点击旁边的扳手icon,钩上第一项(此项为允许通过此设备访问内网其他设备),页面自动保存,如无特殊情况过几秒就可以看到自动分配的IP,通过这个虚拟IP即可在外网访问。

13、回到命令行界面,输入以下命令,查看网络状态

docker exec -it zerotier zerotier-cli listnetworks

外网通过群晖NAS访问家里内网的所有设备

阶段性结束,到此可以休憩下,喝杯奶茶

设置外网通过群晖访问家中所有设备

1、启用IP转发,分别执行以下命令:

echo ‘net.ipv4.ip_forward = 1’ | tee -a /etc/sysctl.conf
echo ‘net.ipv6.conf.all.forwarding = 1’ | tee -a /etc/sysctl.conf

2、执行以下命令使IP转发生效

ysctl -p /etc/sysctl.conf 

有可能会失败(可忽略),重启群晖会自动生效,为了不打断配置,可执行以下命令,零时开启IP转发

echo 1 > /proc/sys/net/ipv4/ip_forward

3、添加用户自定义脚本,使得启动时自动设置NAT转发(在群晖界面操作)

操作路径:

控制面板->服务->任务计划->新增->触发的任务->用户自定义的脚本

常规->一般设置->事件->开机

任务设置->用户自定义的脚本,输入以下代码并确定

sleep 1m
iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE

sleep 1m
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

推荐第一种,第二种中的“eth0”为网卡名称,可以在ssh中通过ifconfig命令查看网卡名称。

为保证开机启动已加载所有网络模块,延迟1分钟再添加NAT,否则会遇到模块不存在错误。

外网通过群晖NAS访问家里内网的所有设备

外网通过群晖NAS访问家里内网的所有设备

外网通过群晖NAS访问家里内网的所有设备

4、回到zerotier管理后台https://my.zerotier.com/)设置子网路由规则

外网通过群晖NAS访问家里内网的所有设备

如上图,1填写家中内网IP段如10.7.86.0/24(这是我家的),2填写zerotier分配给群晖NAS的虚拟IP,点击Subimt添加。

至此群晖端已全部部署完毕,☕️☕️☕️☕️喝口水,压压惊,重启下群晖,接下来就是见证奇迹的时刻。

验证

手机登录zerotier官网下载对应的客户端,支持的设备还是比较全的,iOS手机可以直接在应用市场下载安装,安装后添加虚拟ID加入虚拟网络,再登录zerotier管理后台授权下即可,客户端加入虚拟网络操作简单就不再赘述了,大家自己摸索下。

外网通过群晖NAS访问家里内网的所有设备

以android为例,手机开启后在状态栏会出现一把“钥匙“即表明成功

感谢大家的阅读,以上操作若有不明处可以留言或私信我,如果你是群晖NAS爱好者希望收藏关注给小编点赞

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
棋子的头像 - 鹿快
评论 共2条

请登录后发表评论