我已成功在所有 HP ProCurve 7102 路由器和大多数内部 Linux 路由器上配置了 OSPF。路由已发布,一切顺利。
除了由各种 OpenVPN 服务处理的子网路由和公司周围的其他 VPN 连接之外。请考虑下面的图片,它显示了公司网络的一部分:
红色箭头表示 VPN 连接。底部的蓝色区域表示 OSPF 区域 0(主干),由所有其他办公室的路由器组成。粉色区域表示我们其中一个办公室的 OSPF 区域 177。橙色矩形是所讨论的 OpenVPN 网络,托管在带有箭头的蓝色图标所指示的 Linux 路由器上。
10.177.0.0/16 子网已正确通告给所有其他 OSPF 区域。但是,尽管网络 10.180.1.0/24 包含在 OSPF 配置中,并且接口 tun0 包含在区域 177 中(作为被动接口),但该子网并未得到通告。
这是因为这实际上是一条外部路由吗?如果是这样,我该如何告诉 OSPF 守护进程通告该路由?
答案1
首先想到的是,除了 Quagga/Zebra OSPF 中的连接路由之外,您还需要重新分配内核路由。由于 OpenVPN 会自行添加路由,因此如果您的配置中只有“重新分配静态”,Zebra 将不会重新分配这些路由。
我也在 OSPF 环境中使用 OpenVPN,并且一切都重新分配得很好。
注意:您可能需要添加一些重新分发列表过滤器,以防止重新分发不应公布的其他内核路由。
另一个选择是在 Zebra 中为 10.180.1.0/24 添加一条指向空或环回设备的静态路由。
答案2
在“摆脱内核和静态路由”狂欢之后,我发现自己遇到了类似的问题。
对我来说,解决方案是将 OpenVPN 网络放在不同的 OSPF 区域,然后使用巧妙的技巧将与服务器端点地址关联的 /32 前缀替换为 /24 子网前缀。例如
192.168.22.0/24 是我的 FreeBSD 10.3-PRERELEASE OpenVPN 服务器上的 OpenvVPN 子网。
在 openvpn.conf 中:
dev tun
server 192.168.22.0 255.255.255.0
当 OpenVPN 启动时,tun0 接口会出现以下配置:
munchkin# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet6 fe80::222:15ff:fe4b:7e10%tun0 prefixlen 64 scopeid 0x1c
inet 192.168.22.1 --> 192.168.22.2 netmask 0xffffffff
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Opened by PID 2746
在 ospfd.conf 中:
router ospf
...
network 192.168.11.0/24 area 0.0.0.0
network 192.168.22.0/24 area 0.0.0.1
area 0.0.0.1 range 192.168.22.1/32 substitute 192.168.22.0/24
然后,OSPF 通告 192.168.22.0/24,而不是 192.168.22.1/32
注意:这仅适用于跨区域边界。