编写一个 iptables 规则,将 OSPF 数据包从一个接口转发到另一个接口

编写一个 iptables 规则,将 OSPF 数据包从一个接口转发到另一个接口

在给定的机器上,我有两个接口 eth0 和 eth1。Cisco 路由器连接到这两个接口 eth0 和 eth1,我希望到达 eth0 的 OSPF 数据包转发到 eth1,反之亦然(见下图)。

我尝试发出以下命令:

iptables -A FORWARD -i eth1 -o eth0
iptables -A FORWARD -i eth0 -o eth1

但那没有用。此外,我希望此转发规则仅适用于 OSPF 数据包,按源和目标地址过滤数据包,如果可能的话,甚至按协议过滤数据包。OSPF 数据包似乎

IP 100.1.3.2 > 224.0.0.5: OSPFv2

从一个方向,

IP 100.1.3.1 > 224.0.0.5: OSPFv2

从另一个。

{思科}--(Linux)--{思科}

答案1

[对于您的问题,我不清楚 Linux 机器是充当网桥/第 2 层设备还是第 3 层设备,因此我假设是后者。]

为广播多路访问网络(即以太网)配置的 OSPF Hello 数据包除了发送到多播 IP 地址 224.0.0.5 外,还会发送到多播第 2 层以太网 MAC 地址为 01:00:5e:00:00:05。因此,除非您的 Linux 机器配置为桥接 eth1 和 eth0,否则 OSPF Hello 数据包将无法穿过防火墙,也不会形成 OSPF 邻居邻接关系。

然后您还会遇到另一个问题,即 OSPF Hello 数据包的 TTL 为 1,因此它不能跨越第 3 层边界,否则会在传输过程中过期。

如果您确实想这样做,那么您必须探索一些其他的替代方案,例如在路由器 A 和 B 之间创建 GRE 隧道(IPSec 隧道也可以),并为该隧道上的点对点链路配置 OSPF,然后当然,允许您用于隧道的协议的流量通过防火墙(即 GRE 的 47)。

有关如何通过 GRE 隧道配置 OSPF 的良好参考,请查看:使用 OSPF 配置基于 IPsec 的 GRE 隧道(如果愿意,请忽略 IPSec 部分)

相关内容