我正在 Ubuntu 10.04 LTS 上使用 Quagga 进行一些实验,将其作为多宿主和多路由器设置中的 BGP 路由器。目前,我在实验室中设置了一个假的“ISP”路由器,并在其后面设置了两个 Quagga 路由器,与 iBGP 共享路由,我遇到了一些问题,似乎找不到答案。
我的网络设置如下这。
R1 和 R2 连接着一个链路网络 (172.26.0.0/30),并且都连接到同一个共享子网 172.26.1.0/24。链路网络和共享子网位于不同的 VLAN 上。
R1 和 R2 分别连接到一个 ISP,并将向其 ISP 对等方公布 172.26.0.0/23。它将在内部划分子网,但为了避免被过滤,将公布一个更大的子网。
路由器将拥有一个浮动 IP,它们使用 uCARP 在彼此之间共享(如果一个路由器出现故障,另一个路由器将接管)。
现在说说我的问题。如果我从 ISP1 向 ip 172.26.1.1 发出 traceroute 或 ping 操作,一切都会顺利进行,我会得到回复。如果我对 ip 172.26.1.2 执行同样的操作,我会得到请求超时。
我看到路由器上的 ICMP 回显请求有 172.26.1.2 分配给它的接口,但它好像不知道将回复发送到哪里。
我尝试过在 Google 上寻找答案,但一无所获。尝试了几种解决方案,但似乎都不起作用。
我的网络设计有什么问题吗?我知道如果我使用与共享子网和链接网相同的子网,一切都会正常工作,只是路由器后面的机器在使用 ping 时会收到 ICMP 重定向消息,我认为这不是一个好的实现。
我认为发生的情况是,发往 172.26.1.2 的流量被定向到 R1 上的 VLAN15 接口,并且当 R2(分配了 172.26.1.2)时,它不使用路由来获取发送 ICMP 回显请求的 ISP1 IP。
我可以从每个路由器访问每个网络(例如,我可以访问 ISP1 192.168.0.1 接口),但如果我在 R2 上使用 172.26.1.2 作为源,则无法访问。在 R1 上,我可以使用 172.26.1.1 作为源,没有任何问题。
路由器的 IP 规划。
ISP1
- eth0 = 192.168.0.1
- eth1 = 10.10.0.1
R1
- eth0 = 10.10.0.2
- eth1.10 = 172.26.0.1(这是用于划分局域网的VLAN接口)
- eth1.15 = 172.26.1.1(也是 VLAN 接口)
R2
- eth1.10 = 172.26.0.2(VLAN 接口)
- eth1.15 = 172.26.1.2(VLAN 接口)
我的 Quagga BGPd 配置如下:ISP1 路由器 bgp 65414 bgp 路由器 ID 192.168.0.1 网络 192.168.0.0/23 网络 10.10.0.0/24 邻居 10.10.0.2 远程 as 65515 邻居 10.10.0.2 描述 R1
R1 路由器 bgp 64515 bgp 路由器 ID 172.26.0.1 网络 172.26.0.0/23 邻居 172.26.0.2 远程 AS 65515 邻居 172.26.0.2 描述 R2 邻居 172.26.0.2 下一跳自身邻居 10.10.0.1 远程 AS 65514 邻居 10.10.0.1 描述 ISP1 邻居 10.10.0.1 前缀列表 isp1_filter_out out
ip 前缀列表 isp1_filter_out seq 5 允许 172.26.0.0/23 ip 前缀列表 isp1_filter_out seq 999 拒绝 0.0.0.0/0 ge 1
R2 路由器 bgp 65515 bgp 路由器 ID 172.26.0.2 网络 172.26.0.0/23 邻居 172.26.0.1 远程 AS 65515 邻居 172.26.0.1 描述 R2 邻居 172.26.0.1 下一跳自身
有什么想法吗?问题出在 Linux 还是 Quagga?你还需要我提供更多关于我的设置的信息吗?
答案1
只是想告知,我从 Quagga-users 邮件列表获得了一些帮助来解决这个问题,并且这个问题现在已经解决。
为了将来的参考,如果其他人遇到与我相同的问题,我认为发布解决方案是个好主意。
问题在于 Ubuntu 默认启用了 net.ipv4.conf.all.rp_filter 和 net.ipv4.conf.default.rp_filter。这阻止了数据包从一个接口进入而从另一个接口离开。
Ubuntu Bugs 报告(见下面的链接)中的建议是,安装 Quagga 时禁用 rp_filter,但这尚未实现。