如何使用两个不同的接口 ping 到外部 IP?

如何使用两个不同的接口 ping 到外部 IP?

我浏览了该网站上有关多接口 ping 的一些示例,但这些方法似乎都不适合我。

我有两个接口

  • eth0(192.168.0.x)
  • 无线局域网0 (192.168.1.2)

eth0 从 dhcp 服务器获取其 IP。

wlan0 有静态 IP。

当我运行命令时

ping -I eth0 www.google.com

我得到的结果似乎来自 eth0(ipv6 的东西)。

当我运行命令时

ping -I wlan0 www.google.com

我得到以下输出。

connect: Network is unreachable

如果我拔掉 eth0,然后再次运行该命令,我会得到所需的结果。

如何通过选择接口来 ping 外部服务器?这几乎就像一个人占据主导地位,如果一个人存在,另一个人就会被忽视。

答案1

问题是路由如何工作。

如果您有多个接口,则每个接口都可以配置一个网关。我不确定您的特定系统上的路由表是如何填充的,但我怀疑您的系统对出现的第一个默认路由给予了最佳优先级,然后对第二个出现的默认路由给予了第二个最佳优先级,依此类推。仅最佳默认路由处于活动状态。如果您关闭相应的接口,其默认路由也会消失,因此如果还有其他默认路由,它将接管。该优先级称为“度量”。

当您进行 ping 操作时,您的系统会创建一个带有某个源地址的数据包。它可以自行选择某个地址(从本地网络路由的“src”属性),但您可以使用 -I 开关指定要使用的地址或本地网络路由从中获取该地址的接口。这就是这个开关的作用; in 仅设置源地址。它不选择路由,并且本身不会影响使用哪个接口。

发生了什么:您从“第一个”接口向“第一个”网关发送一个源地址为“第二个”接口的数据包。最有可能的是它被丢弃在网关上,网关不知道如何到达该源地址(当需要回复时,它应该回复谁?),或者不希望它以这种方式出现。

该怎么办?您应该根据源地址设置路由。这是高级主题。在Linux中,您设置了多个路由表,每个路由表都有不同的默认路由,并指示系统根据数据包源地址选择使用哪个路由表。这称为多归属。

在 Linux 中,您的情况的基本多宿主设置将是:

ip route add default via 192.168.0.GW0 table 1
ip route add default via 192.168.1.GW1 table 2
ip rule add from 192.168.0.x lookup 1
ip rule add from 192.168.1.2 lookup 2

前两个是带有 resp 的默认路由。网关,第三和第四是哪个表用于哪个地址。当然,您最好将具体的实际值放入占位符中。动态主机配置协议?以太忘记多宿主,或者编写一个脚本,在接收地址时动态设置所有内容,并在地址丢失时删除它(通常路由将被自动删除,规则应始终手动删除)。开机自动配置?您的发行手册可以指导您采取正确的方法,准备好中断网络并知道如何将其恢复到干净的状态。

相关内容