我有两个网络。
一个是运行 IP 的标准以太网网络。第二个网络是 Infiniband,除了一些自定义协议外,它还可以使用 IPoIB(Infiniband 上的 IP)。
位于该网络上的路由器可以 ping 通具有 10.10.10.x IP 地址的 Infiniband 主机,也可以 ping 通本地 xx.xxx.79.x 地址。
我遇到的问题是,尽管路由器已打开 IPv4 转发,但以太网上的机器无法 ping 或访问 infiniband 网络上的机器。
您能转发往返于 IP 和 IPoIB Infiniband 网络的数据包吗?
根据要求,这是我的路由表。
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 xx.xxx.66.61 0.0.0.0 UG 100 0 0 eth2
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 ib0
xx.xxx.66.60 0.0.0.0 255.255.255.252 U 0 0 0 eth2
xx.xxx.79.128 0.0.0.0 255.255.255.128 U 0 0 0 bond0
255.255.255.255 0.0.0.0 255.255.255.255 UH 0 0 0 bond0
eth2 是公共互联网,bond0 是私有 LAN,ib0 是 Infiniband 网络。此机器是两个网络的默认路由器。
注意:此链接似乎表明这是可能的。 http://www.spinics.net/lists/linux-rdma/msg06784.html 虽然我随后在一台装有旧 DDR 硬件的测试机上进行了设置,但仍然发现它无法路由。您也无法桥接 ib0 设备
更新并回答。
我遇到的问题实际上与路由有关。所以是的,它确实有效。在我的特定设置中,一些主机在同一网络上有 infiniband 和以太网卡。因此,回复通过不同的路由传回客户端 ping。在 Linux 中,答案是设置反向路径过滤。
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
然后它就起作用了。
答案1
您的路线配置正确。
检查 finiband 网络上的主机是否使用此路由器作为其默认网关,或者其默认网关是否具有通过此路由器配置的以太网 LAN 前缀的路由。
还要检查路由器上是否运行了任何会阻止连接的防火墙规则,并且您没有尝试执行 NAT(在这种情况下,您不需要这样做;RFC1918 IP 的限制是您不能将它们公布到公共互联网,而不是您不能在内部与可路由 IP 一起使用它们)。在这种情况下,如果您希望 infiniband IP 具有互联网访问权限,则应在边界网关处对它们进行 NAT。
看起来这个路由器实际上可能是您的边界网关。如果是这种情况,并且您正在使用 NAT 为 RFC1918 子网提供互联网访问,则应-j RETURN
在 NAT 预路由和后路由默认链的开头添加规则,其中源是 RFC1918 地址,目标是您的其他子网之一,以防止在这种情况下发生 NAT。或者,仅SNAT
那些具有 eth2 输出接口和 RFC1918 源地址的数据包。
您可能还想检查接口上的 MTU 设置,但这不应该给默认 ping 大小带来问题。MTU 应设置为接口可以在第 2 层介质上转发而不会出现数据包丢失的最大数据包大小。如果它太低,也可能会导致连接问题。以太网的典型设置为 1500 字节。
除此之外,由于分层模型的存在,您当然可以在 IP 网络之间转发数据包,而不管第 2 层介质是什么。大多数互联网实际上都是以这种方式工作的(想想电缆调制解调器,它们是第 2 层 DOCSIS 到以太网的桥接器,还可以想想所有具有 MPLS 和以太网接口的模块化思科路由器,以及数十亿种其他类型的设备)。
为此你不需要一座桥。
另外,请考虑不要使用route
net-tools,因为它已经过时了,并且缺少许多功能(例如,正确识别用于全局广播的黑洞路由)。相反,请使用ip route
iproute2。