首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`ip netns exec`命令是如何创建挂载命名空间的?

`ip netns exec`命令是如何创建挂载命名空间的?
EN

Stack Overflow用户
提问于 2017-08-11 07:07:50
回答 1查看 10.8K关注 0票数 4

ip netns exec命令如何创建挂载命名空间并防止更改传播到其他挂载命名空间?

下面是ip-netns的手册页

对于知道网络名称空间的应用程序,约定是先在/etc/netns/NAME/然后在/etc/中查找全局网络配置文件。例如,如果您想要一个用于隔离vpn的网络名称空间的/etc/ your的不同版本,您可以将它命名为/etc/netns/myvpn/surv.conf。 ip netns exec通过创建挂载命名空间并将每个网络命名空间配置文件绑定到它们在/etc中的传统位置,从而自动处理此配置、网络命名空间未知应用程序的文件约定。

但是,它如何管理绑定挂载仅在特定名称空间中可见?

让我举个例子。在一个终端中,我创建一个网络命名空间ns3,并为ns3创建一个特定的resolv.conf。

代码语言:javascript
复制
# ip netns add ns3
# mkdir /etc/netns/ns3
# echo "ns3 conf" > /etc/netns/ns3/resolv.conf
# ip netns exec ns3 sleep 36000

现在,在另一个终端中,我检查/etc/rupv.conf。

代码语言:javascript
复制
# cat /etc/resolv.conf
default conf

这里没有反映由绑定挂载所做的更改。只有当我输入由ip netns命令创建的挂载命名空间时,更改才是可见的。

代码语言:javascript
复制
# lsns | grep mnt
4026533472 mnt        1 13016 root             sleep 36000
# nsenter -m -t 13016
# cat /etc/resolv.conf
ns3 conf

所以一切都如期而至。

现在让我尝试直接使用unshare命令来完成这个任务,而不是使用ip netns exec

我再次创建一个命名空间。使用unshare,我将创建一个挂载命名空间,并在该挂载命名空间中执行绑定挂载。我假设这就是ip netns exec命令内部所做的。

代码语言:javascript
复制
# ip netns add ns4
# mkdir /etc/netns/ns4
# echo "ns4 conf" > /etc/netns/ns4/resolv.conf
# unshare -m --propagation unchanged /bin/bash
# mount --bind /etc/netns/ns4/resolv.conf /etc/resolv.conf

但这一次,当我从另一个终端检查时,更改已被传回,这是不想要的。

代码语言:javascript
复制
# cat /etc/resolv.conf
ns4 conf

那么,ip netns exec所做的防止这种变化传播的附加步骤是什么呢?我认为这与使用make-sharedmake-slave标志有关,但无法准确地找出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 07:57:19

发现如果我使用# unshare -m --propagation slave /bin/bash,传播就会被阻止。

ip netns exec命令似乎在unshare(CLONE_NEWNS)完成后运行mount --make-rslave /。也就是说,在创建新的挂载命名空间之后,/将作为从名称空间在该命名空间中挂载。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45629002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档