群晖Synology docker部署私有zerotier-planet内网穿透
说明
群晖docker安装zerotier-planet客户端镜像,启动容器链接自建zerotier-planet节点,实现远程组网穿透内网及内网转发,外网访问群晖所在内网的其他设备。
安装启动
部署自有zerotier-planet服务,请参考项目主页docker-zerotier-planet
- 下载planet,后面需要替换使用
- 下载planet,后面需要替换使用
群晖上启动过程
创建持久TUN
通过 SSH 进入你的 NAS以下设置步骤必须以 root 身份运行
编写/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
设置脚本的可执行权限
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
如果你在使用 TUN 时遇到问题,请查看Rui Marinho 的指南
在NAS安装Docker
Package Center -> Search “Docker” -> Install
设置容器
创建目录来存储 ZeroTier 的身份和配置
mkdir /var/lib/zerotier-one
警告
在下一步中,我们将绑定挂载到/var/lib/zerotier-one上面创建的主机,以存储 ZeroTier 的身份。这不能保证在 DSM 更新后仍然有效。我建议将其放在自动挂载的卷上,您的其他私人用户数据也位于该卷上。您选择存储身份的位置应保持安全,并且切勿放在其他人可以访问的共享卷上。
创建一个 Docker 容器并命名为zt(Repo: lance59/zerotier-planet )
1
2
3
4
5
6
7
8docker run -d \
--name zt \
--restart=always \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
-v /var/lib/zerotier-one:/var/lib/zerotier-one lance59/zerotier-planet:latest- 查看节点状态
1
docker exec -it zt zerotier-cli status
替换planet
1
2
3
4
5docker exec -it zt bash
cd /var/lib/zerotier-one
mv planet planet.bk
wget <上图planet文件下载的地址>
exit重启容器
1
docker restart zt
加入你的网络
1
docker exec -it zt zerotier-cli join e5cd7a9e1cae134f
“e5cd7a9e1cae134f”是zerotier-planet添加的网络ID
退出加入的网络
1
docker exec -it zt zerotier-cli leave e5cd7a9e1cae134f
在节点服务端上授权 NAS 。然后查看网络状态:
1
docker exec -it zt zerotier-cli listnetworks
- 显示正在运行的容器(可选)
1
docker ps
- 进入容器(可选)
1
docker exec -it zt bash
- 要升级 ZeroTier,您需要停止并删除容器,然后拉取最新版本并启动一个新容器:
1
docker ps
示例输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52c7cb58a1dd lance159/zerotier-planet:latest “zerotier-one” 5 weeks ago Up 9 days zt - 停止容器
1
docker stop 52c7cb58a1dd
- 取出容器
1
docker container rm 52c7cb58a1dd
- 提取最新更新
1
docker pull lance159/zerotier-planet:latest
在外网访问群晖所在内网的其他设备
设置群晖的内网转发
使用
SSH
连接到NAS并切换到ROOT
身份启用IP转发(永久修改)
1
2
3echo ‘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转发:
1
echo 1 > /proc/sys/net/ipv4/ip\_forward
设置NAT转发
方式一(推荐
1
iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE
方式二
eth0为网卡名,如果是多网口的机器,请使用ifconfig查找自己机器的网卡名
1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
添加用户自定义脚本,使得启动时自动设置NAT转发
操作路径:
控制面板
->服务
->任务计划
->新增->触发的任务->用户自定义的脚本
常规->一般设置->事件->开机
任务设置->用户自定义的脚本,输入以下代码并确定
1
2sleep 1m
iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE
为保证开机启动已加载所有网络模块,延迟1分钟再添加NAT,否则会遇到模块不存在错误
客户端设置
MacOS客户端
步骤如下:
1. 进入 `/Library/Application\ Support/ZeroTier/One/` 目录,并替换目录下的 `planet` 文件
2. 重启 ZeroTier-One:`cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill`
3. 加入网络 `zerotier-cli join` 网络 `id`
4. 管理后台同意加入请求
5. `zerotier-cli peers` 可以看到 `planet` 角色
安卓客户端配置
Linux客户端
步骤如下:
1. 安装linux客户端软件
2. 进入目录 `/var/lib/zerotier-one`
3. 替换目录下的 `planet` 文件
4. 重启 `zerotier-one` 服务(`service zerotier-one restart`)
5. 加入网络 `zerotier-cli join` 网络 `id`
6. 管理后台同意加入请求
7. `zerotier-cli peers` 可以看到 `planet` 角色
iOS 客户端配置
方案一: 越狱后安装ZeroTie,然后替换`planet`文件
方案二: 使用Wireguard接入到ZeroTier网络