Есть ли способ использовать конкретный DNS для конкретного домена?

29

На работе мы используем OpenDNS, и он ошибочно заблокировал irc.freenode.net за вредоносное ПО. Как я могу убедиться, что любой запрос для * .freenode.net идет на 8.8.8.8 и 8.8.4.4 (DNS от Google).

Я попытался сделать это, поиграв с resolv.conf в Ubuntu, но я не смог зайти слишком далеко. Кроме того, есть ли простой способ сделать это для систем Mac и Windows (у меня есть несколько коллег, использующих эти ОС, и они также хотели бы использовать IRC).

vivin
источник
4
Будьте осторожны - попытка обойти меры безопасности может привести к тому, что вы окажетесь в некоторых компаниях. Также возможно, что другие DNS-серверы заблокированы.
uSlackr

Ответы:

15

Linux не поддерживает использование доменных DNS-серверов через resolv.conf. Вы можете обойти эту проблему, запустив кэширующий сервер имен (например, BINDили dnsmasq) локально, а затем настроив явные серверы пересылки для каждого домена.

Под OS X этот тип настройки относительно прост с использованием scutilкоманды. Обычный вариант использования этой конфигурации - пересылка DNS-запросов для VPN-подключения на DNS-серверы, специфичные для VPN, поэтому вы часто будете обсуждать это совместно с, например, OpenVPN. Этот документ говорит о scutilкоманде, как это делает , и поиск Google openvpnи scutilдаст больше результатов.

Я не уверен насчет Windows. Вы можете использовать локальное решение DNS-сервера для всех трех платформ, если вам нужно.

larsks
источник
1
Это все еще верно в systemd-resolvedмире? (Да, я понимаю, что вашему ответу 7 лет)
Пинти
1
@Pointy Кажется, что последние версии systemd-resolved могут справиться с этим: gist.github.com/brasey/…
corford
35

Это невозможно сделать с помощью стандартного разрешения DNS, предоставляемого * nix (и Windows AFAIK), для этого необходим собственный 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
mgorven
источник
2
Это может быть сделано с использованием стандартного разрешения DNS, предоставляемого некоторыми операционными системами. Просто не под Linux.
Жаворонки
Чтобы контролировать, какой интерфейс использовать, я добавил @vpn0 в конце DNS-серверов. Это может быть полезно для использования только тогда, когда VPN работает.
Алекс
8

Под OS X вы можете использовать такие файлы, как /etc/resolver/example.com с контентом:

nameserver 172.16.5.5

пересылать DNS-запросы для * .example.com на 172.16.5.5

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

Alek_A
источник
Это относится к High Sierra?
Толсад
1
Это все еще работает на Мохаве
byte255
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(как root):

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-сервер может быть установлен для каждого приложения, а не для домена. Так что это может быть лучшим решением в некоторых обстоятельствах.

mrlotfi
источник