Wil*_*rds 5 networking dns resolv.conf
是否可以为不同的用户设置不同的 DNS 服务器?
比方说用户test1使用谷歌的DNS(8.8.8.8和8.8.8.8),test2会使用0.0.0.0,都test3和test4会使用127.0.0.1。
这可能吗?
\xe2\x80\x9c 是\xe2\x80\xa6\xe2\x80\x9d 嗯,是的。
\n\n\xe2\x80\x9cHow,\xe2\x80\x9d 是事情变得复杂的地方。
\n\n基本上,我能想到两个真正的选择。假设您使用的是 Gnu libc,并且有 nsswitch 支持(我隐约记得某些发行版可能已禁用它?),一种选择可能是替换 \xe2\x80\x9cnormal\xe2\x80\x9d NSS DNS 模块(即/lib64/libnss_dns*)具有可以检查的自定义版本,也许~/.config/resolv.conf如此。
请注意,通过 \xe2\x80\x9creplace\xe2\x80\x9d 我的意思是添加另一个具有唯一名称的模块,然后您可以从/etc/nsswitch.conf. 人们可能会 \xe2\x80\x9csimple\xe2\x80\x9d 分叉用于构建 \xe2\x80\x9cnormal\xe2\x80\x9d 版本的代码,并添加一些内容以从中构建每用户版本。
另一种选择可能是使用内核命名空间来 \xe2\x80\x9cmount\xe2\x80\x9dresolv.conf从每个用户进程的角度进行替换。(请参阅评论中 IBM 的非常彻底的处理。)
不过,我不知道有任何现有工具可以促进这两者。
\n\n我想到的第三个选项是为每个用户构建一个chroot监狱,其中大多数文件是硬链接或绑定安装的,以及一些选定的文件(例如resolv.conf就地更改)。
DNS 服务器设置是为计算机而不是用户定义的。
系统gethostbyname*()调用系列尝试查找给定的主机名并返回 IP 地址。第一个位置通常是/etc/hosts文件。然后他们通过 中设置的 DNS 服务器进行查找/etc/resolv.conf。