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


29

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

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


4
小心-尝试避开安全控制可能会导致一些公司被护送。另外,其他DNS服务器也可能被阻止。
uSlackr

Answers:


15

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

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

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


1
systemd-resolved世界上仍然如此吗?(是的,我知道您的回答是7岁)
尖尖的

35

使用* 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

/etc/dnsmasq.conf

server=/freenode.net/8.8.8.8
server=/freenode.net/8.8.4.4

2
绝对可以使用某些操作系统提供的标准DNS解析来完成。只是不是通过Linux。
larsk's

为了控制使用哪个接口,我@vpn0 在DNS服务器的末尾添加了。仅在VPN启动时使用它才有用。
Alex


5

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

首先安装bind:

sudo dnf install bind

步骤1:(/etc/named.conf以root身分)附加一行:

include "/etc/named/freenode.net.conf";

步骤2:创建区域文件/etc/named/freenode.net.conf(作为根):

zone "freenode.net" {
    type forward;
    forwarders { 8.8.8.8; };
};

现在重新启动名为:

sudo service named restart

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


3

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

firejail --dns=8.8.8.8 firefox

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.