假设网络布局如下:
R1: R2:
10.1.1.0/24 <--- 10.1.1.1, 192.168.1.1 <----------> 192.168.1.2, 10.1.2.1 ---> 10.1.2.0/24
BIRD 安装在 R1 和 R2 上。所有关于网络拓扑的信息都会自动给出。据我了解,BIRD 会自动重新分配这些信息,以便所有站点都可以连接。但这似乎并不那么简单:R1 和 R2 都会自动为各自的子网创建“动态”路由,但不会自动处理。
这设备协议不导入/导出路由。文档中提到直接的协议:
[...] 虽然有些用例使用直接协议(比如滥用 eBGP 作为 IGP 路由协议),但大多数情况下不需要在 BIRD 路由表中拥有这些设备路由并使用直接协议。[...]
我以为核心协议会自动导入这些路由,因为它们是内核路由表的一部分。但文档指出:
不幸的是,有一件事使路由表同步变得有点复杂。在内核路由表中,还有直接连接网络的设备路由。这些路由通常由操作系统本身管理(作为 IP 地址配置的一部分),我们不想触及这一点。在扫描内核表期间,它们被完全忽略,并且从 BIRD 表到内核路由表的设备路由导出受到限制,以防止意外干扰。
因此,没有人(没有协议)愿意负责分配使两个网络连接的路由。剩下的就是静止的但是我需要在 bird 配置文件中重新创建路由器的整个连接,我以为 OSPF over BIRD 可以帮我完成这件事。这是我应该做的吗?
R1 和 R2 的配置文件应该是什么样的?
router id 192.168.1.1;
protocol device {
scan time 10;
}
protocol direct {
interface "*"; # should I use this?
}
protocol kernel {
learn;
export all;
import all;
device routes true; # OR SHALL I USE THIS?
}
# I would like to avoid doing this:
#protocol static {
# export all;
# route 10.1.1.0/24 via 192.168.1.1;
#}
protocol ospf {
import all;
export all;
area 0 {
interface "eth0", "eth1" {
cost 10; hello 10; transmit 2; wait 5; dead 40;
type broadcast;
authentication cryptographic;
password "1234567890";
};
};
}
和:
router id 192.168.1.2;
protocol device {
scan time 10;
}
protocol direct {
interface "*"; # should I use this?
}
protocol kernel {
learn;
export all;
import all;
device routes true; # OR SHALL I USE THIS?
}
# I would like to avoid doing this:
#protocol static {
# export all;
# route 10.1.2.0/24 via 192.168.1.2;
#}
protocol ospf {
import all;
export all;
area 0 {
interface "eth0", "eth1" {
cost 10; hello 10; transmit 2; wait 5; dead 40;
type broadcast;
authentication cryptographic;
password "1234567890";
};
};
}