From dc4e598be983a110104957b5d67c8a2f11a97ace Mon Sep 17 00:00:00 2001 From: xubiaolin Date: Sun, 21 Nov 2021 16:53:20 +0800 Subject: [PATCH] add readme --- .idea/.gitignore | 8 -- .idea/docker-zerotier-planet.iml | 8 -- .../inspectionProfiles/profiles_settings.xml | 6 -- .idea/misc.xml | 4 - .idea/modules.xml | 8 -- .idea/vcs.xml | 6 -- Dockerfile | 67 ++++++-------- README.md | 82 +++++++++++++++++- auth.png | Bin 0 -> 23942 bytes mkworld.cpp => patch/mkworld.cpp | 0 patch.json => patch/patch.json | 4 +- patch.py => patch/patch.py | 0 run.sh | 8 +- webui.png | Bin 0 -> 20748 bytes 14 files changed, 113 insertions(+), 88 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/docker-zerotier-planet.iml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml create mode 100644 auth.png rename mkworld.cpp => patch/mkworld.cpp (100%) rename patch.json => patch/patch.json (53%) rename patch.py => patch/patch.py (100%) create mode 100644 webui.png diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/docker-zerotier-planet.iml b/.idea/docker-zerotier-planet.iml deleted file mode 100644 index d0876a7..0000000 --- a/.idea/docker-zerotier-planet.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index d1e22ec..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index afea342..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 2f9945e..9ab69da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,54 +1,39 @@ -FROM centos:7 +FROM alpine:latest -WORKDIR /var/lib/zerotier-one/ -COPY . /var/lib/zerotier-one/ -VOLUME ["/opt","/var/lib/zerotier-one"] -EXPOSE 9993 +ADD ./run.sh /app/ +ADD ./patch /opt/patch/ -RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \ - yum update -y && \ - yum install git make gcc gcc-c++ python3 wget -y && \ - yum install centos-release-scl -y &&\ - yum install devtoolset-8 -y &&\ +VOLUME ["/var/lib/zerotier-one/"] - # 编译服务 + + +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories &&\ + apk update &&\ + apk add git python3 nodejs npm make g++ linux-headers zerotier-one &&\ + npm config set registry http://registry.npm.taobao.org &&\ + + # 安装ztncui + cd /opt && git clone https://github.com.cnpmjs.org/key-networks/ztncui.git &&\ + cd ztncui/src && npm install -g node-gyp && npm install &&\ + echo 'HTTP_PORT=3443' > .env&&\ + echo 'NODE_ENV=production' >> .env &&\ + echo 'HTTP_ALL_INTERFACES=true' >> .env &&\ + + # 添加补丁 cd /opt && \ git clone https://github.com.cnpmjs.org/zerotier/ZeroTierOne.git && \ - cd ZeroTierOne && \ - make && \ - make install && \ - # 配置moon cd /var/lib/zerotier-one && \ zerotier-idtool generate identity.public identity.secret &&\ zerotier-idtool initmoon identity.public >> moon.json &&\ - #配置ztncui - cd /opt &&\ - curl -sL https://rpm.nodesource.com/setup_10.x | bash - &&\ - yum install nodejs -y &&\ - rm -rf ztncui/ &&\ - git clone https://github.com.cnpmjs.org/key-networks/ztncui.git &&\ - cd ztncui/src &&\ - npm install -g node-gyp &&\ - npm install &&\ - sh -c "echo 'HTTP_PORT=3443' > .env"&&\ - sh -c "echo 'NODE_ENV=production' >> .env"&&\ - - # 配置补丁 - cd /var/lib/zerotier-one && \ - python3 patch.py && \ - zerotier-idtool genmoon moon.json && \ - mkdir moons.d && cp ./*.moon ./moons.d &&\ - rm -rf planet &&\ - - # 编译新的plane + cp /opt/patch/* . &&\ + python3 patch.py &&\ + rm /opt/ZeroTierOne/attic/world/mkworld.cpp &&\ + cp mkworld.cpp /opt/ZeroTierOne/attic/world/ &&\ cd /opt/ZeroTierOne/attic/world/ && \ sh build.sh &&\ - mv world.bin /var/lib/zerotier-one/planet - -CMD [ "bash","run.sh" ] - - - + cp ./world.bin /var/lib/zerotier-one/planet +WORKDIR /app/ +CMD ["sh","./run.sh"] diff --git a/README.md b/README.md index 49205fd..189fcf7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,80 @@ -# docker-zerotier-planet -私有部署zerotier-planet服务 +# Docker-zerotier-planet +私有部署zeroteir-planet服务 -2021年11月21日之前更新使用教程 +zerotier是一个非常好用的私有组网的软件,但是官方提供的服务器离我们比较远,搭建卫星服务器虽然也能优化部分速度,但是远没有自己行星服务器高效. + + +# 准备条件 +- 具有公网ip的服务器 +- 安装docker + +# 开始 +## 1.下载项目源码 +``` +git clone +``` +## 2.修改项目中的patch/patch.json + +将其中的ip地址修改为你服务器的ip地址,端口保留不变即可 + + +## 3.在包含Dockerfile的目录下打包镜像 +``` +docker build -t zerotier-planet . +``` +打包预计需要2-5分钟,具体需要看网络与机型 + + +# 启动项目 +``` +docker run -d --name zerotier-planet -p 3443:3443 -p 9993:9993 -p 9993:9993/udp -v /var/lib/zerotier-one:/var/lib/zerotier-one --restart unless-stopped zerotier-planet +``` + + +# 创建网络 +服务器需要开放3443端口 +然后访问http://ip:3443 即可进入管理后台 + +![ui](webui.png) + + +使用默认账号为admin + +默认密码为 password + +进入后创建一个网络,可以得到一个网络ID + +# 客户端配置 +首先将服务器/var/lib/zerotier-one 目录下的planet文件下载到本地以备用 + +## linux 客户端配置 +安装zerotier-one客户端 +``` +curl -s https://install.zerotier.com | sudo bash +``` +进入/var/lib/zerotier-one目录下, +删除目录下的planet文件,然后把从服务器下载的planet文件替换过来 + +然后执行zerotier-cli join 网络ID + +成功后可以在管理后台上面看到一个新增的members,此时我们需要授权,否则将无法访问。 + +![auth](auth.png) + +其他客户端加入也是一样要进行授权操作操作 + +## windows 客户端配置 +windows +将planet文件覆盖粘贴到C:\ProgramData\ZeroTier\One中 + +windows搜索服务,并重启zeroiter-one + +powershell(admin)中执行zerotier-cli listpeers查看planet是否生效 + +## 安卓客户端配置 +[Zerotier 非官方安卓客户端发布:支持自建 Moon 节点 - V2EX](https://www.v2ex.com/t/768628) + +# 参考链接 +[zerotier-虚拟局域网详解](https://www.glimmer.ltd/2021/3299983056/) + +[五分钟自建 ZeroTier 的 Planet/Controller](https://v2ex.com/t/799623) \ No newline at end of file diff --git a/auth.png b/auth.png new file mode 100644 index 0000000000000000000000000000000000000000..04b6875ff450019d95de53672953cb64f5dfe252 GIT binary patch literal 23942 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 TR@3fX0026g29GKq+P(ZYr=D>i literal 0 HcmV?d00001 diff --git a/mkworld.cpp b/patch/mkworld.cpp similarity index 100% rename from mkworld.cpp rename to patch/mkworld.cpp diff --git a/patch.json b/patch/patch.json similarity index 53% rename from patch.json rename to patch/patch.json index b7baa14..dcb4c65 100644 --- a/patch.json +++ b/patch/patch.json @@ -1,5 +1,5 @@ { "stableEndpoints": [ - "1.2.3.4/9993" + "81.70.255.9/9993" ] -} \ No newline at end of file +} diff --git a/patch.py b/patch/patch.py similarity index 100% rename from patch.py rename to patch/patch.py diff --git a/run.sh b/run.sh index ea65a2e..0060a73 100644 --- a/run.sh +++ b/run.sh @@ -1,2 +1,6 @@ -#!/bin/bash -cd /opt/ztncui/src && npm start \ No newline at end of file +#!/bin/sh +echo "开始执行" +zerotier-one -d + +cd /opt/ztncui/src +npm start diff --git a/webui.png b/webui.png new file mode 100644 index 0000000000000000000000000000000000000000..97346a680d5e9f259dc9eaf2d8e745b70a923563 GIT binary patch literal 20748 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

bHBRM?bHA oRqp;ClojgQ#3`z22o)Ubz2_xuWu6>+4`>&Ir>mdKI;Vst0QMSH$^ZZW literal 0 HcmV?d00001