Loading... 参考文章:「https://v2ex.com/t/799623」先说一下我的网络环境,给大家做个参考 * 单位网络 (NAT 可控 有固定公网 服务器 24小时在线) * 家里网络 (NAT 可控 动态IP公网 路由器 24小时在线) * 手机网络(基本上就是全不可控了,而且无法24小在线) ### 先说WireGuard (暂时放弃) #### 先说一下优点 * 自组网,服务可控。不需要依赖第三方服务,对国内网络比较友善。 * 全端可用 (windows Linux ios) * 可以实现NET流量转发 * WireGuard 已并入 Linux 内核 #### 缺点(有些缺点可能只是个人能力有限的问题) * 组建复杂 * 个人问题未实现Peer分发(这也是放弃的主要原因) 分发有一个集成第三方的组件'Netmaker',分发的实现,但是客户端也要依靠Netcile实现,而且暂未做到ios端 但是有通过DNS组件实现的案例,个人能力有限并未实现。 #### 再记录一下docker下安装linuxserver/wireguard的坑点吧。 系统为`cenos 7.X`安装提示: ``` arch/x86/Makefile:96: stack-protector enabled but compiler support broken arch/x86/Makefile:166: *** CONFIG_RETPOLINE=y, but not supported by the compiler. Compiler update recommended.. Stop. make: *** [module] Error 2 arch/x86/Makefile:96: stack-protector enabled but compiler support broken arch/x86/Makefile:166: *** CONFIG_RETPOLINE=y, but not supported by the compiler. Compiler update recommended.. Stop. make: *** [module-install] Error 2 RTNETLINK answers: Operation not supported ``` 解决方案: ``` yum install epel-release elrepo-release yum install yum-plugin-elrepo yum install kmod-wireguard wireguard-tools ``` <div class="hideContent">该部分仅登录用户可见</div> ### ZeroTier配合Moon服务器(目前使用的方案) 优点: * peer分发 组建简单 * 全端可用 (windows Linux ios) * 可NET转发(但是就目前国内的网络情况基本可以忽略,但是有自建Moon方案可以折中) 缺点: * 服务依赖第三方服务不可控 (因为ZeroTie -one 本身是开源的,这个也可能没有找到合适的方案) #### ZeroTier的使用就不介绍了,百度已经很多了 #### 使用docker搭建Zerotier Moon服务器 ``` docker run --name zerotier-moon -d --restart always -p 9993:9993/udp -v ~/somewhere:/var/lib/zerotier-one seedgou/zerotier-moon -4 1.2.3.4 ``` 1. 将 1.2.3.4 替换为 moon 的 ip 2. 容器对外映射端口可自行修改:`外部ip:9993` ##### 另一条命令查看 moon id ```csharp docker logs zerotier-moon ``` #### 客户端添加Moon服务器 客户端运行: ``` zerotier-cli orbit moon id moon id ``` moon id 替换为您服务器上获取的ID 运行: ``` zerotier-cli listpeers ``` 后看到类似的peer时就说明添加成功 ``` 200 listpeers moon id IP地址/端口号 版本号等信息 MOON ``` #### 再说一下自建 Planet/Controller 也就是行星和分发服务器: 官方的 roots 都不在大陆地区,**ZT 穿越 NAT 成功率和时延、丢包率这些网络质量有关** 。现在 VPS 越来越便宜了,而且 ZT 的 controller 也不太要求大带宽,自建一个 ZT 的 controller 非常有利于 NAT 穿越,搞了一个容器化的 zerotier controller ([github.com/sbilly/docker-zerotier-controller](https://github.com/sbilly/docker-zerotier-controller)),**五分钟内就可以让自己的 controller 上线** 。 目前使用的是 [zero-ui](https://github.com/dec0dOS/zero-ui) 作为 controller 的 WEB 界面(缺省用户名 /密码是 `admin`/`zero-ui`),如下图。  ##### 自定义 planets 把 [github.com/sbilly/docker-zerotier-controller](https://github.com/sbilly/docker-zerotier-controller) 的内容复制到本地,按照你自己的需求修改 `patch/planets.json`,然后构建容器镜像。 ``` { "planets": [ { "Location": "Beijing", // planet 所在位置,其实可以是任何注释信息 "Identity": "a4de2130c2:0:ab5257bb05cd2fb8044fe26483f6d27b57124ca7b350fb3e0f07d405c68c4416094dbc836bf62ed483072501aa3384dff3c74ac50050c1bfbb1dc657001ef6a1", // planet 使用的公钥 "Endpoints": ["127.0.0.1/9993"] // 端点清单,使用 IP/port 格式,支持 IPv4/IPv6 } ] } ``` ###### 构建镜像 ```bash docker build --force-rm . -t sbilly/zerotier-controller:latest ``` ###### 运行 可以根据实际需求启动容器镜像,下面是几个例子: ```bash # Run with default settings docker run --rm -ti -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest # Run with custom envirments settings docker run --rm -ti -e ZU_SECURE_HEADERS=false -e ZU_CONTROLLER_ENDPOINT=http://127.0.0.1:9993/ -e ZU_DEFAULT_USERNAME=admin -e ZU_DEFAULT_PASSWORD=zero-ui -p 4000:4000 -p 3000:3000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest # Run with docker volumes docker run --rm -ti -v `pwd`/config/identity.public:/app/config/identity.public -v `pwd`/config/identity.secret:/app/config/identity.secret -v `pwd`/config/authtoken.secret:/app/config/authtoken.secret -p 3000:3000 -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest ``` * 缺省用户名 /密码是 `admin`/`zero-ui`,可以通过环境变量 `ZU_DEFAULT_USERNAME` 和 `ZU_DEFAULT_PASSWORD` 来设置 * 环境变量 `ZT_PRIMARY_PORT` 定义了 ZeroTierOne 的 `local.conf` 配置文件中 `primaryPort` 的设置 * 其他环境变量可以参考 [zero-ui](https://github.com/dec0dOS/zero-ui/blob/main/README.md) 的相关说明 其他的也可以看看 [github.com/sbilly/docker-zerotier-controller](https://github.com/sbilly/docker-zerotier-controller) ###### 客户端 从控制器 WEB 界面下载 `planet` 文件,并保存到节点的配置文件所在的目录,例如:`/var/lib/zerotier-one/planet`。然后启动 `zerotier-one`。 ```bash # Download planet wget http://[IP_OF_CONTROLLER]:[PORT_OF_CONTROLLER]/app/static/planet -O /var/lib/zerotier-one/planet # Start ZeroTierOne zerotier-one -d /var/lib/zerotier-one/ ``` <div class="tip inlineBlock warning"> 看到最后,可以看到客户端需要替换一个`planet` 文件所以IOS端是无法实现的。所以放弃了这个方案 </div> 再说一个人认为比较有争议的文章,我就不引用了。直接发一下链接。喜欢的去看一下吧。 [ZeroTier Planet 行星服务器,一键私有部署,可突破 50 台设备限制](https://www.appinn.com/zerotier-planet-server-docker-install/) 个人感觉这只是一个分发peer服务,并不是Planet。 因为这个listpeers多数都显示的是leaf,只有教程本人说是Planet。所以也放弃了这各方案。 但是我后来在容器作者github页面发现这么一句话:`You could use this to build your own root server and distribute planet file` 他说的这个分发不知道是自动分发还是只是辅助手动分发的。因为我的环境已经达成,目前还算稳定,所以暂时还并未测试原作者说的这个分发。希望有实测过的朋友给答复。 Last modification:December 23, 2021 © Allow specification reprint Support Appreciate the author WeChat Like 0 如果觉得我的文章对你有用,请帮忙点一下上面的广告
One comment
老大,我要看看