如何将路由器的常规路由信息添加到BIRD中?

如何将路由器的常规路由信息添加到BIRD中?

假设网络布局如下:

                         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";
    };
  };
}

相关内容