当前位置: 首页 > article >正文

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

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.kler.cn/a/16320.html

相关文章:

  • QTcpSocket 服务端和客户端
  • 华为机试HJ41 称砝码
  • 论文 | The Capacity for Moral Self-Correction in LargeLanguage Models
  • 逐行加载 HTML 内容并实时显示效果:使用 wxPython 的实现
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • FluentUI使用
  • RabbitMQ面试题
  • Linux系统操作案例-配置Nginx的负载均衡与转发
  • 110页智慧农业解决方案(农业信息化解决方案)(ppt可编辑)
  • Spring 5 笔记 - AOP
  • 【python知识】__init__.py的来龙去脉
  • 【Mysql】基础篇:DML(data manipulation language)语句:增、删、改数据库数据总结
  • pod之debug初始化容器
  • 最优化方法Python计算:一元函数搜索算法——二分法
  • 【iOS】GCD学习
  • 【机器学习学习】第一天:入门指南
  • spring
  • QT实现固高运动控制卡示波器
  • 【SQL篇】面试篇之子查询
  • 一文解决MySQL突击面试,关键知识点总结
  • 解除Word的编辑保护【简单版】
  • 智能网联汽车城市化的进程和思考
  • next(), nextLine(),nextInt()报错分析
  • UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(一)
  • Java学习报培训班好还是自学好?
  • 微服务SpringCloud面试题27问