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

Noo*_*oob 7 networking linux unix centos solaris

如果您有 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 ,但为什么/如何选择?

Mar*_*iae 10

在 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 
Run Code Online (Sandbox Code Playgroud)

关键行是以 开头的那一行default,它表示(我的)网关是192.168.73.1。你改变它如下:

     > ip route del default
     > ip route add default via 192.168.73.1 dev eth0
Run Code Online (Sandbox Code Playgroud)

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

     > 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 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,本地流量可以通过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
Run Code Online (Sandbox Code Playgroud)

如果您有多个相同类型的接口(例如多个以太网连接),则优先级将分配给最先连接的接口。

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

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

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

       > ip route show table main
       > ip route show table MyOtherRoutingTable
Run Code Online (Sandbox Code Playgroud)

您经常会发现对 netstat、route、ifconfig 等命令的引用。在 Linux(但不是在 Unix 上,请阅读下面的顶部评论)中,它们已过时。目前的命令,IP的的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
Run Code Online (Sandbox Code Playgroud)

此处网关由default关键字和G标志标识。

您将默认网关更改为:

   > route delete default
   > route add default 192.168.0.1
   > route change default -interface enp0s3
Run Code Online (Sandbox Code Playgroud)

除了policy routingUnix 内核不支持的about 之外,所有注释都保持不变。

  • 让我们小心调用 netstat/route/ifconfig 过时。您可能可以在 Linux 上使用此类语句,但绝对不能在 Unix 上使用。iproute2 受到一些 Unix 系统无法容忍的许可的阻碍,因此它永远不会被一些非 Linux 系统采用。事实上,它甚至有一个 Solaris 标签。由于该问题在 Linux 和 Unix 上都有明确的表述,因此关于传统命令已过时的陈述并不适用于该问题适用的所有平台。 (3认同)