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


29

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

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


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

Ответы:


15

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

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

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


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

2
Это может быть сделано с использованием стандартного разрешения DNS, предоставляемого некоторыми операционными системами. Просто не под Linux.
Жаворонки

Чтобы контролировать, какой интерфейс использовать, я добавил @vpn0 в конце DNS-серверов. Это может быть полезно для использования только тогда, когда VPN работает.
Алекс


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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.