警告:
本人只是一名高三学生,在此之前对于BGP等技术一无所知,因此,本文可能包含但不限于 笔误/错误/小白理解 请大佬勿喷,如果能指正出来那就更好啦

再次警告:
如果您能接受的话,可以继续看下去,如果不能接受,建议现在就关闭此文章


前言

上篇文章中,我们学习了如何与他人进行Peer,通常情况下,我们不只有一台服务器想要接入DN42,但是由于某些原因,没有直接与他人Peer.这时,我们就可以与已经Peer的服务器组成内部网络,从而接入DN42网络.
而这个内部网络就叫做iBGP

什么是iBGP?

iBGP(Internal Border Gateway Protocol,内部边界网关协议)是 BGP 协议的一种应用形式,用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换 BGP 路由信息。

为什么需要 iBGP?

虽然 AS 内部通常运行 OSPF 或 EIGRP 这样的内部网关协议 (IGP),但它们主要负责发现 AS 内部的网络拓扑。BGP 专门处理互联网上的大规模路由信息。iBGP 的存在是为了:

  • 统一路由视图: 确保 AS 内部的所有路由器都对外部网络的路由信息有统一的认识。这样,无论数据包从 AS 内部哪个地方发出,都能被正确地转发到通往外部网络的最佳出口。
  • 避免路由环路: iBGP 有一些特殊的规则(例如“从一个 iBGP Peer 学到的路由不能再通告给另一个 iBGP Peer”的水平分割规则),以防止 AS 内部出现路由环路。为了克服这些规则带来的限制,通常会使用 路由反射器 (Route Reflector) 或 BGP 联盟 (Confederation) 来简化 iBGP 的部署。
  • 支持路由策略: BGP 具有丰富的路由属性,允许网络管理员对路由进行精细的控制。iBGP 可以在 AS 内部传播这些属性,使得 AS 内部的路由器可以根据这些属性来选择最佳的出口路径,实现流量工程和策略路由。

开始组建内网!

与服务器Peer

个人建议用wg等隧道软件在每两个节点之间建立一条点对点隧道,即每个节点都能直接连接到其余所有节点,配IBGP。OSPF/Babel没配懂,所以不做说明。

IBGP

如果你已经在多台服务器上使用WireGuard搭建了点对点隧道,那么你的服务器已经互联了,但是你并没有宣告外部这个服务器能互联到你 AS 内的其他服务器,所以你需要创建 IBGP 来宣告

由于本人是小白,本文只讲述最简单的服务器两两之间建立 BGP 连接的方式,如果您需要更高级 / 更方便的方式,可以查阅这里

假设你已经Copy了官方Wiki的Bird2配置,那么,为了配置iBGP,你需要在 /etc/bird/bird.conf插入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template bgp IBGP {
local as OWNAS;
direct;
ipv4 {
next hop self;
import all;
export all;
};

ipv6 {
next hop self;
import all;
export all;
};
}
protocol bgp ibgp_node1 from IBGP {
neighbor 你的另一台服务器的ip as OWNAS;
};
protocol bgp ibgp_node2 from IBGP {
neighbor 你的再另一台服务器的ip as OWNAS;
};
#以此类推

import all; export all; 只是本文为了简单所使用的一种方法,建议学习《BIRD 与 BGP 的新手开场》 后自己写 filter 更保险

然后您需要将此配置文件添加到每个服务器上

然后输入 birdc c,重载配置,等待几分钟应该就可以在外部 ping 到你内部了(如果你已经有服务器和别人 peer 的话)
1000052342.webp

参考文献

感谢以下文章对本小白踏入 DN42 提供了巨大的帮助!
DN42 实验网络介绍(2020 版)
BIRD 与 BGP 的新手开场
Multiple servers on dn42: iBGP and IGPs
萌新入坑 DN42 之 —— 多服务器互联