有没有办法为特定域使用特定 DNS?

viv*_*vin 32 domain-name-system

在工作中,我们使用 OpenDNS,它错误地阻止了 irc.freenode.net 的恶意软件。我如何确保对 *.freenode.net 的任何请求都发送到 8.8.8.8 和 8.8.4.4(Google 的 DNS)。

我尝试通过在 Ubuntu 上摆弄 resolv.conf 来做到这一点,但我无法走得太远。另外,是否有一种简单的方法可以为 Mac 和 Windows 系统执行此操作(我有一些同事使用这些操作系统,他们也想使用 IRC)。

mgo*_*ven 38

这不能通过 *nix(和 Windows AFAIK)提供的标准 DNS 解析来完成,您需要自己的 DNS 服务器来执行此操作。在 *nix 上dnsmasq是最好的选择,您可以在每个工作站上运行它,也可以在服务器上运行它并配置所有工作站以使用它。

/etc/resolv.conf

nameserver 127.0.0.1
nameserver 208.67.222.222
nameserver 208.67.220.220
Run Code Online (Sandbox Code Playgroud)

/etc/dnsmasq.conf

server=/freenode.net/8.8.8.8
server=/freenode.net/8.8.4.4
Run Code Online (Sandbox Code Playgroud)

  • 这绝对可以使用*某些*操作系统提供的标准 DNS 解析来完成。只是不是 Linux。 (3认同)

lar*_*sks 16

Linux 不支持通过resolv.conf. 您可以通过在本地运行缓存名称服务器(例如BINDdnsmasq)然后为每个域配置显式转发器来解决此问题。

在 OS X 下,使用该scutil命令进行此类设置相对容易。此配置的常见用例是将 VPN 连接的 DNS 请求转发到特定于 VPN 的 DNS 服务器,因此您会发现这经常与 OpenVPN 等一起讨论。 这份文件对会谈scutil一样命令和谷歌搜索openvpn,并scutil取得更多成果。

我不确定 Windows。如果需要,您大概可以为所有三个平台使用本地 DNS 服务器解决方案。

  • @Pointy 似乎最近版本的 systemd-resolved 可以处理这个问题:https://gist.github.com/brasey/fa2277a6d7242cdf4e4b7c720d42b567#solution (4认同)

Ale*_*k_A 11

在 OS X 下,您可以使用像 /etc/resolver/example.com 这样的文件来包含内容:

nameserver 172.16.5.5
Run Code Online (Sandbox Code Playgroud)

将 *.example.com 的 dns 请求转发到 172.16.5.5

http://hints.macworld.com/article.php?story=2004062902195410

  • 它仍然适用于莫哈韦沙漠 (2认同)

小智 6

您可以使用 PowerShell 在 Windows 上执行此操作:

Add-DnsClientNrptRule -Namespace "pqr.com" -NameServers "10.0.0.1"

参考:https : //docs.microsoft.com/en-us/powershell/module/dnsclient/add-dnsclientnrptrule?view=win10-ps


小智 5

我通过安装本地 DNS 服务器在 Fedora 上做到了这一点。

首先安装绑定:

sudo dnf install bind
Run Code Online (Sandbox Code Playgroud)

第 1 步:添加一行/etc/named.conf(以 root 身份):

include "/etc/named/freenode.net.conf";
Run Code Online (Sandbox Code Playgroud)

第 2 步:创建区域文件/etc/named/freenode.net.conf(以 root 身份):

zone "freenode.net" {
    type forward;
    forwarders { 8.8.8.8; };
};
Run Code Online (Sandbox Code Playgroud)

现在重新启动命名:

sudo service named restart
Run Code Online (Sandbox Code Playgroud)

现在重新配置您的局域网设置以使用 127.0.0.1 作为 DNS 服务器,而不是 DCHP 分配的主机。


mrl*_*tfi 5

可以为此使用firejail --dns 选项。例如:

firejail --dns=8.8.8.8 firefox
Run Code Online (Sandbox Code Playgroud)

这样可以为每个应用程序而不是每个域设置 dns 服务器。所以在某些情况下它可能是更好的解决方案。