SDWAN 组网小记 —— 使用 EasyTier 组建一张网
在之前的博客中,我记录了我通过 GREv6 的方式将北京和老家的局域网组在了一起。在今年的规划中,我期望组建一张更大的网,将自己不同环境下的服务器和节点有序的组织起来。
在朋友的推荐下,我选择了 EasyTier 作为 SDWAN 方案,进行组网配置。
EasyTier 是一款一个简单、安全、去中心化的内网穿透 SDWAN 组网方案,使用 Rust 语言和 Tokio 框架实现。它安全可靠,无中心节点依赖,全链路零拷贝,性能开销小,支持穿透、智能路由,支持多种平台(x86,arm 等等),最重要的一点,它对 IPv6 的支持非常好。
现网环境介绍和需求
目前需要的是平替掉之前通过 GRE 方式实现的京冀的网络互联。北京和河北均支持移动运营商接入,所以还是打算两边走移动对接,这样可能会受到结算新政策的影响小一点。
北京河北的主路由器均是 Mikrotik 的 RouteOS,为了尽量减小对现网的调整,本次接入采用旁路方式进行接入,两方均旁挂在各自区域的主路由器下。河北区域采用虚拟机部署 EasyTier,北京则采用 RK3399 盒子进行接入。各自区域的 EasyTier 节点,我人为将其定义为 Edge 节点。为了提高网络的可靠性,引入两台华北区域的云服务器作为 Core 节点,在必要情况下,参与网络的流量转发。(注意:关于 Edge 和 Core 的说法是人为定义的,对于 EasyTier 来说,整个网络是平等的,并没有中心节点依赖。)
旁路模式
上图为网络拓扑,这是我目前在用的一种网络模式。相当于 Edge 节点做单臂路由。需求是我可以通过地域 B 的 PC 访问地域 A 的 WEBSERVER。
假定 EasyTier-Core 的 IP 为 100.100.100.100
本 EasyTier 的地址段为 10.123.1.0/24
地域 A 的网络为 192.168.100.0/24
地域 B 的网络为 192.168.200.0/24
地域 A 的 EasyTier 的 IP 为 192.168.100.2,tun 网卡 IP 为 10.123.1.10
地域 B 的 EasyTier 的 IP 为 192.168.200.2,tun 网卡 IP 为 10.123.1.11
配置代理子网 proxy_cidr
这个根据对应地域要宣告的 IP 地址段进行配置即可开启内核转发流量功能
需要在 EasyTier 的 Edge 节点上配置 IP 转发1
sysctl -w net.ipv4.ip_forward=1
配置路由器的路由下一跳为 EasyTier 节点
其实就是在路由器上加一条静态路由。我以 ROS 为例,比如地域 A 访问地域 B,则1
ip route/add dst-address=192.168.200.0/24 gateway=192.168.100.2
那么地域 B 的路由器上也需要写一条路由:
1
ip route/add dst-address=192.168.100.0/24 gateway=192.168.200.2
路由模式
假定 EasyTier-Core 的 IP 为 100.100.100.100
本 EasyTier 的地址段为 10.123.1.0/24
地域 A 的网络为 192.168.100.0/24
地域 B 的网络为 192.168.200.0/24
地域 A 的 EasyTier 的 IP 为 192.168.100.2,tun 网卡 IP 为 10.123.1.10
地域 B 的 EasyTier 的 IP 为 192.168.200.2,tun 网卡 IP 为 10.123.1.11
在路由模式下,需要走 EasyTier 网络的设备被挂在 EasyTier 节点的下面。如上图拓扑。
这里我只说明地域 A 中 EasyTier Edge 的配置。
- 开启内核流量转发功能
1 | sysctl -w net.ipv4.ip_forward=1 |
- 判断流量进入网关的网口,这里假设是 ethX, 并假设 EasyTier 使用的网口名是 tun0
1 | iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE |
- EasyTier 下挂设备的网关指向 EasyTier
测试
此时两地域互相 ping 互通即可。