从网络的一个子网创建网络的 IP 路由

从网络的一个子网创建网络的 IP 路由

我正在查看一个 shell 脚本,该脚本创建了一个命名空间 (NSNAME) 和一个 veth 对 (veth-in-root、veth0)。在启动 veth 并为其设置 ip 地址后,会出现以下行:

ip -n "$NSNAME" route add fc00:dead:cafe::/48 via "$OUTSIDE_IP6" dev veth0

在哪里

OUTSIDE_IP6=fc00:dead:cafe:1::1
INSIDE_IP6=fc00:dead:cafe:1::2
ip addr add dev veth-in-root "${OUTSIDE_IP6}/64"
ip -n "$NS" addr add dev veth0 "${INSIDE_IP6}/64"

我不太清楚该行的用途。它是否添加了一个 IP 路由条目,其中来自命名空间内部且目标地址位于 fc00:dead:cafe::/48 网络中的 IP 数据包应发送到“外部”网关 (fc00:dead:cafe:1::1)?我们可以通过 dev veth0 到达该网关吗?

该行中有一条评论说,它是为了“使命名空间之间的通信更加容易”。我不确定我是否理解了它的意图。在哪些用例中,这样的条目会很有用或需要?

提前致谢。

答案1

它是否添加了一个 IP 路由条目,其中来自命名空间内部且目标地址在 fc00:dead:cafe::/48 网络中的 IP 数据包应发送到“外部”网关 (fc00:dead:cafe:1::1)?我们可以通过 dev veth0 到达该网关吗?

是的,除了这个“外部”网关是您自己的主机(即初始网络命名空间)。

您的配置中没有任何特定于 veth 的内容,甚至没有特定于 IPv6 的内容,因此请忽略命名空间并忽略术语“外部”和“内部”,但将其想象为两台通过以太网连接的实际计算机。

每个 veth 链路都像是一个直接的主机到主机以太网连接 - 如果它没有桥接到另一个以太网,那么它就充当自己独立的以太网子网(并获得自己的 /64),因此自然它需要一些到更大网络的路由。

当您连接两台主机时,要做的第一件事(在第二个脚本中)是为该子网中的两台“主机”分配 IP 地址。此时,主机 B 可以与主机 A 通信(位于同一子网中),但根本没有其他任何路由。因此,下一步(在第一个脚本中完成)是配置一些到某些目的地的路由 - 例如您所属的更大的网络。

在最简单的情况下,您可以添加::/0用于 Internet 访问的“默认”路由。在您的示例中,没有 Internet 访问,而是命名空间仅被授予对本地 /48 的访问权限(可能是您的整个 LAN,也可能只是同一主机上的其他命名空间)。

该行中有一条评论说,它是为了“使命名空间之间的通信更加容易”。我不确定我是否理解了它的意图。在哪些用例中,这样的条目会很有用或需要?

该评论很可能假设更多的主机上的此类命名空间,即更多 veth 对,每个 veth 对将保持其自己独立的点对点连接并分配唯一的 /64 前缀。

如果所有这些前缀都是从同一个 /48 分配的(假设下一个命名空间获得 fc00:dead:cafe:2::/64,然后下一个获得 fc00:dead:cafe:3::/64,依此类推),那么为 /48 添加路由将允许每个命名​​空间通过充当路由器(并且可能是防火墙)的主机到达其他每个命名空间。

4 个虚拟主机的图表,其中 1 个是“路由器”,与另外 3 个主机有单独的连接

如果你想象第一个命令添加了一个默认路由(即::/0)而不是 /48 路由,从而使该命名空间能够访问整个 IPv6 互联网。

相关内容