Bru*_*man 9 linux networking ubuntu container interface
at 符号 (@) 在 Ubuntu 上的“ip address”命令(或“ip link”命令)输出中的接口名称中是什么意思,例如以下输出中的接口名称“eth0@if44”:
root@aafa1fc24a0b:/# ip address
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
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
link/tunnel6 :: brd ::
43: eth0@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
其他相关信息:
设置创建如下:
docker network create my-bridge
docker run --name my-container-1 --network my-bridge --detach --tty ubuntu:16.04 sleep infinity
docker run --name my-container-2 --network my-bridge --detach --tty ubuntu:16.04 sleep infinity
Run Code Online (Sandbox Code Playgroud)
A.B*_*A.B 13
这表示链路的对等接口索引。尽管此属性似乎可用于任何接口,但它仅对少数接口类型有意义:veth、macvlan、vlan(子接口)……因为它们与其他接口有关。
任何给定的接口都有一个可以读取的索引,例如:
/sys/class/net/<interface>/ifindex
Run Code Online (Sandbox Code Playgroud)
可以在那里读取其对等链接接口:
/sys/class/net/<interface>/iflink
Run Code Online (Sandbox Code Playgroud)
显然,如果它没有意义,参数仍然存在,但与ifindex相同。对于通常的普通或简单接口(真正的硬件 eth0、wlan0、dummy0,...)
这些ip link
命令只解释iflink值:
@NONE
@ifXX
与XX
被索引序号。没有匹配的ifindex就足以知道它与其他网络命名空间相关,请参见下文。@
。这就是真实接口(eth0 ...)应该发生的情况,但也可能是一个错误(见下文)。什么时候找不到匹配的ifindex?当该接口位于其他网络命名空间时。这是已知的,因为link-netnsid
附加在结果的末尾。此值在外部不容易获得ip link
(请参阅此问答:如何查找 veth 对等 ifindex 的网络命名空间?)。它代表本地分配的对应对等网络命名空间的 nsid。对于容器,第一个(可能也是唯一的)值 0 几乎总是代表主机的网络命名空间。对于一个主机,每个容器可能会有一个link-netnsid值,第一个容器的link-netnsid为0。注意这个值是net命名空间的本地值,不是绝对id,所以不能直接比较在两个网络命名空间之间(请参阅上一个链接)。
所以没有找到ifindex肯定意味着它在另一个命名空间中。这是通过link-netnsid
财产的存在来确认的。
有时iflink,即对等接口的索引值,在其他网络命名空间中时,恰好与本地接口(在当前网络命名空间中)具有相同的 id。在这种情况下ip link
不会显示任何内容@
,逻辑上它是一个通用接口,但这是错误的,如本例所示:
# ip -o link show dev veth1
3: veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\ link/ether 7e:d9:ca:77:87:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
# cat /sys/class/net/veth1/{ifindex,iflink}
3
3
Run Code Online (Sandbox Code Playgroud)
(注意存在link-netnsid 0
意味着链接在另一个网络命名空间中。)
在其他情况下(我没有设法重现,因此可能已更正)它甚至可能使用其他网络命名空间索引显示本地接口名称。
对于您的示例,如果您在主机上运行(而不是在容器中):ip -o link |grep ^44:
. 您肯定会找到一个索引为 44 的接口,它是对等方的 veth 链接。(除非有一个中间的不可见网络命名空间)。
归档时间: |
|
查看次数: |
2381 次 |
最近记录: |