DN42 从入坑到放弃 - Part4 动态路由
警告:
本人只是一名高三学生,在此之前对于BGP等技术一无所知,因此,本文可能包含但不限于 笔误/错误/小白理解 请大佬勿喷,如果能指正出来那就更好啦
再次警告:
如果您能接受的话,可以继续看下去,如果不能接受,建议现在就关闭此文章
前言
之前的文章中,我们注册了ASN,并与他人peer,同时组建了iBGP网络.但是传统的iBGP有一个巨大(我觉得)的局限性,那就是接入网的任意两台服务器都必须两两打通隧道,组成fullmesh网络.
随着我接入DN42的设备变得越来越多,fullmesh网络的弊端越来越明显,它需要大量的隧道(n*(n-1)/2条),而一条隧道需要2个配置文件,即使使用了python辅助生成配置文件,这仍然是一项大工程.
而且,为了避免可能的问题,我的CN服务器与Global服务需要尽可能的隔离,这样一来,fullmesh就无法组成了,为了解决这个问题,我们就需要引入动态路由.
什么是动态路由?
动态路由是一种网络技术,它让路由器能够自动地学习、更新并共享网络路径信息。与需要手动配置路由的静态路由不同,动态路由协议让路由器能够适应网络的变化,从而实现更灵活、更高效的数据传输。
如何配置动态路由?
根据网络规模和需求,选择合适的动态路由协议(如 OSPF 适用于大型网络,RIP 适用于小型网络),并编写对应的配置文件。
开始配置动态路由!
选择合适的协议
实现动态路由的协议有很多, 例如: OSPF,IS-IS,EIGRP,RIP,Babeld等.
我们应该选择哪种呢?
在DN42中,我见过最多的便是OSPF和Babel,我使用的是Babel,它的配置真的太简单了.(其实是OSPF试了三次没一次成功)
什么是Babel?
Babel 是一种先进的距离矢量路由协议,专为动态且可能不可靠的网络环境设计,例如无线网状网络。它通过快速收敛、避免路由循环以及灵活的度量值计算(如考虑无线链路质量)来确保路由的稳健性。Babel 同时支持 IPv4 和 IPv6,使其成为去中心化、自组织网络中高效、适应性强的路由解决方案。
1.修改bird.conf
首先,我们要在bird.conf中插入Babel的配置,我使用include外部文件实现,在bird.conf文件的末尾, include '/etc/bird/peer/*'
与ibgp前,插入include '/etc/bird/babel.conf'
2.编写配置文件
在我的网络中,iBGP都是以 iBGP(Global间互通) / CN_iBGP(CN服务器) / Global_IBGP(CN向Global) 开头
我的/etc/bird/babel.conf
如下,请按照自己的实际情况进行修改.
1 | protocol direct { |
tips: 服务器的DN42 IPv4和DN42 IPv6都要绑定上去
如果你的dn42-dummy interface
无误,那么便可以进行下一步了
4.修改iBGP对应WireGuard隧道的conf文件
提示:
因为我们将DN42的IP绑定到了dn42-dummy端口上,在iBGP的连接中,我们便不能使用这些ip,因此我们需要找一个不在DN42的IP范围内的IP段作为本地IP.
在Part2中,我们的配置文件是这样:
1 | [Interface] |
现在,我们需要修改一部分内容(关于DN42 IP的内容),修改后的文件长这样:
1 | [Interface] |
修改完成保存后,使用wg-quick down 接口名称 && wg-quick up 接口名称
重启隧道,你可以使用birdc show protocols all int_babel
或birdc show route protocol int_babel all
查看信息以确认是否成功配置.
5.推广到整个内网
一旦确认部署完成,你便可以在你所有节点上部署!从而实现网络的高可用性
参考文献
感谢以下文章对本小白踏入 DN42 提供了巨大的帮助!
DN42 实验网络介绍(2020 版)
BIRD 与 BGP 的新手开场
Multiple servers on dn42: iBGP and IGPs
萌新入坑 DN42 之 —— 多服务器互联