嵌入式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
有问题 欢迎留言 我们一起交流