LINUX.ORG.RU

Разные dns-сервера в зависимости от домена

 


1

2

Привет! Подскажите, пожалуйста, возможно ли настроить dns-клиент так, чтоб он обращался к разным серверам в зависимости от того, хост какого домена мне нужно найти? То есть, например, домен local я хочу искать на 192.168.0.111, домены ru, com, org - на 8.8.8.8, а все остальное пусть мне возвращает тот dns-сервер, который пришел по dhcp. Такое возможно? Заранее спасибо!

Поставь локально dnsmasq, он сможет перенаправлять запросы на разные сервера в зависимости от домена. Но, ЕМНИП, указывать все адреса можно только статично, поэтому ты не сможешь сделать так, чтобы он обращался к полученному тобой по dhcp серверу.

anonymous ()
Ответ на: комментарий от anonymous

А «маски» доменов могет? Пойду читать, спасибо!

упд: похоже, не умеет, и вообще он resolv.cofn обрабатывает. Но за вектор направления поисков спасибо, хотя и сам думал локальный dns использовать.

alozovskoy ★★★★★ ()
Последнее исправление: alozovskoy (всего исправлений: 1)

создать корневую зону ru на сервере
сказать что ns для зоны ru 8.8.8.8
обращаться к своему серверу, который обратится к 8.8.8.8 который скажет настоящий ns для зоны ru - это наркомания.

system-root ★★★★★ ()
Ответ на: комментарий от system-root

Не, это очень сложно, нужно проще, а то я так с уса сойду зоны создавать

alozovskoy ★★★★★ ()
Ответ на: комментарий от no-dashi

Давай. NM я не использую, но все равно думаю полезно будет. А локальный бинд это не слишком сильно для такой задачи?

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

1. Собственно хук для NM

#!/bin/sh
if [ "_$2" = "_up" ] ; then
	echo "Called as $0 $@ at " `date`
	if [ "$DHCP4_DOMAIN_NAME_SERVERS" != "" ] ; then
		dns=`echo "$DHCP4_DOMAIN_NAME_SERVERS" | tr " " ";" | tr -d "\n"`
		rootzone="zone \".\" { type forward; forwarders { $dns; }; };"
	else
		rootzone="zone \".\" { type hint; file\"named.ca\"; };"
	fi
	cat /etc/named.conf.base | sed -e "s/%rootzone%/$rootzone/" >/etc/named.conf
	systemctl restart named.service
	echo "nameserver 127.0.0.1" >/etc/resolv.conf
fi
Вкратце - если от NM пришли данные о ДНС-сервере, то подставить переданные адреса как форвардеров для зоны ".", если данных о ДНС-сервере не пришло, то переводимся в полнофункциональный ресолвер с хинтовой ".". Обрати внимание - после активации named содержимое resolv.conf заменяется на 127.0.0.1. Почему сразу прямо в настройках адаптера не указать DNS 127.0.0.1? Потому, что тогда придется шаманить DHCP-клиент на предмет «а какой сервер DNS» и вписывать его в конфиг named.

И собственно шаблон named.conf:

options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { localhost; };
	recursion no;

	dnssec-enable no;
	dnssec-validation no;
	dnssec-lookaside auto;

	bindkeys-file "/etc/named.iscdlv.key";
	managed-keys-directory "/var/named/dynamic";
	pid-file "/run/named/named.pid";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

acl "localnet" {
	127.0.0.0/24;
	192.168.0.0/16;
};

view "internal" {
	match-clients { localnet; };
	recursion yes;
	%rootzone%
	zone "book.local" { type master; file "book.local.zone"; allow-transfer { 192.168.66.1; 192.168.66.2; 192.168.66.3; 192.168.66.4; }; };
	zone "101.168.192.in-addr.arpa" { type master; file "192.168.101.zone"; allow-transfer { 192.168.66.1; 192.168.66.2; 192.168.66.3; 192.168.66.4; }; };
	include "/etc/named.rfc1912.zones";
	include "/etc/named.root.key";
	include "/etc/named.slave.zones";
};

view "blackhole" {
	match-clients { any; };
	recursion no;
};
Естественно, все правки конфига named только через шаблон (named.conf.base) или через include-файлы.

no-dashi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.