Собственный кеширующий DNS-сервер

У меня случалось так — интернет есть, но не работает, виноват оказывался провайдерский DNS-сервер, тогда я прописывал другие сервера, гугла например (8.8.8.8, 8.8.4.4), но от них бывало приходилось ждать ответ 40+ms, конечно это неособо долго, но все же влияло на скорость загрузки страницы. И когда я начал использовать Arch, подумал, а почему бы и не установить собственный кеширующий DNS-сервер.


По началу я ставил named, но, что-то пошло не так, и у меня с ним ничего не вышло, мой взгляд пал на pdns, небольшой, быстрый и на [http://habrahabr.ru/post/159013] его рекомендуют.
1. Устанавливаем pacman -S pdnsd
2. Настраиваем:
/etc/pdnsd.conf
global {
	perm_cache=2048; #Размер кэша, 2-3мб вполне достаточно, но никто не мешает сделать больше, например 10мб
	cache_dir="/var/cache/pdnsd"; #Местоположение кеша
	pid_file = /var/run/pdnsd.pid;
	run_as="pdnsd"; #имя пользователя от кого будет работать служба
	server_ip = any;  #Сетевой интерфейс с которого можно будет получать запросы
	status_ctl = on; #разрешить управление через pdnsd-ctl
#	paranoid=on;       #уменьшает шанс инъекций в запросах к dns
	query_method=udp_tcp; #на каких протоколах слушать tcp и udp
	min_ttl=60m;       #минимальное время для хранения записи в кеше.
	max_ttl=1w;        #максимальная (1 неделя).
	timeout=10;        #таймаут запроса.
	neg_domain_pol=on; #отрицательный кеш
	udpbufsize=1024;   #ограничение размера udp запроса
}

# The following section is most appropriate if you have a fixed connection to
# the Internet and an ISP which provides good DNS servers.
server {
	label= "myisp"; #Название DNS серверов провайдера и интернета
	ip = 80.64.109.227, 8.8.4.4, 8.8.8.8;  # Put your ISP's DNS-server address(es) here.
#	proxy_only=on;     # Do not query any name servers beside your ISP's.
	                   # This may be necessary if you are behind some
	                   # kind of firewall and cannot receive replies
	                   # from outside name servers.
	timeout=4;         # Server timeout; this may be much shorter
			   # that the global timeout option.
	uptest=if;         # Проверять ли жив сетевой интерфейс.
	interface=eth0;    # Интерфейс с которого будут посылаться запросы на следующие DNS
	interval=10m;      # Проверять каждый 10 минут.
	purge_cache=off;   # Оставлять в кеше, даже когда днс сервера ушли в офлайн

	edns_query=yes;    # Разрешает запросы свыше 512 байт
#	exclude=.thepiratebay.org,  # If your ISP censors certain names, you may
#		.thepiratebay.se,   # want to exclude them here, and provide an
#		.piratebay.org,	    # alternative server section below that will
#		.piratebay.se;	    # successfully resolve the names.
}



# This section is meant for resolving from root servers.
server {
	label = "root-servers";
	root_server = discover; # опрашивать root сервера для получения полного списка
	randomize_servers = on; # давать равные шансы каждому серверу быть опрошенными
	ip = 	198.41.0.4,    
		192.228.79.201; #2х серверов достаточно для получения полного списка
	timeout = 5;
	uptest = query;         # Вид теста для проверки сервера
#	query_test_name = .;    # To be used if remote servers ignore empty queries.
	interval = 30m;         # Проверять каждые полчаса
	ping_timeout = 300;     # Пинг проверять каждые 30 секуд
	purge_cache = off; #сбрасывать кеш dns'a при достижение времени указанной в записи
#	edns_query = yes;	# Use EDNS for outgoing queries to allow UDP messages
			   	# larger than 512 bytes. May cause trouble with some
			   	# legacy systems.
	exclude = .localdomain;
	policy = included;
	preset = off;
}


source {
	owner=localhost;
#	serve_aliases=on;
	file="/etc/hosts";
}

/*
include {file="/etc/pdnsd.include";}	# Read additional definitions from /etc/pdnsd.include.
*/

rr {
	name=localhost;
	reverse=on;
	a=127.0.0.1;
	owner=localhost;
	soa=localhost,root.localhost,42,86400,900,86400,86400;
}

/*
neg {
	name=doubleclick.net;
	types=domain;   # This will also block xxx.doubleclick.net, etc.
}
*/

/*
neg {
	name=bad.server.com;   # Badly behaved server you don't want to connect to.
	types=A,AAAA;
}
*/

/* */ — все что находится внутри, считается закоментированным.
Включаем и запускаем службу systemctl enable pdnsd.service && systemctl start pdnsd.service
Настраиваем все службы на использование нашего нового кеширующего DNS-сервера.
/etc/resolvconf.conf
# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details

resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=127.0.0.1
/etc/resolv.conf можно обнулить, он все равно по умолчанию будет использовать 127.0.0.1.
nameserver 127.0.0.1
Быстрых вам ответов и правильных запросов.

Комментарии ()

    Есть вопрос или предложение пиши в Telegram @cloudsv

    Прямой эфир

    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 0
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0
    cloudsv 01 июня 2018, 01:39
    Telegram Настройка прокси mtproto для Telegram 28
    cloudsv 22 января 2018, 21:59
    Web Локальное зеркало обновлений Dr.web 0
    cloudsv 03 октября 2017, 10:55
    Web Пароль от резервной копии Bitrix 1
    cloudsv 09 июля 2017, 23:02
    Arch Linux Let's Encrypt это легко и просто 0