当 Unix/Linux 操作系统中有两个网络接口连接到同一个网络时会发生什么?

当 Unix/Linux 操作系统中有两个网络接口连接到同一个网络时会发生什么?

如果您有 2 个网络接口连接到默认网关/路由器所在的同一网络,会发生什么情况?

例如

  • 网络接口 e1000g0 - 192.168.1.50
  • 网络接口 e1000g1-192.168.1.51
  • 网关 - 192.168.1.1

如果我向发送数据包8.8.8.8,将使用哪个网络接口?我使用的是 Solaris 10 机器。但假设这个问题适用于所有 unix/linux 通用实现

在我的路由表中,似乎e1000g1被选为 UG,但为什么/如何选择它?

答案1

在 Linux 和 Unix 中,每个路由表只能有一个网关。在 Linux 上,您可以有多个路由表,但每个路由表只有一个网关。

在Linux中,其标识如下:

    > ip route show
      default via 192.168.73.1 dev eth0  proto static 
      192.168.73.0/24 dev eth0  proto kernel  scope link  src 192.168.73.75  metric 1 

关键行是以 开头的行default,它指出(我的)网关是192.168.73.1。您可以按如下方式更改它:

     > ip route del default
     > ip route add default via 192.168.73.1 dev eth0

如果我连接了多个接口,我的路由表将如下所示:

     > ip route show
       default via 192.168.73.1 dev eth0  proto static 
       192.168.73.0/24 dev eth0  proto kernel  scope link  src 192.168.73.75  metric 1 
       192.168.73.0/24 dev wlan0  proto kernel  scope link  src 192.168.73.66  metric 9 

如您所见,本地流量可以通过 或eth0wlan0但是由于metric值较小(1 对 9),因此将被路由通过eth0

WAN 流量将一定eth0因为默认网关已打开,所以无法通过dev eth0

这些值由您的系统自动维护network manager,默认情况下,它倾向于使用有线连接而不是 wifi 连接。但是,您可以使用与前面类似的命令覆盖其选择,

       > ip route delete default
       > ip route add default via 192.168.73.1 dev wlan0

如果您有多个相同类型的接口(例如如果您有多个以太网连接,则优先使用最先连接的接口。

默认网关由网络本身识别:它是协商 DHCP 转换时传递给您的计算机的参数之一(其他参数是网络掩码、网络、广播地址)。您不知道这一点,因为 DHCP 过程由 为您处理。network-manager有时,您可能希望设置一个静态 IP 地址,它不会不是使用 DHCP;在这种情况下,您必须自己提供上述四个参数。即使在对您来说完全陌生的网络中,也有学习这些参数的技巧,但通常您只会在已经熟悉的 LAN 中设置静态地址。

除了 LAN 和默认网关路由之外,您还可以通过任一接口拥有特定路由。在这种情况下,路由的优先级顺序将根据以下原则确定最具体路线优先1.1.1.0/24。假设您有一条通过的路由wlan0。然后,当我们需要路由数据包时,例如,1.1.1.1,此规则(通过 wlan0)和默认规则(通过 eth0)都适用,但第一个更具体,因此这些数据包将通过wlan0。在这种情况下,当所有其他方法都失败时,默认网关将成为路由,IE当没有其他路线适用时。

在 Linux 中,您可以拥有多个路由表,这称为policy or source routing。在这种情况下,您还需要一个规则,以便内核区分何时应用您可用的多个路由表。您可以找到策略路由的简要介绍这里在这种情况下,上述命令保持相同,只是它们后面跟着您希望处理的路由表的名称,例如:

       > ip route show table main
       > ip route show table MyOtherRoutingTable

你会发现经常会提到 netstat、route、ifconfig 等命令。在 Linux 中(但不在 Unix 上,请阅读下面的顶部评论),它们是过时的. 当前命令,知识产权iproute2套件、所有这些的替代品,以及更多。通过谷歌搜索,您可以找到比较这些和以前的实用程序linux ip cheat sheet功能的网站。ip

编辑

在 Unix 上,上述命令将是:查询路由表

   >  netstat -rn -f inet
      Routing tables

      Internet:
      Destination        Gateway            Flags        Refs      Use   Netif Expire
      default            192.168.11.1       UGSc           10        0     en0
      127                127.0.0.1          UCS             0        0     lo0
      127.0.0.1          127.0.0.1          UH              2   161444     lo0
      169.254            link#4             UCS             1        0     en0
      169.254.10.9       10:c3:7b:9d:c8:78  UHLSW           0        0     en0
      192.168.11         link#4             UCS             4        0     en0
      192.168.11.1       10:6f:3f:25:c6:33  UHLWIir        11     4589     en0   1162
      192.168.11.56      88:53:2e:10:77:5f  UHLWI           0        0     en0   1187
      192.168.11.65      2:f:b5:70:5b:22    UHLWI           0        0     en0   1081
      192.168.11.67      127.0.0.1          UHS             0        0     lo0
      192.168.11.113     6:20:3e:52:16:4d   UHLWIi          2      278     en0   1188

default这里的网关由关键字和标志来识别G

您将默认网关更改为:

   > route delete default
   > route add default 192.168.0.1
   > route change default -interface enp0s3

所有注释都保持不变,除了关于的注释之外policy routing,因为 Unix 内核不支持这些注释。

答案2

在同一个操作系统实例上拥有两个活动的不同物理接口连接到同一个子网(如问题中的 e1000g0 和 e1000g1)是不可靠的,并且至少在 Solaris 中明确不受支持:

在多个接口连接到同一子网的系统中,必须先将接口配置到 IPMP 组中。否则,系统无法成为多宿主主机。

如上所述,实现此目的的一种可靠方法是启用 ipmp(IP 多路径)。您还可以禁用数据包转发并配置静态路由,如文档中所述这里适用于 Solaris 10。

或者,您也可以使用较低级别的链路聚合,在 Linux 术语中也称为接口绑定。

答案3

我认为该消息将通过默认路由条目中配置的接口发送。可能是最后一个启动的接口。

相关内容