我正在尝试寻找信息来了解为什么网络接口名称会有一个 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
注意eth0@if10
这@
部分被称为/指的是什么?
在主机上没有这样的if10
,我拥有的另一个容器有一个eth0@if8
- 我必须假设这是 LXC/容器以某种方式处理网络转换的一部分,但我以前没有注意到这个存在,并且想知道它是否是桥接的补充,这可能存在于其他场景中?
答案1
eth0@if10
方法:
- 您的网络接口的命名仍然很简单
eth0
,网络工具和应用程序只能引用这个名称,没有@附录。 (作为旁注,这很可能是 veth 对等点,但名称不需要反映这一点。) @if10
表示:eth0
连接到索引为 10(十进制)的某个(其他)网络接口。由于还link-netnsid 0
显示了另一个网络接口位于另一个网络命名空间(一种虚拟 IP 堆栈)中,可能是根(也称为主机)网络命名空间。
如果您ip link show
在主机中使用,而不是在容器中使用,那么其中列出的网络接口之一应该有一个@9
附录;接口名称可能以veth...
.该接口是eth0@10
您询问的接口的对等接口。 Veth 接口成对相互连接,就像虚拟电缆一样。
因此,@...
是该工具创建的附录ip
,它不是 Linux 网络接口名称的一部分。 @后面的数字指的是另一个网络接口,其索引号显示在@后面。索引号打印在网络接口名称之前,例如在 中9: eth0@if10
。对等网络接口可以位于不同的网络命名空间中。
不幸的是,找到正确的网络命名空间link-netnsid ..
相当复杂,请参阅如何查找 veth 对等点的网络命名空间 ifindex。
2023 年更新:西门子现已发布边缘鲨作为 OSS,它提供了一个漂亮的图形 Web UI,呈现容器、主机等中网络接口的关系。
答案2
检查 /etc/udev/rules.d 或 /lib/udev/rules.d 下是否有类似 70-persistent-net.rules 的文件。应该有一行包含网络接口名称和 MAC 地址。更改它并重新启动应该重命名 NIC。