Dnsmasq настройка dns server
Dnsmasq работает как кэширующий DNS-сервер с очень полезной и часто необходимой особенностью. Он может использовать файл /etc/hosts как источник записей DNS.
Рассмотрим два варианта настройки:
1. Просто DNS сервер. Без DHCP.
2. Связка DNS + DHCP.
3. Моменты которые не использованы.
Это базовые настройки. Я бы даже сказал поверхностные, но достаточные для работы. Не буду размусоливать, а сразу перейду к установке и настройке. Погнали.
1. Настройка только DNS-сервера. DHCP-сервер будет отключен.
$ apt-get install dnsmasq
Настройка производится путем правки конфиг-файла /etc/dnsmasq.conf или путем создания файла dnsmasq.conf в каталоге /etc/dnsmasq.d . Оба способа рабочие.
Файл с настройками должен выглядеть примерно так:
interface= eth1
no-dhcp-interface= eth1
domain-needed
bind-interfaces
stop-dns-rebind
clear-on-reload
log-facility=/var/log/dnsmasq-queries.log
. Не забудьте поменять eth1 на свой интерфейс.
После чего надо перезапустить сервис:
$ service dnsmasq restart
Добавляем dnsmasq в автозагрузку:
$ systemctl enable dnsmasq
2. Настройка DNS+DHCP сервера.
Делаем все по порядку как указано выше. Нужно только в файле конфигурации dnsmasq.conf вместо
no-dhcp-interface=eth1
dhcp-range=eth1,192.168.0.10,192.168.0.100,24h
В данном случае мы будем выдавать пользователям ip адреса в диапазоне от 192.168.0.10 до 100.
После чего надо перезапустить сервис:
$ service dnsmasq restart
Добавляем dnsmasq в автозагрузку:
$ systemctl enable dnsmasq
3. Моменты которые не использованы.
Самый важный момент это resolv.conf который система использует для списка DNS серверов которые обработают запросы.
Для того чтобы все запросы шли непосредственно к dnsmasq нужно в /etc/resolv.conf прописать следующее
nameserver 127.0.0.1
Но тут возникает затык. Т.к. при перезагрузке или при переключении интерфейса эта запись исчезнет. И как показала практика этот момент не связан с тем что адрес статический и указан ручками либо получается автоматически при подключении.
Чтобы этого избежать, нужно раскоментировать строчку в файле /etc/dhcp/dhclient.conf (или /etc/dhcp3/dhclient.conf)
prepend domain-name-servers 127.0.0.1;
Количество интерфейсов которые принимают запросы не ограничиваются одним. Можно добавить столько сколько нужно.
interface=eth0
interface=eth1
Если же нужно указать интерфейс который не будет принимать запросы. Т.е. указать его явно, то дописываем:
except-interface=eth3
Или вообще можно указать IP адрес
listen-address= 192.168.0.6
Указать доменное имя
Или вообще указать отдельное доменное имя, для отдельной сети
Указание адресов доменных серверов для перенаправления запроса к определенным зонам
Аналогично для обратной зоны
server=/2.168.192.in-addr.arpa/192.168.2.1
В конфигурационном файле можно указать соответствие имени IP
Если нужно чтобы SERVER отзывался на SRV то
cname=server,srv
Если мы не хотим использовать файл /etc/host для сопоставления имя/IP
Или например мы имеем несколько файлов содержащих имя/IP
addn-hosts=/path/to/file
Одна из удобных функций это подмена полученного IP адреса своим. Например подменим 1.2.3.4. адресом 5.6.7.8
Подменить можно и целую подсеть. Подменим 1.2.3.0/24 на 5.6.7.0/24.
alias=1.2.3.0,5.6.7.0,255.255.255.0
Для указания статической привязки адресов DHCP указываем MAC-адрес хоста и IP-адрес который будем ему выдавать
dhcp-host=00:50:B6:5B:CA:6A,192.168.0.7
Или ip-адрес и имя хоста
dhcp-host=00:50:B6:5B:CA:6A,server,192.168.0.7,60m
Лимит на аренду ip-адреса в секундах (по-умолчанию 150)
dhcp-lease-max=3600
Чтобы иметь представление кто, когда и какой адрес получил указываем файл для хранения информации об аренде адресов
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
. После редактирования конфигурационного файла обязательно перезагружаем сервис dnsmasq иначе результатов не будет до перезагрузки.
$ service dnsmasq restart
На этом все. На самом деле описал только малую толику всего того что можно наворотить. И в большинстве случаев рассмотренных первых двух вариантов достаточно для нормальной работы, а дальше уже больше тюнинг. Сейчас есть более продвинутые варианты, но этот поддерживает любая Linux система независимо от версии или года или железа.
Всё что понаписано выше проверено на Ubuntu Server 18/20 и работает по сей день.
Блог про Linux, Bash и другие информационные технологии
Установка
Обычно dnsmasq устанавливается на машину, выполняющую роль сетевого шлюза, в небольших сетях обычно именно на нем работают сервисы DHCP и DNS. Поскольку dnsmasq присутствует в репозиториях многих дистрибутивов, его можно установить при помощи менеджера пакетов:
После этого можно приступать к настройке.
Настройка dnsmasq как DHCP
Эта строка не обязательна, она нужна в том случае, если вы хотите, чтобы хосты, получающие адреса по DHCP, имели FQDN-имя, то есть полное имя, включающее имя домена.
Сетевой интерфейс, на котором будет работать сервис. Обычно основной интерфейс eth0 подключен к провайдеру, поэтому его крайне нежелательно указывать в качестве интерфейса для работы сервиса.
Интервал выдаваемых адресов и время аренды адресов (в данном случае 24 часа).
Резервация IP-адреса по MAC-адресу, чтобы устройство с указанным MAC-адресом всегда получало указанный IP-адрес.
Этих опций в небольшой офисной или домашней сети обычно достаточно.
Список всех опций DHCP можно посмотреть на странице IANA (Internet Assigned Numbers Authority).
После задания настроек надо рестартовать сервис:
Теперь можно задавать настройки на компьютерах в сети на автоматическое получение адресов по DHCP.
Настройка dnsmasq как DNS
Для определенной подсети можно указать отдельное имя домена:
И точно так же можно указать имя домена для интервала адресов:
Аналогично указывается сервер для обратной зоны:
В конфигурационном файле также можно указать соответствие имени IP-адресу.
Запись типа A в прямой зоне DNS (сопоставляющей IP-адрес запрошенному имени):
Запись типа CNAME:
Эта запись создает алиас для локального имени sambaserver, чтобы к нему можно было обращаться по более короткому имени smb.
По умолчанию dnsmasq использует файл /etc/hosts для сопоставления имен хостов IP-адресам, но это тоже можно изменить. Если вы не хотите использовать /etc/hosts, вы можете указать это при помощи опции
Если же вы хотите использовать совместно с /etc/hosts еще один файл аналогичной структуры, для этого есть опция
Кроме задания собственных записей DNS можно изменять информацию, получаемую от внешних DNS-серверов путем подмены полученного IP-адреса. Для замены одного адреса:
Если при запросе доменного имени от внешнего DNS-сервера мы получим IP-адрес 1.2.3.4, то мы подменим его на адрес 5.6.7.8. Можно осуществлять подмену целыми подсетями:
Такая запись подменит любой адрес из подсети 1.2.3.0/24 на адрес из подсети 5.6.7.0/24. Если же вам необходимо подменять определенный интервал адресов, то такая возможность тоже есть:
Эта запись подменит адреса из интервала 10.0.0.10-10.0.0.40 на адреса 192.168.0.10-192.168.0.40
Для того, чтобы обращения к DNS шли именно на dnsmasq на том же сервере, где он сам работает, необходимо указать первой записью в /etc/resolv.conf следующую строку:
Сам dnsmasq будет игнорировать эту запись, поскольку предполагает, что эта запись обозначает его собственный сервис, он начинает использование записей с указанием серверов имен со следующей записи, в которой указывается уже внешний DNS-сервер.
Во многих системах /etc/resolv.conf генерируется автоматически при получении адреса от провайдера по DHCP, поэтому если просто записать эту строчку руками, при переподключении основного сетевого интерфейса файл будет перезаписан и эта строка исчезнет. Этого можно избежать, если раскомментировать в файле /etc/dhcp/dhclient.conf (или /etc/dhcp3/dhclient.conf, в зависимости от системы) строчку
И еще одна опция, которая может вам пригодиться, если вы хотите использовать свой список DNS-серверов:
Файл, который указывается в этой опции, должен иметь такую же структуру, как и /etc/resolv.conf. При наличии этой опции будет использован указанный файл вместо /etc/resolv.conf. И таких записей может быть больше одной.
А если необходимо просто указать несколько DNS-серверов, на которые будут форвардиться запросы, это можно сделать при помощи записи нескольких строчек с опцией server:
Вот, в общем, и всё. И не забывайте после изменения настроек рестартовать dnsmasq командой
Настройка локальных DNS-сервер с помощью Dnsmasq в Ubuntu 20.04
Поэтому в этой настройке мы будем настраивать Dnsmasq в качестве нашего локального кэширующего DNS-сервера для ускорения до локального разрешения DNS.
Запустить обновление системы
Обновите кеш вашего системного пакета;
Установите Dnsmasq в Ubuntu 20.04
Dnsmasq доступен в репозиториях Ubuntu 20.04 Universe. Однако перед установкой dnsmasq в Ubuntu 20.04 отключите службу с разрешением Systemd ( системная служба, которая обеспечивает разрешение сетевых имен для локальных приложений ).
Удалите файл resolv.conf по умолчанию и создайте новый с данными вашего настраиваемого DNS-сервера, чтобы вы могли выполнить установку.
Как только это будет сделано, Dnsmasq можно будет установить, выполнив команду ниже;
Это устанавливает и запускает и позволяет службе Dnsmasq запускаться при загрузке системы.
Настройте локальный DNS-сервер с помощью Dnsmasq в Ubuntu 20.04
Прежде всего, создайте копию файла конфигурации;
Затем откройте файл конфигурации для редактирования;
Файл хорошо прокомментирован, и все параметры конфигурации говорят сами за себя.
Для начала установите порт, на котором Dnsmasq будет прослушивать DNS-запросы. По умолчанию это порт 53 UDP. Вы также можете явно указать порт с помощью port опции.
Отключить пересылку имен без точки или доменной части;
Отключить пересылку адресов в немаршрутизируемых адресных пространствах;
Определите интерфейс (например interface=enp0s8 ) или IP-адрес (например, listen-address=192.168.x.x ), на котором Dnsmasq может прослушивать запросы DNS. Обычно по умолчанию используется адрес обратной связи. В этой настройке мы устанавливаем Dnsmasq для ответа как на внутренние, так и на внешние запросы DNS через петлевой и не петлевой интерфейс IP.
Соответственно замените IP-адрес интерфейса.
Включите Dnsmasq для автоматического добавления доменной части к простым именам;
Задайте домен для добавления dnsmasq к простым именам;
Отрегулируйте размер кешированных доменных имен. По умолчанию это 150 .
Приведенных выше параметров конфигурации достаточно для базового локального кэширующего DNS-сервера с использованием Dnsmasq.
Без строк комментариев вот как выглядит наш конфигурационный файл Dnsmasq;
Сохраните и выйдите из файла конфигурации после внесения изменений.
Добавьте IP-адрес DNS-сервера Dnsmasq в файл / etc / hosts
Затем добавьте IP-адрес Dnsmasq в качестве основного DNS-сервера в /etc/resolv.conf .
/etc/resolv.conf Теперь выглядит следующим образом ;
Добавить локальные записи DNS на сервер Dnsmasq
Добавьте локальные записи DNS в /etc/hosts файл сервера Dnsmasq .
Сделайте то же самое для других ваших локальных доменных имен.
Перезапустите Dnsmasq
Запустите проверку конфигурации Dnsmasq;
Подтверждение порта 53;
Обратите внимание, что dnsmasq привязывается к подстановочному адресу, даже если он прослушивает только некоторые интерфейсы. Это имеет то преимущество, что работает, даже когда интерфейсы приходят и уходят и меняют адрес.
Откройте порт DNS на UFW
Если UFW включен, откройте 53 порт DNS, UDP.
Соответственно обновите исходную сеть.
Проверить разрешение DNS
Разрешение локального домена;
Разрешение внешнего DNS;
Настройка DNS-сервера на удаленных клиентах
Теперь, когда Dnsmasq готов отправлять как локальные, так и внешние запросы DNS через локальный DNS-сервер, обновите запись DNS для клиентов в /etc/resolv.conf.
Соответственно замените IP-адрес Dnsmasq.
Выполнять локальные запросы DNS;
Теперь давайте рассчитаем время DNS-запросов с помощью утилиты детализации . Чтобы использовать этот инструмент, вам необходимо установить ldns-utils пакет в CentOS или ldnsutils пакет в Ubuntu. Предполагая, что пакеты установлены, используйте drill утилиту для проверки кэширования DNS;
Первый запуск запроса;
Ура !! теперь Dnsmasq настроен и работает локальный кэширующий DNS-сервер. Это знаменует конец нашего руководства по установке и настройке локального DNS-сервера с помощью Dnsmasq в Ubuntu 20.04.
Небольшая инструкция по установке и настройке кеширующего DNS, DHCP и TFTP в сервере Dnsmasq.
Dnsmasq это легкий и быстроконфигурируемый DNS , DHCP и TFTP сервер, предназначенный для обеспечения доменными именами и связанными с ними сервисами небольшие сети. Может обеспечивать именами локальные машины, которые не имеют глобальных DNS-записей. DHCP сервер интегрирован с DNS сервером и даёт машинам с IP-адресом доменное имя, сконфигурированное раннее в конфигурационном файле. Поддерживает привязку IP-адреса к компьютеру или автоматическую настройку IP-адресов из заданного диапазона и BOOTP для сетевой загрузки бездисковых машин.
Устанавливаем dnsmasq в Debian выполнив команду:
Устанавливаем dnsmasq в CentOS выполнив команду:
Устанавливаем dnsmasq в OpenWRT выполнив команду:
Ниже находится конфигурационный файл с коментариями и примерами по настройке для 3 локальных сетей, указанием внутренних DNS серверов и указанием как отдельного TFTP сервера, так и настройке встроенного TFTP сервера в DNSMASQ.
Данный конфигурационный файл не претендует на полный обзор всех параметров сервера, но претендует на полноценную работоспособность в текущей конфигурации:
Если Вы настроили встроенный TFTP сервер в dnsmasq, для его проверки создадим файл в папке сервера и скачаем его предварительно установив tftp клиент.
Устанавливаем tftp клиент выполнив команду:
Создадим тестовый файл в текстом 777 в папку tftp сервера выполнив команду:
Скачиваем созданный файл для проверки работоспособности tftp сервера выполнив команду подставив IP своего dnsmasq сервера:
Проверяем, что скачан тот файл, что мы ранее создали выполнив команду:
Сервисы настроенный в dnsmasq сервере работают как и положено, задача выполнена.
Сделаем небольшой перерыв и посмотрим полезный видео ролик с подробностями о DDOSS:
Читайте также: