我们有许多机器同时连接到高速和低速网络;其他机器只连接到低速网络。我正在研究部署 OSPF,以便每个连接都可以自动选择最快的路由。但是,我不希望机器自己意外成为路由器,所以我使用了max-metric router-lsa administrative
/etc/quagga/ospfd.conf 中的选项。
不幸的是,除了为了广告目的将传出链路成本设置为 ∞ 之外,在计算主机上的路由成本时,它似乎还使用 ∞(好吧,65535)作为链路成本。结果是,它不是优先选择使用高速链路的路径,而是将它们视为等价路径。如果我删除该max-metric
设置,那么它会正确计算出首选高速链路。
注意:目前我只是在尝试使用虚拟机和虚拟网络,因此链接实际上是等效的,我正在手动指定成本。三台机器连接到一个网络,地址为 192.168.50.2-4,两台机器连接到另一个网络,地址为 192.168.51.2-3,每台机器还有一个环回地址 192.168.100.x,这就是它们相互寻址的方式。这是我在其中一台机器上的 /etc/quagga/ospfd.conf 文件:
hostname ospf
password zebra
enable password zebra
interface eth1
ip ospf area 0
ip ospf cost 1000
ip ospf hello-interval 1
ip ospf dead-interval 5
interface eth2
ip ospf area 0
ip ospf cost 100
ip ospf hello-interval 1
ip ospf dead-interval 5
interface lo
ip ospf area 0 192.168.100.1
ip ospf cost 100
router ospf
log-adjacency-changes
passive-interface lo
max-metric router-lsa administrative
auto-cost reference-bandwidth 1000
log stdout
路由表如下:
node1# show ip ospf route
============ OSPF network routing table ============
N 192.168.50.0/24 [65535] area: 0.0.0.0
directly attached to eth1
N 192.168.51.0/24 [65535] area: 0.0.0.0
directly attached to eth2
N 192.168.100.1/32 [0] area: 0.0.0.0
directly attached to lo
N 192.168.100.2/32 [65535] area: 0.0.0.0
via 192.168.50.3, eth1
via 192.168.51.3, eth2
N 192.168.100.3/32 [65535] area: 0.0.0.0
via 192.168.50.4, eth1
============ OSPF router routing table =============
如您所见,访问 192.168.100.2 需要花费 65535,并且将通过任一接口进行路由。
是否有某种方法可以让主机使用链路成本进行其自己的最短路径计算,同时仍然防止主机被用作中转路由器?
答案1
我没能让 Quagga 按照我的意愿行事(也尝试过 FRR,同样的问题),但我发现 Bird 搭配 OSPF v3 效果很好。OSPF v3 有一个内置的存根路由器功能,而不是依赖于将链路成本设置为无穷大。Quagga/FRR 不支持 RFC 5838,所以我无法尝试使用 OSPF v3。