我使用名称空间来分隔服务器上的几个物理接口。路线运作得很好。另外,我为/etc/netns/例如/etc/netns/namespaceA/ fine中的每个名称空间都有一个文件夹,这样DNS也能正常工作。
在dhclient中使用DHCP时会出现问题。我在名称空间中运行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能够识别命名空间?
发布于 2017-03-31 12:47:57
我亲自调查了这个问题。
在创建网络命名空间时,除非创建显式的/etc/resolv.conf,否则会看到主机的/etc/netns/<namespace_name>/resolv.conf,这将在网络命名空间中查找时自动绑定到/etc/resolv.conf。因此,通过简单地创建该路径,主机的resolv.conf将不再是网络命名空间上的visibile,它将拥有自己的resolv.conf。
手册页 of ip netns解释了这一点:
对于知道网络名称空间的应用程序,约定是先在/etc/netns/NAME/然后在/etc/中查找全局网络配置文件。例如,如果您想要一个用于隔离vpn的网络名称空间的/etc/ your的不同版本,您可以将它命名为/etc/netns/myvpn/surv.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似乎正确地完成了这项工作。
https://stackoverflow.com/questions/38102481
复制相似问题