我创build了一个使用虚拟框的“行”拓扑 – 创build4台机器,并在每个使用内部networking之间build立一个单独的链接 – R1(eth0,10.0.1.1)< – >(eth0,10.0.2.1)R2(eth2,10.0 .2.2) – (eth0,10.0.3.1)R3(eth2,10.0.3.2) – (eth0,10.0.4.1)R4。 我已经启用了ipv4的数据包转发使用:
sudo sysctl net.ipv4.ip_forward=1
/etc/bird.conf中的R2和R3的OSPFconfiguration如下所示:
protocol ospf MyOSPF { tick 2; rfc1583compat yes; area 0.0.0.0 { stub no; interface "eth2" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; interface "eth0" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; }; }
当我input鸟类和types
ospf show topology
和
ospf show neighbors
似乎所有路由器都看到正确的拓扑结构,将相邻路由器识别为邻居,并正确计算成本。 但是,除非手动指定接口(ping -I eth2 10.0.3.1),否则无法从R2 ping R2。 R1和R2并不是这种情况,在两端使用eth0。
以下是/ etc / network / interfaces在R2上显示的内容:
allow-hotplug eth0 iface eth0 inet static address 10.0.2.1 auto eth1 #this is the bridged adapter used to ssh to the vm from the host iface eth1 inet dhcp allow-hotplug eth2 iface eth2 inet static address 10.0.2.2
我有点困惑,问题是在接口的configuration还是路由协议的configuration中。
这是输出
ip link
和
ip route
为每台机器
我想到了! 有几个原因,设置不起作用 – 首先,地址设置不正确。 应该为接口分配以下(例如)地址来使事情工作:
(eth0,10.0.1.1) – (eth0,10.0.1.2)R2(eth2,10.0.2.1) – (eth0,10.0.2.2)R3(eth2,10.0.3.1) – (eth0,10.0.1) 10.0.3.2)R4
以使每两个相邻路由器上的两个接口彼此面对在同一个广播域(/ 24子网)上。 每个接口上的networking掩码应该设置为255.255.255.0。
至于BIRD中的OSPFconfiguration,为了指定路由器应该交换什么types的信息(特别是路由器正在讨论的networking),必须将“networking”块添加到该区域。 在这种情况下,由于每端都有一个/ 24(255.255.255.0)networking,我们可以在networking语句中使用/ 16networking(255.255.0.0)在两个相邻/ 24networking(10.0.1和10.0 .2例如)。 所以最后看起来像这样:
protocol ospf MyOSPF { tick 2; rfc1583compat yes; area 0.0.0.0 { networks { 10.0.0.0/16; }; stub no; interface "eth2" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; interface "eth0" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; }; }
从鸟ospfconfiguration手册networking{设置} – 区域IP范围的定义。 这在LSA发起摘要中使用。 隐藏的networking不会传播到其他区域。
您的路由器可以通过OSPF看到对方,因为OSPF使用多播出任何接口发现邻居。 这意味着只要两台路由器在同一个多播域中,实际上并不需要工作路由表来查看邻居。
因此,看看你的屏幕 – 所有的路由器接口都在10.0.0.0/8或192.168.0.0/24。 你的路由器将会看到,并且假设它们在同一个广播域中,所以不要把数据包发送出eth0或者eth2,或者把它们发送到随机接口。
你应该使用小的直接连接子网路由器到路由器通信,而不是有这些巨大的/ 8子网,这只是让事情混乱。
有一个路由器有很多不同的重叠路由表,实际上是不同的真实networking是一种常见的情况。
对于鸟特别: http : //bird.network.cz/?get_doc&f= bird- 2.html
最后,你需要确保这只鸟了解操作系统的路由,并在操作系统上设置路由。 啊,这可能是你麻烦的来源 – 从FAQ :
BIRD不从内核导入一些路由器
首先,内核协议的学习选项必须是活动的。
其次,与OS /内核自动添加的接口地址/前缀相关的“设备”路由永远不会被导入。 你可以使用直接协议来添加它们。
第三,由于某些模糊和历史原因,BIRD 1.3.x(或更早的版本)甚至不会导入一些手动添加的设备/主机路由(即没有网关的路由)。 有两种方法可以解决这个问题。 或者将这些路由添加到具有静态协议源的内核路由表(例如'@ip route add 10.20.30.0/24 dev eth0 proto static @'),或者使用附加的补丁重新编译BIRD(请参阅页面底部)以解决此问题问题。