网站首页 > 技术文章 正文
前言
玩NAS都知道拥有一台群晖有多香,大多数朋友入坑前都会选择自己组建一台,毕竟一台配置像样点的群晖价格不菲,而自己组建的群晖就无法享受群晖的QuickConnec服务,也就无法外网访问,要做到外网访问家中的群晖就要做内网穿透,然而目前大部分家庭宽带运营商都不会提供公网IP,那么有其他的办法吗?答案的肯定的,方法很多,要么要钱、要么不稳定、要么限流、要么门槛很高,作为一个本着追求完美,能白嫖绝不花一个大洋的头条博主今天就带着大家使用Docker安装ZeroTier实现内网穿透。
ZeroTier是一款利用 UDP 打洞来实现内网穿透的工具,工作原理是组建一个虚拟局域网,各个设备(NAS、Linux、Windows、Mac、iOS、Android)安装客户端,加入到这个虚拟局域网后,就会自动分配一个IP,从而实现局域网内各个设备及服务的相互访问!相比其他工具成功率更高、部署更简单。最重要的它是免费的,最大支持25个设备连接。
项目地址:https://github.com/zerotier/ZeroTierOne
准备工作
1、注册ZeroTier,获取NetWork ID
访问:https://my.zerotier.com (如果ZeroTier网站加载不出来,需要一点耐心多尝试几次,或用手机移动网络访问)
由于某些因素,建议使用Microsoft注册
记住上面的NetWord ID号,它就是各设备加入这个虚拟网的钥匙。
详细的ZeroTier注册及设置后续我再单独出教程!
2、群晖安装Docker
这个简单就不细说了,登录你的群晖在官方套件中心找到Docker点击安装即可。
3、使用SSH链接你的群晖
控制面板——终端机和SNMP——启动SSH功能(安全起见,使用后记得关闭)
Windows使用PuTTY(工具下载:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html),如果您用的是MAC,直接使用终端即可。
至此准备工作已做完
安装ZeroTier
1、打开PuTTY,输入群晖IP与端口号,点击“Open”
正常情况下弹出一个黑窗,如果是第一次使用可能会弹安全确认窗,点确认或继续即可。
2、黑窗中输入您的群晖登录名,按回车键再输入密码,注意输入密码过程中界面什么也不显示这是正常的,输完按回车建即可;
4、出现登录名@群晖名称即表示登录成功,接着输入sudo -i,回车再输入一遍密码,切换为root身份;
sudo -i
5、创建一个/usr/local/etc/rc.d/tun.sh 脚本到/dev/net/tun 目录下(复制以下脚本,粘贴到黑窗,按回车键提交)
echo -e '#!/bin/sh -e ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh
6、给刚刚创建的tun脚本授予所有用户均可执行的权限
chmod a+x /usr/local/etc/rc.d/tun.sh
7、使用以下命令检查以下tun.ko是否存在
lsmod | grep tun
如图表示存在,我的群晖默认已经有tun这个包,不需要安装,直接用即可,若以上命令找不到tun这个包,则执行以下脚本,创建tun,然后再执行上一个段脚本检查是否存在;
/usr/local/etc/rc.d/tun.sh
8、检查TUN的运行状态
ls /dev/net/tun
9、创建一个zerotier文件夹用于挂载zerotier-one的配置文件和认证信息(注意这里的路径是在我的docker路径下)
mkdir /volume1/docker/zerotier
你也可以直接在群晖File Station上创建,然后查看文件夹属性,获取实际路径(建议使用这步,比较直观,不容易出错)
10、创建一个容器,这里将它命名为zt,这里会自动下载最新版的zerotier(注意最后一行脚本中的“/volume1/docker/zerotier”是否为上一步创建zerotier文件夹的地址);
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:/var/lib/zerotier-one zerotier/zerotier-synology:latest
执行完,出现一串检验码即表示镜像部署启动成功,回到群晖管理页面,打开Docker-容器,既可以看到多了一个群晖镜像;
配置zerotier-one加入您的虚拟网络
1、使用以下命令检查zerotier-one的运行状态
docker exec -it zt zerotier-cli status
如图,显示“200 info…”表示zerotier运行成功。
2、使用以下命令加入你的zerotier-one网络(其中后面的**********换成你自己的zerotier-one生成的NetWork ID)
docker exec -it zt zerotier-cli join **********
当看到200 join OK,既是表示加入网络成功,这时候登录zerotier控制台,即可看到网络列表多了一条未授权加入的网络;
勾选允许,获取到ip即可通过此ip访问;
为其他(需要访问群晖的)设备安装zerotier
拿Android手机为例,通过下方链接下载APP(其他平台设备请访问官网下载对应客户端)
https://download.zerotier.com/dist/ZeroTierOne.apk
1、手机打开zerotier
点击右上角加号icon,添加NetWord ID号加入虚拟网络
添加成功后,点击下图开关打开(记得访问https://my.zerotier.com勾选允许),点击行可以查看详情
手机状态栏会出现一把“钥匙“icon即表示成功
最后如果您在家里就关闭wifi使用移动网络试一试吧!
升级ZeroTier
升级zerotier需要先停止容器,并且移除容器,然后再拉取最新的容器:
1、查看zerotier-one状态信息:
docker ps
显示信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25ijo525df3435 zerotier/zerotier-synology:latest "zerotier-one" 5 weeks ago Up 9 days zt
停止容器(注意id)
docker stop 25ijo525df3435
移除容器(使用rm)
docker container rm 25ijo525df3435
拉取最新的容器
docker pull zerotier/zerotier-synology:latest
然后再回到上面第10步创建的步骤。
一些问题
问题1:Mac OS/Windows安装zeriotier客户端显示“waiting for zeriotier system service...”无法打开UI
答:
Mac OS系统
打开MAC终端运行以下命令回车输入管理员密码,查看zeriotier UI是否正常,再退出终端。
sudo /Library/Application\ Support/ZeroTier/One/launch.sh
Windows系统
找到C:\Users\***\AppData\Local\ZeroTier 目录下 authtoken.secret 文件,将它删除
"***"是你的用户名
写在最后:能看到这的那一定是真爱,既如此求点点赞点点关注吧!后续带给大家更多好玩、有趣、免费的教程,带您白嫖到底!
猜你喜欢
- 2025-01-05 Linux运维获取内存、cpu、磁盘IO信息
- 2025-01-05 基础到实战一飞冲天(一)--linux基础(六)
- 2025-01-05 分享跨平台免费的SSH客户端 PortX
- 2025-01-05 前方高能预警!电脑病毒再度来袭!
- 2025-01-05 推荐-运维管理服务器常用的工具
- 2025-01-05 树莓派制造木制 LED 显示器,只需几百元,从此过瘾玩游戏
- 2025-01-05 揭秘!那些让程序员爱不释手的终端神器,你用过几个?
- 2025-01-05 Dever勒索病毒实例分析一则
- 2025-01-05 群晖nas定时任务远程备份mysql
- 2025-01-05 Python基础到实战一飞冲天(一)--linux基础(五)
- 最近发表
-
- 如何在 Linux 上安装 Java_怎么在linux中安装jdk
- Linux中tar命令打包路径相关问题_linux怎么用tar打包一个目录
- 常用linux系统常用扫描命令汇总_常用linux系统常用扫描命令汇总表
- VM下linux虚拟机新建过程(有图)_linux虚拟机创建新用户命令
- 系统小技巧:迁移通过Wubi方式安装的Ubuntu系统
- 文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
- 如何利用ftrace精确跟踪特定进程调度信息
- prometheus网络监控之fping-exporter
- hyper linux的实操步骤,hyper-v批量管理工具的使用指南
- 2021年,运维工程师笔试真题(二)(附带答案)
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)