基于ZeroTier虚拟网络搭建分流策略及创建IPv6网络

news2024/12/23 20:04:27

假设无数个成员(移动设备、终端、Docker),需要劫持所有请求,并根据它们请求所访问的域名解析出IPv6或者IPv4地址来进行有效的选择性访问

说的直白一点点就是:分流策略

这里例一下需要做的工作,来看一下:

  1. 如何为所有成员设备分配IPv6的网络地址及IPv4地址?
  2. 如何有效的完成DNS解析及地址管理
  3. 如何有效的管理所有成员

1跟2在技术上看了资料也是可以用iptables来做转发,然后dnsmasq做DNS解析,最后ipset来做地址池,但是问题来了,所有的成员设备如何来有效的管理呢?如何去分配成员IPv6的网络地址呢?

所以ZeroTier one很好的解决了这个问题,它支持IPv4、IPv6的地址分配,并且有管理界面。虽然开源的功能不及官方的闭源版本,但是好在都是基于API的一个操作,后续二次开发新增一些功能以及优化的话也是很方便的

尽管它不支持DNS解析,但是可以找其他的应用比如Clash来替代。这样的话在访问一些网站的时候它会尝试IPv4根IPv6的地址进行访问,优先选择快的!

那选择了ZeroTier所以这篇文章主要还是记录分享一下如何创建IPv6的网络及相关服务搭建

安装ZeroTier控制器

  Key-networks开源的zerotier controller,提web管理UI, zntcui,功能与zerotier central官方一致。并且ztncui提供了容器化的部署方式,在实验中,通过容器部署在node上

git clone https://github.com/key-networks/ztncui-containerized
cd ztncui-containerized
sudo docker build -t ztncui .

开始运行它:

sudo docker run --rm --privileged=true -e HTTP_ALL_INTERFACES=yes --volume ztncui:/opt/key-networks/ztncui/etc/ --volume zt1:/var/lib/zerotier-one/ --name=ztcui -dp 9321:3000 --cap-add=NET_ADMIN -t ztncui

访问ztncui服务,服务器地址加9321端口:
在这里插入图片描述

创建IPv6网络

  首先需要一台服务器用来搭建网关,并且至少需要有/64的IPv6block,像Vultr就行,这边就拿Vultr做示范

ZeroTier本身是一个P2P组网的工具,很多人用它做内网穿透。因其本身支持IPv6自定义路由的功能跟巨多的可以使用的地址空间根本用不完

  1. 开始安装工具:
apt -y update
apt -y install curl sudo net-tools
apt -y install ndppd
  1. 修改内核参数,支持ipv6转发:
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.proxy_ndp = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 2" >> /etc/sysctl.conf
sysctl -p

分配IPv6公网地址

设置地址自动分配池跟IPv6地址设置
在这里插入图片描述
选择v6AssignMode
在这里插入图片描述
勾选ZT rfc4193 (/128 for each device)和Auto-assign from IP Assignment Pool
在这里插入图片描述
设置2001工网地址的分配池,以便为之后的每个加入网络的成员分配一个ipv6公网地址

将Vultr那台网关服务器下的公网/80地址块作为分配池,如下图所示:
在这里插入图片描述
配置ipv6路由,设置服务器的zt+接口获得zerotier(RFC2419)地址,作为网关地址
::0/0. fdba:d2ea:2faf:223f:2199:93ec:2cc7:eef7

在这里插入图片描述
设置zt+的fd开头地址为ipv6的网关地址
在这里插入图片描述
设置2001开头的/80地址路由,只有设置了这个路由项,zt控制器才会给成员分配地址。(同时ipv6自动范围设定,并且从ipv6的地址范围池中自动分配ipv6地址勾选)
在这里插入图片描述
设置完毕后,ipv6的路由如下图:
在这里插入图片描述

创建ZeroTier-one客户端

  如果选择使用官方版本的话,注册账号就能使用了!并不需要自己去搭开源版本的服务,它们的区别有下面两点:

  官方版本UI比开源的做得功能全一些,设置网络分配的时候比较直观
  开源的版本需要自己搭建服务,而官方的直接注册账号就可以使用

现在服务搭建好了,我这里也测试了自己的机器、Dokcker容器等等加入到网络组中,首先在需要加入网络组成员的本地下载zerotier客户端服务:

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

使用zerotier-cli的交互命令行模式添加到网络组:
  zerotier-cli join 网络组ID

为了方便的话也可以去下载应用程序,这样的话更方便,因为它有一个Join Network点击输入你要添加的网络组ID就可以:
在这里插入图片描述

添加到网络组之后,我们在服务的UI管理界面可以看到新增设备成员,选择同意勾选上,这个时候它是不会给成员分配地址的。需要我们打开全局模式

命令行模式如下:

  zerotier-cli set 网络组ID allowGlobal=true

应用程序的话直接勾选就行,如下:
在这里插入图片描述
这个时候刷新一下ZT服务的管理界面,开源版本显得比较简洁。所有的操作也是基于API,可以看到所有的设备(移动设备、Docker容器、服务器等)加入到ZT的网络组当中会自动给它分配一个内网的IPv4虚拟地址及公网的IPv6地址
在这里插入图片描述
IPv4的虚拟地址可以相互通讯,也就是上面所有的成员都可以相互之间通讯。这也是它独具特色之处,实现了虚拟局域网的组建

而IPv6的地址也就是本次要讲得重点,当Docker容器下载了ZT服务之后加入到虚拟网络组内,使用ifconfig查看Docker容器中会出现一块ZT的网卡
在这里插入图片描述
可以看到这块ZT的网卡中有inet6的地址,IPv6地址它可以让你的容器访问所有支持IPv6网络的网站

但是如果没有做DNS解析规则的话,通过域名访问还是访问不了的,需要在/etc/hosts文件中加入对应的域名解析规则

这里记录一下比较重要的点,如果在Docker容器中部署的话,要创建IPv6网络及对应的支持有以下几个坑

首先,我们在启动Docker服务之前保证容器支持IPv6地址,打开 /etc/docker/daemon.json文件进行配置:

 {
 	"ipv6": true
 }

然后进入到容器内安装ZT客户端服务

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

这里有一个问题就是容器内拉完ZT客户端并不是自启动服务,需要手动把服务起来:

zerotier-one -d

这个时候检查一下容器中IPv6状态,默认的话都是关闭的|即为1

sysctl -a | grep ipv6 | grep disable

在这里插入图片描述
如果发现是关闭状态则激活:

sysctl net.ipv6.conf.all.disable_ipv6=0

然后加入ZT网络组,并通过zerotier的命令行模式设置allowGlobal

最后查看ifconfig,发现Docker容器中的ZT网卡已成功分配IPv6的地址
在这里插入图片描述

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多维时序预测 | Matlab基于最小二乘支持向量机LSSVM多维时间序列预测,LSSVM多变量时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,

【毕业季】青春散场,我们期待下一场的开幕

青春,是一段追梦的旅程,毕业,是一次释放梦想的契机,祝愿每位毕业生在新的征程中,勇往直前,追逐梦想。 目录 青春散场,我们期待下一场的开幕 回忆过去 憧憬未来 青春散场,我们期待…

做好功能测试需要的8项基本技能【点工进来】

功能测试是测试工程师的基础功,很多人功能测试还做不好,就想去做性能测试、自动化测试。很多人对功能测试的理解就是点点点,如何自己不用心去悟,去研究,那么你的职业生涯也就停留在点点点上了。在这里,我把…

重磅新书上市,带你看看了不起的芯片!

千呼万唤始出来,我的第一本书《了不起的芯片》今天正式和大家见面啦! 任何一本书的背后都有一段不为人知的曲折故事,在此和大家分享一下我写这本书的心路历程。希望我的经历对你能有一些帮助,也希望你能喜欢我的作品。我还为大家申请了专属优…

vite3+vue3 项目打包优化三 — CDN加速、文件压缩

1. CDN在线加速 内容分发网络(Content Delivery Network,简称 CDN),是构建在数据网络上的一种分布式内容分发网,它可以让用户从最近的服务器请求资源,以提升网络请求的响应速度。 通常情况下,…

tcp套接字的应用

tcp服务端流程 tcp客户端流程 客户端代码 tcpClient.hpp #include<iostream> #include<string> #include<cstring> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in…

DG4pros高楼区地籍建模项目报告

引言 据睿铂统计&#xff0c;目前约70%倾斜摄影相机都用于测量项目&#xff0c;其中绝大部分是地籍测量相关项目。例如黑龙江某客户已使用睿铂相机累计完成约1000平方公里的地籍项目。倾斜摄影技术虽然在农村地籍测量项目中应用较好&#xff0c;但却无法解决高楼区域地籍测量的…

使用 SD-WAN 实现企业级 WAN 敏捷性、简易性和性能

VMware SD-WAN 提高了敏捷性和成本效益&#xff0c;同时确保跨 WAN 的应用性能。 当今的分支机构用户正在使用更多的广域网 (WAN) 带宽&#xff0c;因为他们需要通过 Zoom、WebEx、Microsoft 365 等工具进行在线协作&#xff0c;更多地用到 “软件即服务”(SaaS) 和云计算服务…

【python资料】pandas的条件查询

一、说明 在使用Pandas的DataFrame进行数据挖掘的时候&#xff0c;需要形形色色的条件查询&#xff0c;但是这些查询的基本语法是啥&#xff0c;查询的灵活性如何&#xff0c;本文将对他们进行详细列出&#xff0c;便于以后查阅。 二、Pandas条件查询方法 2.1 简单条件查询 1、…

「API接口的技术说明文档

API技术文档是指软件系统或应用程序的API接口的技术说明文档。它详细描述了API端点&#xff0c;资源&#xff0c;参数&#xff0c;请求和响应格式以及使用API的常见用例和最佳实践。 1.为什么需要API技术文档&#xff1f; API技术文档是API的唯一方法&#xff0c;以便开发人员…

分享18个好用的ChatGPT插件

上周ChatGPT又进化了&#xff0c;支持联网还有70几种第三方插件&#xff0c;不过还是老样子&#xff0c;只服务氪金玩家&#xff0c;免费端可能还得等等。之前只开放了俩插件&#xff0c;网络浏览器和代码解释器&#xff0c;只能说是真的不够用。 ChatGPT&#xff1a;不够&…

中间件(三)- Kafka(二)

Kafka 6. 高效读写&Zookeeper作用6.1 Kafka的高效读写6.2 Kafka中zookeeper的作用 7. 事务7.1 Producer事务7.2 Consumer事务 8. API生产者流程9. 通过python调用kafka9.1 安装插件9.2 生产者&#xff08;Producer&#xff09;与消费者&#xff08;Consumer&#xff09;9.3…

【实验】SegViT: Semantic Segmentation with Plain Vision Transformers

想要借鉴SegViT官方模型源码部署到本地自己代码文件中 1. 环境配置 官网要求安装mmcv-full1.4.4和mmsegmentation0.24.0 在这之前记得把mmcv和mmsegmentation原来版本卸载 pip uninstall mmcv pip uninstall mmcv-full pip uninstall mmsegmentation安装mmcv 其中&#xff…

你若在患难之日胆怯,你的力量便微小

如果你在做一件事情之前就过分放大它的困难&#xff0c;这就会逐渐降低自己去做它的动机和动力&#xff0c;还没开始你就已经削弱了自己的行动能力&#xff0c;在气势上就已经输了。 不要害怕困难&#xff0c;勇敢的去面对问题&#xff0c;解决问题&#xff0c;你就会在气势上更…

RK平台烧录固件的几种模式

在RK平台开发过程中&#xff0c;我们在使用烧录工具烧写固件的时候经常可以看到烧录工具会显示当前PC识别到的设备类型&#xff0c;一般有&#xff1a;MASKROM&#xff0c;LOADER&#xff0c;ADB&#xff0c;MSC等等。能烧录固件的模式有MASKROM模式和LOADER模式&#xff0c;下…

Python基础教程:第八章_Python文件操作

文件的编码 学习目标 掌握文件编码的概念和常见编码 思考&#xff1a;计算机只能识别&#xff1a;0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢&#xff1f; 答案&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内…

STM32WB55_NUCLEO开发(12)----FUS 更新

概述 在 STM32WB 微控制器中&#xff0c;FUS&#xff08;Firmware Upgrade Services&#xff09;是用于固件升级的一种服务。这项服务可以让你更新设备上的无线栈固件&#xff08;如蓝牙、Zigbee或 Thread 栈&#xff09;&#xff0c;以及无线 MCU (microcontroller unit) 的系…

day5 - 利用阈值勾勒

阈值处理在计算机视觉技术中占有十分重要的位置&#xff0c;他是很多高级算法的底层逻辑之一。本实验将练习使用图像阈值处理技术来处理不同的情况的图像&#xff0c;并获得图像轮廓。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像阈值处理技术的定义和作用 掌握各阈…

PyQt5 使用 pyinstaller打包文件(speed)

编写界面 import sys,math from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt from PyQt5.QtGui import *class RightBottomButton(QWidget) :def __init__(self):super(RightBottomButton,self).__init__()self.setWindowTitle("界面One")self.resize(400…

1.8G专网工业路由器促进4G智能电力建设,赋能配电站远程监控管理

TD-LTE已是当下成熟的4G通信技术&#xff0c;应用无线专网的场景也越来越多&#xff0c;4G技术在电力物联网中也得到了广泛应用。依托传统的人工监管方式&#xff0c;效率低、成本高、维护难&#xff0c;为促进4G智能电力建设迫切需要方便快捷的在线监控方式来及时发现电力配网…