IBGP FullMesh 实现多节点自治域

最近不少群友有把自己的其他服务器也接入自己的 AS 的需求,那这篇教程也是时候该出了。 总览 这个事情比较复杂,我们先不急着开始配,先了解一下我们需要一个什么效果。 DN11 作为一个发展了有一段时间的实验性网络,我们目前有很大一批人,他们手上都已经有了一个节点,并且在这个节点上配置了 BGP 从而联通到其他节点。那这个情景下,他们的自治域就是由那一个节点组成的单节点自治域。我们现在需要添加一个新的节点到这个自治域,我们需要解决两个问题。 这两个节点之间需要组网 需要把某一个节点获取到的 BGP 路由与其他节点做一个同步 这两件事情我们分别将通过 OSPF 和 IBGP 实现。OSPF 是 DN11 的老东西,从使用者的角度看,就一个通过获取全局拓扑计算最短路的路由协议。IBGP 是 BGP 的一种,BGP 协议分为两种 EBGP 和 IBGP, 他们分别用于将 BGP 路由发给其他 AS 和将 BGP 路由同步到自己 AS 的其他节点。 IBGP 需要配置 fullmesh,这是由他的设计决定的,IBGP 只会把自己收到的 EBGP 路由转发给自己的邻居,对于自己收到的 IBGP 路由他并不会做一个转发,这主要是为了防止产生环。这其实无所谓,节点多了我们可以用 rr 反射器甚至多级 rr,还可以玩联邦,这个日后再说。下面将以双节点为例,配置一个多节点的 AS。 入口文件 由于这次的配置文件比较长,我们会把他切分到各个文件中,所以先介绍一下入口文件bird.conf的配置 log syslog all; debug protocols all; router id 172.16.4.6; protocol device{ } protocol kernel{ ipv4 { import none; export all; }; } ipv4 table OSPF_table; ipv4 table BGP_table; include "/etc/bird/ospf.conf"; include "/etc/bird/bgp.conf"; include "/etc/bird/ibgp.conf"; protocol pipe pipe_ospf_table{ table master4; peer table OSPF_table; import filter { krt_prefsrc=172.16.4.6; accept; }; export none; } protocol pipe pipe_bgp_table { table master4; peer table BGP_table; import filter { if source != RTS_BGP then reject; krt_prefsrc=172.16.4.6; accept; }; export none; } 我们很容易会发现,入口文件这里使用了三个include关键字,我们在这个入口文件里分别引用了三个文件,后续我们的 OSPF IBGP 和 EBGP 的实际逻辑都会在里面去实现。 ...

September 23, 2023 · BaiMeow

校园网打洞纪实,绕个普普通通的防火墙

WireGuard 在 i-HDU 之死 突然集体下线了 前几天接到悲报,说是 Vidar-Team 300b 节点从 DN11 下线了 校园网需要走web认证登陆,所以起初我以为是校园网的登陆脚本炸了,找个人把自己账号登上去救一下急就好了 后来派煎包去看看,他回来告诉我,Vidar 的 WiFi 有网,网很好校园网也登着 这就很让人迷惑了,按理说有网的情况下,万万不该这么多隧道一起炸了 由于是暑假,Vidar 没有网管在学校里,连不进去无能为力,这件事就这么搁置了好几天 SSTP 你怎么活着? 自爆炸后,一转眼就过了好几天,因为前两天刚刚冲了一手新版本 RouterOS,搞得我以为这个是 RouterOS 的 bug 直到… Liki 发现他的 sstp 依旧稳如老狗,我赶紧找了台 frp 穿透出来的机器测了一下校园网的 WireGuard 情况 这个案子破了,WireGuard 被校园网拦截了。 缝缝补补 原来只是封杀了一个协议而已,不算什么大事情,得赶紧去修网了 于是在校园网里扫了一下 ip,把路由器的 WAN IP 先扫出来,然后借着上面提到的这台 frp 穿透出来的校园网机器作为跳板,起了新的 frp 内网穿透 现在总算能连上路由器了,果然 WireGuard 全部掉线了,SSTP 还健在。 赶紧找了 potat0 把他最爱的 WireGuard in VLess 先部署了上去,临时恢复了网络。 转生成为 WireGuard-mix WireGuard 是寄了,但是我确实很喜欢 WireGuard,不然我也不会 ALL IN 救一下 WireGuard 吧,还是很简单的啦 gogogo WireGuard 有一个用户态版本,叫做 WireGuard-go,是 go 实现的 ...

September 16, 2023 · BaiMeow

使用 Bird2 配置 WireGuard + OSPF 实现网络的高可用

DN11 是受 DN42 启发而搭建的一个实验性网络,目前用于杭电范围内,对网络感兴趣的同学学习使用,DN11和DN42非常相似,他们之间的经验都有广泛借鉴意义。 背景 建 dn11 的时候遇到了一些小问题,在 fullmesh 的网络拓扑的情况下偶尔会出现几个节点连不上的情况,连不上了就直接连不上了,没有后话了。 实际上是可以通过绕路的方式联通的,这就要引入一些路由协议了,最早的构想是引入 BGP 协议的但是考虑了一下觉得这些东西的体量还是太大了,最后决定引入 ospf 协议,并且采取单一 area 的方式。 本文章将使用 bird2 配置 ospf over WireGuard,目的是给 dn11 成员提供一个 嘴对嘴的 ospf over WireGuard 配置教程。对于其他人可以忽略 dn11 规范部分来参考本教程进行配置。 OSPF 配置 先配置OSPF 这里我们选择 bird2 提供 ospf 支持,先配置 bird2 opkg install bird2 opkg install bird2c 在 openwrt 上,bird2 的配置文件默认地址在/etc/bird.conf bird2 的默认配置文件很长,算是一个 all config 先给他放到一边去 mv /etc/bird.conf /etc/bird.conf.bak 然后我们新建一个自己的 bird.conf vim /etc/bird.conf 给各位准备了配置文件模板,粘贴进去再改改就好了 log syslog all; debug protocols all; router id 172.16.255.4; protocol device{ } protocol kernel{ ipv4 { export where proto = "wg"; }; } protocol ospf v2 wg { ipv4 { export all; import where net !~ 172.16.4.0/24; }; area 0.0.0.0 { interface "wg*" { cost 5; }; }; area 0.0.0.4 { interface "br-lan"; }; } 每个路由设备的route id都是唯一的,route id本质上是一个 int32, 只是为了方便识别被.分割成了四段,需要提前约定。为了方便记忆和配置,这里随便取了一个网段将这个网段下的 ip 对应的 int 作为route id,dn11 对于route id有规范,起始 id 为 172.16.255.1,请按顺序往下申请 import where net !~ 172.16.4.0/24;这一行指定的网段的路由不会从 ospf 中学习,一般需要把这里配置成你的lan的网段,因为lan的路由早已由系统定义,不需要也不能由ospf来指定 export all;这一行指定了由 ospf 导出给其他路由学习的网段,如果你由 ospf 管理的接口中有不愿意导出的网段可以修改这里,这里导出全部 后面紧跟着两个 area,每个 area 也有自己的 id,这两个 id 和 route id 一样仅仅是一个 int32 并不代表任何网络含义,仅仅是个名字,0.0.0.0是骨干 area ,在这里必须统一使用area 0.0.0.0 在下一行我们用interface "wg*"指定了一些接口, 这里的*是通配符,这种写法指定了所有名字以 wg 开头的接口在这个area内,后续建立 wg 接口的时候要遵循这里的配置,如果你想使用其他名称也可以修改这里的配置 在下一行,指定了一个cost,事实上即使不配置costospf 也会自动地指定一个cost,cost默认的值为 $\frac{100Mbps}{连接速度}$ area 0.0.0.4用于你的 lan,这里其实是可以省略的,只要你将你得 lan 接口加入area 0.0.0.0就行了,但是 dn11 目前定义每个人的 lan 都单独占用一个 area, 因此,需要一个唯一的 area 用于 lan, 请在文档中申请 下一行的 interface 里指定了 lan 接口,对于 openwrt 旁路由,这里一般就是 br-lan,主路由一般就是 lan 编辑完配置文件后,就可以启动bird2了 ...

March 5, 2023 · BaiMeow