是否可以为不同的用户设置不同的 DNS 服务器?

Wil*_*rds 5 networking dns resolv.conf

是否可以为不同的用户设置不同的 DNS 服务器?

比方说用户test1使用谷歌的DNS(8.8.8.88.8.8.8),test2会使用0.0.0.0,都test3test4会使用127.0.0.1

这可能吗?

BRP*_*ock 7

\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如此。

\n\n

请注意,通过 \xe2\x80\x9creplace\xe2\x80\x9d 我的意思是添加另一个具有唯一名称的模块,然后您可以从/etc/nsswitch.conf. 人们可能会 \xe2\x80\x9csimple\xe2\x80\x9d 分叉用于构建 \xe2\x80\x9cnormal\xe2\x80\x9d 版本的代码,并添加一些内容以从中构建每用户版本。

\n\n

另一种选择可能是使用内核命名空间来 \xe2\x80\x9cmount\xe2\x80\x9dresolv.conf从每个用户进程的角度进行替换。(请参阅评论中 IBM 的非常彻底的处理。)

\n\n

不过,我不知道有任何现有工具可以促进这两者。

\n\n

我想到的第三个选项是为每个用户构建一个chroot监狱,其中大多数文件是硬链接或绑定安装的,以及一些选定的文件(例如resolv.conf就地更改)。

\n

  • 请参阅 http://www.ibm.com/developerworks/linux/library/l-mount-namespaces/index.html,了解解决此类问题的写得非常好的但极其繁重的方法。我没有足够的时间来深入研究这个足够的细节来尝试自己实施。 (2认同)

cha*_*aos 1

DNS 服务器设置是为计算机而不是用户定义的。

系统gethostbyname*()调用系列尝试查找给定的主机名并返回 IP 地址。第一个位置通常是/etc/hosts文件。然后他们通过 中设置的 DNS 服务器进行查找/etc/resolv.conf