接口范围(全局与链接)的用途是什么?

接口范围(全局与链接)的用途是什么?

路由表条目有一个属性scope。我想知道从global到 的更改link(或相反)如何影响网络系统。

答案1

假设我们的 NIC 设置有 3 个不同范围的 IP

14: ens160: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/24 scope host ens160
    inet 172.21.0.1/24 scope link ens160
    inet 172.20.0.1/24 scope global ens160
   

假设我们在路由表中有一些 ens160 的路由

172.20.0.0/24 dev ens160  proto kernel  scope link  src 172.20.0.1

正如我们所看到的,我们在 NIC 和路由中进行了范围设置。

如果路由指定了 src,在这种情况下,linux 会完全忽略路由和 NIC 设置中的范围设置。它完全忽略它。而linux只是在从NIC流出的数据包中使用src ip = 172.20.0.1

假设我们有另一条路线

4.4.4.4  scope link

如果路由中没有指定 src ip,那么 linux 会查看该路由的范围。在我们的例子中,范围=链接。然后linux进入NIC设置并搜索具有相同范围的IP。在我们的例子中,IP 范围 = 链接 = 172.21.0.1/24。

所以对于 dst ip = 4.4.4.4 linux 将使用 src ip = 172.21.0.1

如果路由中未指定范围,则表示范围 = 全局

例子

35.35.35.35 dev ens160

下一个。让我们看看默认路由

default via 172.16.102.1 dev ens160 onlink

它没有指定范围,这意味着范围=全局

由于默认路由没有指定 src,这意味着 linux 将在scope=global 上搜索 ens160 IP,并将其用作 src ip。

下一个。假设一条路由有一个范围,而 NIC IP 有另一个范围。例子

网卡

14: vasya2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/24 scope host vasya2

一条路线

14.14.14.14  scope link

当我们 ping 14.14.14.14 时会发生什么

路由具有范围 = link,但 NIC 仅具有范围 = host 的 IP。关键是范围 = host 的 IP 只能作为范围 = host 的路由的后端。在其他情况下,Linux 不能使用这样的 IP。因此,Linux 将使用 src ip = 0.0.0.0 作为 dst ip 14.14.14.14

(实际上,这还取决于网卡是真实物理的还是虚拟的,如果网卡是虚拟的,在这种情况下,linux将使用来自另一个
具有scope=global的网卡的其他IP)

一般规则:如果路由没有指定 src,则

  1. 具有scope=host的ip只能作为具有scope=host的路由的后端
  2. 带有scope=link的ip只能作为带有scope=host或scope=link的路由的后端
  3. 具有 scope=global 的 ip 只能作为具有任何范围的路由的后端

我对这种不舒服的建筑感到非常惊讶

如果您想忘记所有这些“范围内容” - 只需在路由表中的路由中使用 src 字段即可。

答案2

让我们看一下route scope中的定义Linux

The scope of a route in Linux is an indicator of the distance to the
destination network.

Host
    A route has host scope when it leads to a destination address on the local host.
Link
    A route has link scope when it leads to a destination address on the local network.
Universe
    A route has universe scope when it leads to addresses more than one hop away.

因此,如果您更改路由的范围,您的计算机可能无法再连接到该路由中的网络。路由器根本不转发发送到目的地属于本地网络的数据包。

请注意,范围并不反映不可路由(私有)和可路由(公共)地址之间的区别。

10.0.0.1(专用 - 不可路由)和 8.8.8.8(公共 - 可路由)都可以指定链接或 Universe(全局)范围。由系统管理员配置。

答案3

范围影响源地址选择。

对于源地址尚未固定的连接/关联(例如,启动 TCP 连接,但在对传入数据包做出反应时不启动),将根据数据包即将命中的路由范围来选择源地址。

这就是地址也具有范围属性的原因。

不发生源地址选择的示例:传入的 TCP 连接发起或 ping 数据包将以相反的 IP 地址进行应答(源 → 目的地、目的地 → 源),否则其他主机将无法将该数据包识别为应答。

发生源地址选择的示例: ping xyz或者telnet xyz。普通程序不会告诉操作系统使用哪个源地址(这是一个好习惯)。操作系统需要选择一个并准备这样做:它测试它将命中的路由的潜在传出数据包(正常路由仅使用目标地址,如果您使用高级路由,数据包将还没有源地址! )。生成的范围将选择范围减少为传出接口上相应范围中的地址(如果有可用)。

相关内容