我需要明确地并且没有“整体”猜测地在另一个网络命名空间中找到veth 端的对等网络接口。
尽管有很多文档并且在 SO 上的回答也假设网络接口的 ifindex 索引在每个主机的网络命名空间中是全局唯一的,但这在许多情况下并不成立:ifindex/iflink
是模棱两可的。甚至环回已经显示出相反的情况,在任何网络命名空间中都有一个 ifindex 为 1。此外,根据容器环境,ifindex
数字会在不同的命名空间中重用。这使得跟踪 veth 布线成为一场噩梦,特别是有很多容器和一个带有 veth peers 的主机桥都以@if3 左右结尾......
link-netnsid
是0
启动一个 Docker 容器实例,只是为了获得一个新的 veth
从主机网络命名空间连接到新容器网络命名空间对......
$ sudo docker run -it debian /bin/bash
现在,在主机网络命名空间中列出网络接口(我已经省略了对这个问题不感兴趣的那些接口):
$ ip链接显示 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 ... 4: docker0: mtu 1500 qdisc noqueue state UP mode DEFAULT group default 链接/以太 …
我知道您可以通过执行ip a show
. 那只显示主机可以看到的接口,但是容器配置的虚拟接口不会出现在这个列表中。我也试过使用ip netns
,它们也没有出现。我应该重新编译另一个版本iproute2
吗?在 中/proc/net/fb_trie
,您可以看到本地/广播地址,我假设,作为转发数据库的用途。
我在哪里可以找到任何这些信息或命令来列出包括容器在内的所有接口?
要对此进行测试,请启动一个容器。就我而言,它是 snap 上的 lxc 容器。做一个ip a
或ip l
。它将显示主机的视图,但不显示容器配置的界面。我正在搜索procfs
,因为容器只是 cgrouped 进程,但除了fib_trie
和 arp 条目之外我什么也没有得到。我认为这可能是由于 netns 名称空间混淆造成的,但ip netns
也没有显示任何内容。
您可以使用conntrack -L
来显示已建立的所有传入和传出连接,因为 lxd 需要连接跟踪数据包的转发,但我想列出系统上配置的所有 ip 地址,就像我能够告诉使用netstat
或lsof
。