在命令行中代理 dns 查询

在命令行中代理 dns 查询

我想对某些终端命令使用不同的 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

相关内容