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

科技网编2023-05-09 14:182210
③公司内两台个人的 路由器(公网出口不同)以及其下面挂载的若干设备。我没有总网络的管理员权限不能做端口映射,后续增加设备不需要任何配置就可以互相访问(家里面设备、公司设备、云服务器,下面的几种组网方案的验证与体验我花了几年的时间,直接将内网主机的一个端口映射到公网上,然后就可以使用 ssh 或者是 rdp 之类的协议去访问内网的设备。如果想用的小伙伴可以考虑申请带公网IP的家庭宽带,

0. 前言

五一假期期间重新考虑了目前的组网环境,准备对目前的组网进行一个重新的划分。

目前有的资源

① 两台 服务器,阿里云-深圳(5M上行)和腾讯云 广州(3M上行)

② 带动态公网IP的家庭宽带 (1000M下载/50M上行)

③公司内两台个人的 路由器(公网出口不同)以及其下面挂载的若干设备

(公司 下载1000M上行 100M,我没有总网络的管理员权限不能做端口映射,全锥)

我的需求:

可以打通家里的设备 以及公司的设备,且尽量的免部署。公司那边配备了两台 电犀牛 的 R68S ,希望能做到将 服务部署到路由器内部,后续增加设备不需要任何配置就可以互相访问(家里面设备、公司设备、云服务器 , 服务器的 )。

上面的需求比较奇怪,除了打通 几个物理网络以外还需要打通一个(或多个)虚拟的 内网

1. 之前踩过的坑

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

1.1 frp 做内网穿透

这种方案最简单,直接将内网主机的一个端口映射到公网上,然后就可以使用 ssh 或者是 rdp 之类的协议去访问内网的设备,缺点也是很明显

① 非常的不安全。

② 需要有公网服务器。

针对 第一点 不安全,之前的 frp 方案的时候,基本是日均上万次的登录请求。

针对第二点 我这边有自己的服务器,但是带宽太低,固定只有5M的上行,传文件之类的直接不用想。

如果想用的小伙伴可以考虑申请带公网IP的家庭宽带,然后配合 DDNS的服务去使用,但是切记注意安全。

1.2 官方服务器组网

这个大约是在2019年到2021 年阶段的时候用的,那时候还没家庭宽带,也没有公网IP,不得已使用的的免费的服务。只能说是相当的慢!!! 基础延迟大约是 300 ms ,毕竟是没有国内的服务器,物理距离太远了

这部分我就不去详细赘述了,自己去翻官方手册吧

下载地址:

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

linux版本一键下载

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

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

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

① 服务器带宽低

1.4 中心化组网

是未来的大势所趋,然后 原生只提供非常基础的功能,要想玩的号 还是需要借助一些大佬封装好的工具的。

我这边安装是使用的 版本的wg-easy ,可以在 web界面完成对 虚拟内网的配置,但是我没有搞定跨网段的方案,也就是说我搭建的 是一个中心化的 ,无法分别部署在三个路由器上 然后让三个路由器下的设备互相之间链接。

这里搭建的时候是在 家里面的路由器里面使用 容器搭建的,路由是 N6005 + PVE + ,wg-easy 搭建起来还是比较简单的。

使用体验也还是不错

1.5 组网

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

1.6 的方案

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

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

最新的方案是 使用的 自建 方案。

相比较于其他的方案最大的优势就是可以配置网关(其他的可能也有,但是应该都不简单吧)配置网关之后 客户端就可以进行网络转发了。

目前的网络拓扑 如下:

在这里插入图片描述

上面的图里面画的不太好, 因为 自建的- 是可以打洞的! 所以数据流向应该是可以更复杂一些!

上面的设备中 我需要实际部署的节点 其实只有五个 一个是 外加四个 node 节点(leaf)

3. 部署流程记录

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

方法一 :

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

方法二

的(貌似会有 打洞失败的问题 可能是因为的数据过了一层网桥, 拿不到对端的真实IP ?)

不推荐使用 做 ,虽然方便,但是没法使用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

③ 替换其他客户端的 文件

将标准版本的客户段的 换为自建产生的 文件

## 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#

在这里插入图片描述

更换完后 不启用 ,然后在增加 自建的 节点 然后点击启用就可以链接自建的节点了

在这里插入图片描述

4. 细节提示 4.1 拓展 内网

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

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

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

评论区