我想对某些终端命令使用不同的 dns 服务器(不是 tor,我设置的任何 dns 服务器)。说它看起来像
$ DNS_SERVER=8.8.8.8 dnsify ping example.com
并且它使用谷歌DNS。我知道有socksify、torrify 和其他类似的工具。我寻找任何工具、黑客或其他方式可以为我的命令明确设置它或至少限制为终端会话。因此,我在命令或终端会话中使用不同的 dns,并为所有其他软件使用主 dns。
我尝试了代理链,但无法强制它使用非系统代理。
那么,有没有什么可以进行dns代理的呢?
答案1
我不知道有任何方法可以仅通过使用环境变量来覆盖系统解析器。您可以resolv.conf
使用RES*
环境变量覆盖选项,但这些不能用于覆盖nameserver
定义(请参阅resolv.conf
手册页了解更多信息)。
最好的选择是使用LD_PRELOAD
动态链接器的机制来预加载一个库,该库允许您覆盖各种解析器调用以使用您自己的 DNS 服务器而不是系统服务器。
我发现的一个是解决conf覆盖。来自自述文件:
resolvconf override 提供了一个共享库,用作 LD_PRELOAD 来覆盖基于 glibc 的系统(例如大多数 Linux 发行版)上 /etc/resolv.conf 中列出的名称服务器。
...
要使用 Google DNS 代替 /etc/resolv.conf 中提到的 DNS,您可以运行:
LD_PRELOAD=/usr/lib64/libresolvconf-override.so NAMESERVER1=8.8.8.8 NAMESERVER2=8.8.4.4 myapplication
您需要从源代码编译它,但它看起来完全符合您的需要。
笔记:你没有指定操作系统,但我假设是 Linux。
答案2
解析包装器我认为来自 samba 项目的工作做得很好。允许自定义resolv.conf
以及自定义 DNS 记录RESOLV_WRAPPER_HOSTS
。