网络接口名称带有 at 符号 - 它是什么?

tai*_*fwa 12 lxc network-interface

我试图寻找有关为什么网络接口名称会有 at 符号的信息,但到目前为止我得到的结果中有太多的噪音(我缺乏正确的搜索术语)

我在 Ubuntu 主机上有一个 LXC 容器。在容器内我运行并得到:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:37:a0:7a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.3.195/24 brd 10.0.3.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe37:a07a/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

注意 eth0@if10

@部分被称为/指的是什么?

在主机上没有这样的if10,我有另一个容器eth0@if8- 我必须假设这是 LXC/容器以某种方式处理网络翻译的一部分,但我以前没有注意到这个存在,并且想知道它是否是桥接的补充,这可能存在于其他场景中?

The*_*veO 8

eth0@if10 方法:

  • 您的网络接口名称仍然很简单eth0,网络工具和应用程序只能引用此名称,而没有@ 附录。(作为旁注,这很可能是一个 veth peer,但名称不需要反映这一点。)
  • @if10表示:eth0连接到某个(其他)网络接口,索引为 10(十进制)。由于还有一个link-netnsid 0显示,这个其他网络接口位于另一个网络命名空间(一种虚拟 IP 堆栈)中,大概是根(又名主机)网络命名空间。

如果您ip link show在主机中使用,而不是在容器中使用,则此处列出的网络接口之一应该有一个@9附录;接口名称可能以veth.... 此接口是eth0@10您询问的接口的对等体。Veth 接口成对连接,就像虚拟电缆一样。

因此,这@...是由该ip工具创建的附录,它不是 Linux 网络接口名称的一部分。@ 后面的数字指的是另一个网络接口,其索引号显示在@ 后面。索引号打印在网络接口名称之前,例如 in 9: eth0@if10。对等网络接口可以位于不同的网络命名空间中。

不幸的是,为 找到正确的网络命名空间link-netnsid ..相当复杂,请参阅如何找到 veth peer ifindex 的网络命名空间