我正在使用名称空间将服务器上的一些物理接口分开。该路由完美地工作。另外,我有一个/etc/netns/e.g的每个命名空间的文件夹。/etc/netns/namespacea/resolv.conf,以便DNS也可以正常工作。
将DHCP与DHClient一起使用时出现了问题。我正在从一个命名空间内运行DHCLIENT,并且会遇到此错误。
(namespaceA)root@tc-vm:~#dhclient
RTNETLINK answers: File exists
mv: cannot move '/etc/resolv.conf.dhclient-new.2740' to '/etc/resolv.conf': Device or resource busy
我发现/etc/resolvconf/update.d/libc中的MV包含可能引起问题的MV。
如何使dhclient识别名称空间?
我自己研究了问题。
发生的事情是,当您创建网络名称空间时,您会看到主机计算机的/etc/resolv.conf
,除非您明确创建/etc/netns/<namespace_name>/resolv.conf
,否则在内部网络名称空间时,它将自动绑定到/etc/resolv.conf
。因此,通过简单地创建该路径,主机的resolv.conf
将不会在网络名称空间上进行可见,该网络名称空间将具有其自己的resolv.conf
。
ip netns
的手动页面解释了以下内容:
对于了解网络名称空间的应用程序, 是首先查找全局网络配置文件 /etc/netns/name/in in/etc/。例如,如果您想要其他 用于隔离的网络名称空间的/etc/resolv.conf的版本 您的VPN您会命名/etc/netns/myvpn/resolv.conf。
IP Netns Exec自动处理此配置,文件 网络名称空间的约定应用程序,通过创建一个 安装名称空间并绑定每个网络名称空间所有的安装 将文件配置到其传统位置/etc。
就更新resolv.conf
而言,dhclient
在存在/etc/netns/<namespace_name>/resolv.conf
时在网络名称空间中不起作用(另一方面,当它不存在时,它将覆盖主机计算机的resolv.conf
,因为它是只有一个可用,但这并不是真正的)。正如上面问题中的错误所示,发生了什么事是dhclient
在/etc/resolv.conf.dhclient-new.2740
中使用新名称服务器详细信息准备了一个临时文件,然后试图将其重命名为/etc/resolv.conf
。它会生成错误,因为/etc/resolv.conf
已经被绑定了,并且显然不允许mv
执行此技巧。
为了使dhclient
在网络名称空间中工作,应修改/sbin/dhclient-script
。我删除了:
mv -f $new_resolv_conf /etc/resolv.conf
并替换为:
cat $new_resolv_conf > /etc/resolv.conf
rm -f $new_resolv_conf
否则,dhcpcd
似乎正确地完成了此工作。