嵌入式linux学习笔记--虚拟局域网组网方案分享,基于自组zerotier -planet 网络的方案

news2024/12/23 18:13:22

0. 前言

五一假期期间重新考虑了目前的组网环境,准备对目前的组网进行一个重新的划分。
目前有的资源
① 两台 服务器,阿里云-深圳(5M上行)和腾讯云 广州(3M上行)
② 带动态公网IP的家庭宽带 (1000M下载/50M上行)
③公司内两台个人的openwrt 路由器(公网出口不同)以及其下面挂载的若干设备
(公司 下载1000M上行 100M,我没有总网络的管理员权限不能做端口映射,全锥)

我的需求:
可以打通家里的设备 以及公司的设备,且尽量的免部署。公司那边配备了两台 电犀牛 的 R68S ,希望能做到将 服务部署到路由器内部,后续增加设备不需要任何配置就可以互相访问(家里面设备、公司设备、云服务器 , 服务器的docker )。
上面的需求比较奇怪,除了打通 几个物理网络以外还需要打通一个(或多个)虚拟的 docker内网

1. 之前踩过的坑

为了能随时随地联系到我家里面的机器,我这边其实是做了不少的斗争,下面的集中方案简单的一笔带过,不同方案适合不同的人群,希望能给你一个参考吧。 注意: 下面的几种组网方案的验证与体验我花了几年的时间,部分可能已经不适用了,请自行斟酌。

1.1 frp 做内网穿透

这种方案最简单,直接将内网主机的一个端口映射到公网上,然后就可以使用 ssh 或者是 rdp 之类的协议去访问内网的设备,缺点也是很明显
① 非常的不安全。
② 需要有公网服务器。
针对 第一点 不安全,之前的 frp 方案的时候,基本是日均上万次的登录请求。
针对第二点 我这边有自己的服务器,但是带宽太低,固定只有5M的上行,传文件之类的直接不用想。
如果想用的小伙伴可以考虑申请带公网IP的家庭宽带,然后配合 DDNS的服务去使用,但是切记注意安全。

1.2 zerotier 官方服务器组网

这个大约是在2019年到2021 年阶段的时候用的,那时候还没家庭宽带,也没有公网IP,不得已使用的zerotier的免费的服务。只能说是相当的慢!!! 基础延迟大约是 300 ms ,毕竟是没有国内的服务器,物理距离太远了
这部分我就不去详细赘述了,自己去翻官方手册吧
下载地址:

https://www.zerotier.com/download/

linux版本一键下载

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

1.3 zerotier 官方服务器 + 自建moon 节点

这是是后来买了深圳的阿里云服务器之后自建了一个zerotier的moon 服务器,有了moon服务器之后延迟条件大幅度的改善了,但是还是存在一些问题
① 服务器带宽低

1.4 wireguard 中心化组网

wireguard 是未来的大势所趋,然后wireguard 原生只提供非常基础的功能,要想玩的号 还是需要借助一些大佬封装好的工具的。
我这边安装是使用的 docker版本的wg-easy ,可以在 web界面完成对 虚拟内网的配置,但是我没有搞定跨网段的方案,也就是说我搭建的wireguard 是一个中心化的 ,无法分别部署在三个路由器上 然后让三个路由器下的设备互相之间链接。
这里搭建的时候是在 家里面的路由器里面使用 docker容器搭建的,路由是 N6005 + PVE + Openwrt ,wg-easy 搭建起来还是比较简单的。
使用体验也还是不错

1.5 netmaker 组网

netmake 的底层实现还是 wireguard ,但是 使用了中心组网的方法,号称是能 实现多个节点的 点对点通讯,然后实际测试下来 流量还是全部都走的 我的 中心节点,而且 netmaker 的环境国内还无法部署! 之前测试的时候临时采用了一个 新加坡的服务器进行测试的。实际体验下来 甚至还不如 wireguard 的中心组网, wg-easy 至少部署简单,而netmaker 除了界面看起来炫酷一点以外 使用体验不是很好。 应该是还需要再打磨一段时间吧,毕竟是一个很新的项目。

1.6 openvpn 的方案

openvpn方案和 wireguard的中心组网方案基本是一样的,没什么本质上的区别(可能有一点点性能差异,但是我的硬件性能都很强,看不出来。。。。) ,我验证的方案基本是和wireguard 一样 还是使用docker 然后使用带ui 界面的,使用起来没什么难度,傻瓜式的创建 设备,下载配置文件,然后在客户端导入配置文件就可以使用了

2. 新的方案的优势 自建zerotier 的planet

最新的方案是 使用zerotier的 自建planet 方案。
相比较于其他的方案zerotier最大的优势就是可以配置网关(其他的可能也有,但是应该都不简单吧)配置网关之后 客户端就可以进行网络转发了。
目前的网络拓扑 如下:
在这里插入图片描述
上面的图里面画的不太好, 因为 自建的zerotier-planet 是可以打洞的! 所以数据流向应该是可以更复杂一些!
上面的设备中 我需要实际部署的节点 其实只有五个 一个是 planet 外加四个 node 节点(leaf)

3. 部署流程记录

这部分 直接贴出参考链接,我这边是照着别人的去设置的,基本完全一致
方法一 :

https://blog.csdn.net/smzq123/article/details/128760942
https://gitee.com/opopop880/zerotier_planet/

方法二
docker 的(docker貌似会有 打洞失败的问题 可能是因为docker的数据过了一层docker网桥,planet 拿不到对端的真实IP ?)
不推荐使用docker 做 planet ,虽然方便,但是没法使用p2p 打洞那就是没有灵魂的,而且我的中心节点出口带宽只有5Mbps

https://zhuanlan.zhihu.com/p/573746661

流程大致的总结
① 照着执行指令
② 连接管理的界面(不建议照着原版去开放端口,建议使用ssh将端口代理到本地,安全第一!)可以参考

https://blog.csdn.net/qq_40944311/article/details/121396856
https://blog.csdn.net/qq_38100666/article/details/125596078

③ 替换其他客户端的 planet 文件
将标准版本的客户段的 planet 换为自建产生的planet 文件

## openwrt 
root@OpenWrtPro1:# cd /var/lib/zerotier-one/
root@OpenWrtPro1:/var/lib/zerotier-one# ls
authtoken.secret   controller.d       identity.public    identity.secret    networks.d         peers.d            planet             zerotier-one.pid   zerotier-one.port
root@OpenWrtPro1:/var/lib/zerotier-one# pwd
/var/lib/zerotier-one
root@OpenWrtPro1:/var/lib/zerotier-one#

在这里插入图片描述
更换完后 不启用 zerotier,然后在增加 自建的 节点 然后点击启用就可以链接自建的节点了
在这里插入图片描述

4. 细节提示

4.1 zerotier 拓展 docker 内网

使用zerotier 拓展docker 的内网的时候需要 需要改 防火墙的规则

gpt4 回答的流程大概是这样的:(实测有效)

# 设置NAT规则,使Docker网络可以访问ZeroTier网络。这里我们假设您的ZeroTier网络分配的IP地址为10.147.20.1/24:
sudo iptables -t nat -A POSTROUTING -s 192.168.66.0/24 -o ztie3xewtj -j MASQUERADE
sudo iptables -A FORWARD -i ztie3xewtj -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i docker0 -o ztie3xewtj -j ACCEPT
# 添加iptables规则,允许从ZeroTier网络(假设为10.147.20.0/24)到Docker网络(假设为192.168.66.0/24)的流量转发。注意,您需要根据实际情况替换# 网络地址和接口名称:
sudo iptables -A FORWARD -i ztie3xewtj -o docker0 -s 10.147.20.0/24 -d 192.168.66.0/24 -j ACCEPT
sudo iptables -A FORWARD -i docker0 -o ztie3xewtj -s 192.168.66.0/24 -d 10.147.20.0/24 -j ACCEPT
# 设置NAT规则,使Docker网络可以访问ZeroTier网络:
sudo iptables -t nat -A POSTROUTING -s 192.168.66.0/24 -o ztie3xewtj -j MASQUERADE

有问题 欢迎留言 我们一起交流

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

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

相关文章

伽马校正的前世今生

关于伽马校正的前因后果,在网上有不同版本的说法,由于年代久远的因素,导致原本很简单的事情越说越复杂。今天我们的目标就是抓住伽马的头,而不是摸一下伽马的尾巴。 一,鱼龙混杂的论调 1,CRT 显示器的物理…

系统集成项目管理工程师下午真题 计算题 及考点 汇总(更新中。。。)

文章目录 2022下半年广东卷 2022下半年广东卷 1、质量保证、质量控制。质量管理方面存在的问题,并给出正确的做法。判断下列选项的正误。 2、下表是一个软件项目在编码阶段各活动的计划和实际完成情况(工作量,单位:人天&#xf…

Linux环境下的redis

一:安装与启动 1.下载redis安装包 2.解压:tar –xvf 文件名.tar.gz 3.安装 进入redis目录(cd redis-x.x.x/)后,执行make install 命令 4.启动 进入src目录,执行redis-server 此时该界面无法再使用,需要…

Eureka 服务注册源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月2日 🍊 点…

NPOI导出word文档中插入公式总结

1. XWPFOMath类 XWPFDocument doc new XWPFDocument(); //创建新行 XWPFParagraph p doc.CreateParagraph(); //创建空的公式 XWPFOMath math p.CreateOMath();通过XWPFParagraph的扩展方法创建 方法名备注CreateAcc();创建XWPFAcc类,实现字符在文字上面的类Cr…

【前端】2.HTML基础知识

文章目录 1. 基本概念1.1 HTML是什么1.2 HTML的作用1.3. 学习导引1.4 开发工具 2. HTML 基础语法2.1 demo2.1.1 HTML 详述2.1.2 HTML标签2.1.3 HTML网页结构2.1.4HTML版本 2.2 常用元素2.3 属性2.4 文本相关语法2.5 链接相关语法2.6 头部相关语法 3. 总结3.1 HTML 基础语法总结…

什么是VLAN?为什么要划分VLAN?

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通。这样,广播报文就被限制在一个VLAN内。 一、为…

如何简单快速搭建自己的云对象存储服务(OSS)

简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务。不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了。 云…

五一创作【Android构建篇】MakeFile语法

前言 对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点&#xff0…

云原生架构的发展历史

目录 1 单机小型机时代2 垂直拆分3 集群化负载均衡架构4 服务化改造架构5 服务治理6 微服务时代7 服务网格新时期 (service mesh)7.1 背景7.2 SideCar7.3 Linkerd7.4 istio7.5 什么是服务网格7.6 什么是Service Mesh7.7 CNCF云原生组织发展和介绍7.8 国内…

C++11--线程库的认识

目录 thread 线程的构造方式 相关成员函数 join与detach 线程传参 互斥量mutex mutex Locks 原子性操作库 条件变量 thread 线程的构造方式 它是不支持拷贝构造,赋值的,但是可以支持移动构造,移动赋值。还可以直接创建无参的对象。 …

存储器(一)

目录 一、存储器的分类 1.按介质分类 1.1半导体存储器 1.2磁表面存储器 1.3光盘存储器 2.按存取方式分类 2.1随机存储器(RAM) 2.2只读存储器(ROM) 2.3串行访问存储器 3.按在计算机中的作用分类 ​编辑 二、存储器的层次结构 1.存储器的主要性能指标: 2.存储系统体系…

模式识别是什么意思

模式识别是一种通过分析数据特征、模型、算法等手段,从数据中寻找规律、发现隐藏的模式或结构的技术。通常是从某些对象、场景、过程等方面入手,对数据进行处理,以便于对这些对象、场景、过程进行分类、检测、识别、分割、分析等目的。 模式…

HJ20 密码验证合格程序

写在前面: 题目链接:牛客网 华为机试题 HJ20 密码验证合格程序 题目难度:中等 编程语言:C 一、题目描述 描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 (注:其他符号不…

死信队列

死信队列 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息…

[Pandas] 构建DataFrame数据框

DataFrame是二维数据结构,数据以行和列的形式排列 构建DataFrame最基本的定义格式如下 df pd.DataFrame(dataNone, indexNone, columnsNone) 参数说明 data: 具体数据 index: 行索引,如果没有指定,会自动生成RangeIndex(0,1,2,...,n) colu…

mongoose使用详细 -- 如何通过mongoose搭建服务器

前言 授人以鱼不如授人以渔,这篇文章详细介绍了,对于一个从来没有听说过mongoose的小菜鸟如何快速了解和上手mongoose 其他一些开源库可以借助类似的方法进行学习 提前需要准备的工具 1.官网文档 Mongoose :: Documentation 官网提供了很多例子讲解&am…

[Pandas] 查看DataFrame的常用属性

导入数据 import pandas as pddf pd.DataFrame([[L123,A,0,123],[L456,A,1,456],[L437,C,0,789],[L112,B,1,741],[L211,A,0,852],[L985,B,1,963]],columns[Material,Level,Passing,LT]) df 1.dtypes: 查看DataFrame中各列的数据类型 df.dtypes会返回每个字段的数据类型及Da…

C++练级之初级:第六篇

类和对象入门级:第六篇 1.类的引入2.类的定义2.1类的访问限定符2.2类的封装2.3类的实例化 3.如何计算类或者对象的大小4.this指针 总结 我们知道,C在C语言的基础上引入了对象的概念,那么从本篇开始进入类和对象; 1.类的引入 &…

【JavaEE】_1.多线程(1)

目录 1.操作系统 2. 进程 3. CPU分配——进程调度 3.1 操作系统对进程的管理 3.2 PCB的属性 3.2.1 基础属性 3.2.2 实现进程调度的属性 4. 内存分配——内存管理 4.1 虚拟地址空间 4.2 进程间通信 5. 线程 5.1 线程的概念 5.2 创建与使用多线程 5.2.1 方式1&a…