efo*_*x29 3 ping network-interface
我已经浏览了本网站上有关多接口 ping 的一些示例,但似乎没有一种方法对我有用。
我有两个接口
eth0 从 dhcp 服务器获取其 IP。
wlan0 有静态 IP。
当我运行命令时
ping -I eth0 www.google.com
Run Code Online (Sandbox Code Playgroud)
我得到的结果似乎来自 eth0(ipv6 的东西)。
当我运行命令时
ping -I wlan0 www.google.com
Run Code Online (Sandbox Code Playgroud)
我得到以下输出。
connect: Network is unreachable
Run Code Online (Sandbox Code Playgroud)
如果我拔掉 eth0,然后再次运行命令,就会得到想要的结果。
如何通过选择接口 ping 外部服务器?这几乎就像一个占主导地位,如果一个存在,另一个被忽略。
问题是路由是如何工作的。
如果您有多个接口,每个接口都可以配置一个网关。我不确定您的特定系统上的路由表是如何真正填满的,但我怀疑您的系统优先考虑出现的第一个默认路由,然后是第二个出现的默认路由,依此类推。只有最佳默认路由处于活动状态。如果你放下相应的接口,它的默认路由也会消失,所以如果还有其他默认路由,它就会接管。该优先级称为“度量”。
当您 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
Run Code Online (Sandbox Code Playgroud)
前两个是带有 resp 的默认路由。网关,第三个和第四个是哪个表用于哪个地址。当然,您最好将具体的真实值放入占位符中。DHCP?以太忘记多宿主,或者编写一个脚本,在接收地址时动态设置所有内容,并在地址丢失时删除(通常路由将自动删除,规则应始终手动删除)。开机自动配置?您的分发手册可以引导您进入正确的方式,准备中断网络并知道如何将其恢复到干净的状态。