应用场景介绍:

利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。

准备工具:  1、服务端:云服务器(有公网IP)Centos 7.6

2、客户端:   工控机(或者家里电脑)(Linux) ,公司电脑Windows

搭建私有化 ZeroTier步骤:

一、云服务器上安装服务操作

1、安装编译组件

yum install wget gcc gcc-c++ git -y
yum install json-devel -y

2、安装根服务

curl -s https://install.zerotier.com/ | sudo bash

安装完成后,默认监听的端口是9993,这个端口需要对外提供服务,需要在服务器防火墙和云服务提供商的安全组设置放行。

安全组修改:新增允许访问的规则 UDP:9993 和 TCP:9993,TCP: 3443(后面的显示面板用)

3、记录安全认证信息

到安装目录/var/lib/zerotier-one/

找到并记录identity.public

authtoken.secret文件里的字符串,备用。

4、下载源码

可以在 /var/lib/zerotier-one/ 目录下直接下载源码:

git clone https://github.com/zerotier/ZeroTierOne

下载后的代码路径:/var/lib/zerotier-one/ZeroTierOne

5、修改源码

找到ZeroTierOne/attic/world/mkworld.cpp并打开,仿照mkworld.cpp原来的代码,将我们自定义的Planet服务器添加进去。

注意,需要删除或注释掉至少一个原来的Planet服务器,再增加我们自己的服务器,否则后续执行我们编译的可执行程序时程序会崩溃。

原因是代码里默认只允许4台Planet服务器,可以在World.hpp里看到如下定义#define ZT_WORLD_MAX_ROOTS 4

删除东京的就可以。 1 // ========================================================================= 2 // EDIT BELOW HERE

 3
4 std::vector<World::Root> roots;
5
6 const uint64_t id = ZT_WORLD_ID_EARTH;
7 const uint64_t ts = 1567191349589ULL; // August 30th, 2019
8
9 // 插入的代码
10 roots.push_back(World::Root());
11 roots.back().identity = Identity("填写identity.public里的字符串");
12 roots.back().stableEndpoints.push_back(InetAddress("服务器公网ip地址/通讯端口")); // 默认端口是9993,可以自行修改,但不建议

13
14 // 下面这些是官方的根服务器,可以注释或删掉,如果想保留一些官方的根服务器,只需要删除或注释掉一个就行
15 // 这里只保留了一个洛杉矶的根服务器,然后增加一个自己的
16
17 // Los Angeles
18 roots.push_back(World::Root());
19 roots.back().identity = Identity("3a46f1bf30:0:76e66fab33e28549a62ee2064d1843273c2c300ba45c3f20bef02dbad225723bb59a9bb4b13535730961aeecf5a163ace477cceb0727025b99ac14a5166a09a3");
20 roots.back().stableEndpoints.push_back(InetAddress("185.180.13.82/9993"));
21 roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c815::/9993"));
22 35 // Amsterdam
36 // roots.push_back(World::Root());
37 // roots.back().identity = Identity("992fcf1db7:0:206ed59350b31916f749a1f85dffb3a8787dcbf83b8c6e9448d4e3ea0e3369301be716c3609344a9d1533850fb4460c50af43322bcfc8e13d3301a1f1003ceb6");
38 // roots.back().stableEndpoints.push_back(InetAddress("195.181.173.159/443"));
39 // roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c024::/443"));

6、编译配置文件

cd ./ZeroTierOne/attic/world/

source ./build.sh
./mkworld
mv ./world.bin ./planet

7、替换服务端配置文件

cp -r ./planet /var/lib/zerotier-one/
cp -r ./planet /root # 备用保存好

8、重启服务端

systemctl restart zerotier-one.service

9、安装服务端面板服务

执行如下命令 把相关网络配置写入到 “/opt/key-networks/ztncui/.env”文件中

sudo yum install https://download.key-networks.com/el7/ztncui/1/ztncui-release-1-1.noarch.rpm -y
sudo yum install ztncui -y
sudo sh -c "echo 'ZT_TOKEN=authtoken.secret文件里的字符串' >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo 'NODE_ENV=production' >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo 'ZT_ADDR=127.0.0.1:9993' >> /opt/key-networks/ztncui/.env" # 面板与本地服务的通讯端口,没有自定义端口的话使用9993就行,否则需要和自定义的端口一致

sudo sh -c "echo 'HTTPS_PORT=3443' >> /opt/key-networks/ztncui/.env"
sudo systemctl restart ztncui


10、访问ztncui面板
在公司电脑浏览器访问即可,别忘了输入https!!!!!!!!!!!
https://服务器公网ip:3443 登录了,默认账号和密码是:admin/password 

登陆到ztncui,首次登陆会要求你更改密码,更改好密码以后。点击ADD-NETWORK——输入网络名提交后建立完成——

点击导航栏networks——找到刚才建立的网络——点击easy setup——点击Generate network address会自动建立一个虚拟网段,

然后Submit。其他的选项不要去动,否则会无法分配IPV4地址。

网络名旁边的括号里是网络ID,各个节点通过这个ID加入虚拟网络


 至此服务器端配置完成,

别忘了第7步里面,生成的那个  planet 文件 备用的, 以后所有的客户端都需要该配置文件进行覆盖。

二、客户端配置
1、 Windows客户端配置
1>去官网下载客户端:https://www.zerotier.com/download/ 各种版本都有,先下windows即可

 2>安装 exe

3>替换客户端的planet文件

第一步里面那个重要备用的   planet 文件覆盖粘贴到   C:\ProgramData\ZeroTier\One  中 (这个目录是个隐藏目录,需要运允许查看隐藏目录才行)

4》windows找到 服务   并重启 ZeroTier One 服务


 5》加入网络

方式1:

使用管理员身份打开PowerShell

执行如下命令,看到join ok字样就成功了


PS C:\Windows\system32> zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络)
200 join OK
PS C:\Windows\system32>
方式2:
桌面右下角有个ZeroTier 的小图标,
点击 : Join New NetWork...
输入 ZtnCuI 面板里面的 网络ID就可以

6> 登录面板授权
勾选上分配的IP地址第一列复选框,然后通过 mstsc命令就可以通过分配的虚拟网络的IP地址
访问其他内网里面的用户了
例如上图中的: 10.71.173.150
外网直接访问不太安全,建议通过反向代理方式,
使用SSH本地端口转发来将远程服务映射到本地,然后在本机访问。


2、Linux客户端配置

3、IOS, 安卓都差不多不做介绍

三、使用

zerotier的planet服务器(根服务器)-搭建教程的更多相关文章

  1. gitlab服务器搭建教程

    gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...

  2. 阿里云(ECS)Centos服务器LNMP环境搭建

    阿里云( ECS ) Centos7 服务器 LNMP 环境搭建 前言 第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是 ...

  3. 云服务器 ECS > 建站教程 > 部署 LAMP (CentOS 7.2 ,Apache版本:2.4.23, Mysql 版本:5.7.17 , Php版本:7.0.12)

    云服务器 ECS > 建站教程 > 部署 LAMP (CentOS 7.2) 部署 LAMP (CentOS 7.2) 文档提供方:上海驻云信息科技有限公司    更新时间:2017-06 ...

  4. electron教程(二): http服务器, ws服务器, 进程管理

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

  5. 全球2/3的DNS瘫痪 顶级域名根服务器故障

    1月21日下午消息,据多家DNS服务商透露,今日下午3点,全国所有通用顶级域的根出现异常,导致部分国内用户无法访问.com域名网站,对全国互联网链接造成系统性影响.   根服务器主要用来管理互联网的主 ...

  6. 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用

    搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用 分类: linux编译相关2013-01-05 21:38 17983人阅读 评论(24) 收藏 举报 先下载 ...

  7. zabbix服务器监控suse系统教程

    zabbix服务器监控suse系统教程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 花了近一个星期才学会了如何监控window和linux主机的基本信息以及报价情况(我已经把笔记 ...

  8. Linux下服务器环境的搭建和配置之一——Apache篇

    最近一个多月(2016-06-20开始至今),一直在忙海外广告平台FAQ系统的开发,既要负责服务器环境的搭建,又要写前端,还要写后台和数据库,甚至还要考虑产品需求和设计.所以是一个很大的挑战,对自身也 ...

  9. 服务器Hadoop+Hive搭建

    出于安全稳定考虑很多业务都需要服务器服务器Hadoop+Hive搭建,但经常有人问我,怎么去选择自己的配置最好,今天天气不错,我们一起来聊一下这个话题. Hadoop+Hive环境搭建 1虚拟机和系统 ...

  10. Android服务器——TomCat服务器的搭建

    Android服务器--TomCat服务器的搭建 作为一个开发人员,当然是需要自己调试一些程序的,这个时候本地的服务器就十分方便了,一般都会使用TomCat或者IIS服务器,IIS就比较简单了,其实t ...

随机推荐

  1. 【11】java之抽象类

    一.抽象类基本概念 1.1 抽象类 抽象类:是指在普通类的结构里增加抽象方法的组成部分,抽象类要使用 abstract 声明. 抽象方法:没有方法体且必须使用 abstract 关键字进行定义. 拥有 ...

  2. llinux防火墙设置远程连接

    #停止防火墙systemctl stop firewalld #查看防火墙是否运行systemctl status firewalld# 防火墙设置允许firewall-cmd --add-port= ...

  3. mysql查询最近2天数据

    SELECT * FROM jk_dzbl_zybrbljlb where jlrq >= now()-interval 2 day

  4. ubuntu22.04 git升级

    git --version  //查看版本 sudo add-apt-repository ppa:git-core/ppa   //通过PPA源方式安装软件的添加PPA源到Source list中的 ...

  5. mysql库操作msyql

    查看所有数据库 show databases; 查看当前使用的数据库 select database(); 使用数据库 use 数据库名; 创建数据库 create database 数据库名 cha ...

  6. Oracle 的merge into 语法转postgre

    Oracle的merge into 语法 MERGE INTO t1 USING (SELECT id,name FROM t2) t2 ON ( t1.id=t2.id)   //主键 WHEN M ...

  7. 解决移动H5页面的刷组造成件传值数据丢失问题

    问题描述 当前页面由2个组件组成分别命名成a,b,其中组件b(子)需要组件a(父)内接口响应的时间字段,因为组件b不能实时的接收到数据 因此组件b在接收数据的时用定时器加了一个延迟,但是在网络不好或者 ...

  8. A调用B方法,@Transactional事务问题

    总结:方法A调用方法B:1.如果只有A加@Transactional注解:则AB在同一事务中,任意异常都回滚:2.如果只有B加@Transactional注解:AB方法为同一类,事务失效任意异常都不回 ...

  9. MapReduce原理——切片代码分析

    (1)程序先找到数据存储的目录 (2)遍历目录对每个文件进行切片 (3)遍历一个文件: 获取文件大小 计算切片大小 默认情况下,切片大小等于blocksize 每次切片时都要判断剩下部分师否大于块的1 ...

  10. 地理信息技术GIS学习(3):数据表操作、图表制作、地图编辑(上海市行政区划图)

    数据表操作.图表制作内容主要来自 张明明的<ArcGis 10.1 超级学习手册>,其博客的电子数据已经找不到. 一.数据表操作 ArcMap中以属性表的形式来组织和管理要素的属性信息.每 ...