小编The*_*veO的帖子

如何找到 veth peer ifindex 的网络命名空间?

任务

我需要明确地并且没有“整体”猜测地在另一个网络命名空间中找到veth 端的对等网络接口。

理论 。/。现实

尽管有很多文档并且在 SO 上的回答也假设网络接口的 ifindex 索引在每个主机的网络命名空间中是全局唯一的,但这在许多情况下并不成立ifindex/iflink 是模棱两可的。甚至环回已经显示出相反的情况,在任何网络命名空间中都有一个 ifindex 为 1。此外,根据容器环境,ifindex数字会在不同的命名空间中重用。这使得跟踪 veth 布线成为一场噩梦,特别是有很多容器和一个带有 veth peers 的主机桥都以@if3 左右结尾......

例子: link-netnsid0

启动一个 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 
    链接/以太 …

networking network-namespaces veth

11
推荐指数
2
解决办法
1万
查看次数

Linux 网络接口名称中允许使用字符?

Linux 网络接口名称中允许的字符范围是多少?我四处搜索,但没有找到任何定义或说明。是否允许大写字符?大写字母和小写字母有区别吗?

linux network-interface

7
推荐指数
2
解决办法
4040
查看次数

切换到网络命名空间不会改变 /sys/class/net?

网络命名空间(7)的 Linux 手册页说:

网络命名空间提供与网络相关的系统资源的隔离:[...]、/sys/class/net 目录、[...]。

但是,简单地切换到不同的网络命名空间似乎不会改变/sys/class/net(有关如何重现,请参见下文)的内容。我只是误以为setns()进入网络命名空间已经足够了吗?是否总是需要重新挂载/sys才能正确/sys/class/net匹配当前加入的网络命名空间?还是我在这里错过了其他东西?

再现示例

拿一个*ubuntu系统,找到rtkit-daemon的PID,进入daemon的网络命名空间,显示它的网络接口,然后检查/sys/class/net

$ PID=`sudo lsns -t net -n -o PID,COMMAND | grep rtkit-daemon | cut -d ' ' -f 2`
$ sudo nsenter -t $PID -n
# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ls /sys/class/net
docker0  enp3s0  lo  lxcbr0  ...
Run Code Online (Sandbox Code Playgroud)

请注意,虽然ip link show …

linux namespace network-namespaces

7
推荐指数
1
解决办法
1926
查看次数