Dns кэширование. Делаем свой локальный DNS (PDNSD), с блэкджеком и быстрее Google Public DNS. Итеративный или рекурсивный запрос

Иногда для решения какой-либо задачи необходимо открыть терминал и выполнить команды от суперпользователя (sudo или su), называемый также ROOT. Хотя некоторые из них можно осуществить с помощью графического интерфейса.

Для чего в Unix системах нужен и используется Root, вы можете узнать из , а мы далее будем обсуждать, как применяется sudo или su в Linux системах.

Предположим, что нужно выполнить нестандартную задачу, где графические инструменты нам не помогут. К тому же командная строка является очень гибким инструментом, здесь можно увидеть вывод команд и понять, что происходит не так как нужно. А самое главное, команды в терминале являются стандартными для всех дистрибутивов Linux.

Итак, существует два основных способа получить права суперпользователя (Root) это - sudo или su

Команда sudo используется в Debian - подобных системах или более популярных Ubuntu, «su» используется почти во всех остальных дистрибутивах Linux.

Ввод sudo в операционной системе Ubuntu требует ввода пароля Root и далее после успешного ввода, дает права суперпользователя на время выполнения одной лишь команды. Перед всеми последующими командами, которые требуют прав Root в Debian - подобных системах, необходимо снова вводить «sudo». А в остальных дистрибутивах Linux, где используется команда «su», предоставляет полный доступ Root, после ввода пароля, пока вы не введете «logout» или не закроете терминал.

В Debian - подобных (Ubuntu) системах есть одна хитрость, которая может предоставить полный доступ к Root, пока вы не закроете терминал. Это нужно в том случае если вы будете выполнять много команд от имени Root, и вам не придется перед каждой командой вводить «sudo». Для этого скомандуйте:

Например, нам необходимо найти всех имеющихся пользователей в системе, увидеть их каталоги и присвоить права нужного каталога одного пользователя другому. Для этого если бы я использовал Ubuntu, то команда в терминале была бы следующей:

Sudo du -sch /home/*

После этого последовал бы пароль от Root:

16K /home/lost+found 27G /home/pavel 34G /home/pavelubuntu 50G /home/pavelzen 110G итого

Я знаю, что я являюсь пользователем каталога /home/pavelzen , но мне необходимо еще стать и владельцем каталога /home/pavelubuntu. Для этого мне вновь необходимо перед командой ввести «sudo».

А для других систем: сначала я скомандовал бы

пароль, а потом

Du -sch /home/*

Chown -R pavelzen: /home/pavelubuntu

Вот так в системах Linux проявляются терминалы и суперпользователи.

Выпуск WordPress 5.3 улучшает и расширяет представленный в WordPress 5.0 редактор блоков новым блоком, более интуитивным взаимодействием и улучшенной доступностью. Новые функции в редакторе […]

После девяти месяцев разработки доступен мультимедиа-пакет FFmpeg 4.2, включающий набор приложений и коллекцию библиотек для операций над различными мультимедиа-форматами (запись, преобразование и […]

  • Новые функции в Linux Mint 19.2 Cinnamon

    Linux Mint 19.2 является выпуском с долгосрочной поддержкой, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и содержит доработки и множество новых […]

  • Вышел дистрибутив Linux Mint 19.2

    Представлен релиз дистрибутива Linux Mint 19.2, второго обновления ветки Linux Mint 19.x, формируемой на пакетной базе Ubuntu 18.04 LTS и поддерживаемой до 2023 года. Дистрибутив полностью совместим […]

  • Доступны новые сервисные релизы BIND, которые содержат исправления ошибок и улучшения функций. Новые выпуски могут быть скачано со страницы загрузок на сайте разработчика: […]

    Exim – агент передачи сообщений (MTA), разработанный в Кембриджском университете для использования в системах Unix, подключенных к Интернету. Он находится в свободном доступе в соответствии с […]

    После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по […]

  • В WordPress 5.1.1 устранена уязвимость, позволяющая получить контроль над сайтом
  • Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола ACME (Automatic Certificate Management Environment) […]

    Некоммерческий удостоверяющий центр Let’s Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, подвёл итоги прошедшего года и рассказал о планах на 2019 год. […]

  • Вышла новая версия Libreoffice – Libreoffice 6.2
  • Для ускорения просмотра веб страниц операционная система Windows кэширует ответы DNS серверов. Сразу после прихода ответа на определение числового по с сервера DNS, Windows автоматически помещает этот адрес в локальное хранилище. Когда браузер запрашивает адрес по URL, Windows вначале ищет его в хранилище, и, если находит его, то сразу же возвращает результат, не обращаясь к DNS серверам интернет провайдера. Локальный кэш увеличивает скорость работы и экономит трафик.

    Очистка локального DNS кэша

    Если при хранении адреса в локальном хранилище информация будет повреждена или изменится IP-адрес, браузер не сможет открыть сайт. Подобное случается не так часто. К счастью, существует способ очистить локальный кэш для мгновенного решения возникшей проблемы.

    В ОС Windows имеется инструмент ipconfig , у которого имеется опция /flushdns для очистки всех закэшированных записей. Если требуется очистить локальный кэш, то в окне командной строки (Пуск Программы (Все программы) — Стандартные Командная строка ) следует ввести команду ipconfig /flushdns и нажать клавишу Enter.

    Для просмотра всех записей DNS в локальном хранилище можно воспользоваться опцией /displaydns команды ipconfig . Для этого в окне командной строки необходимо ввести команду ipconfig / displaydns и нажать клавишу Enter. В окне появятся все записи закэшированных ответов DNS.

    Настройка времени хранения кэша

    Обычно Windows хранит адреса не более 86400 секунд (1 сутки), но время хранения можно ограничить другим пределом. Для этого необходимо открыть редактор реестра (в командной строке ввести команду regedit и нажать Enter). В левой области редактора имеется дерево ключей реестра, которое похоже на папки жесткого диска. В этом дереве нажимая на соответствующие иконки раскрытия папок (знак плюс) следует открыть путь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters , после чего в этом дереве установить курсор на папку Parameters . В правой области редактора реестра появится содержимое данного ключа (папки).

    Значение DWORD параметра MaxCacheTtl указывает ограничения времени хранения ответов в секундах. Его можно изменить на любое другое. Если параметра MaxCacheTtl нет, значит установлено стандартный предел равный 86400 секундам. Для его изменения следует создать параметр MaxCacheTtl типа DWORD со значением равным требуемому пределу. Параметр MaxCacheTtl ограничивает только время хранения положительных ответов, т. е. когда удалось определить ip-адрес по доменному имени.

    Если DNS сервер провайдера вернул отрицательный ответ (не смог определить адрес), он тоже сохраняется в локальном хранилище. Обычно такой ответ хранится на протяжении 15 минут. Это значит, что если во время посещения сайта, не удалось определить его ip-адрес, сайт будет невозможно посетить в течении 15 минут, даже, если он станет доступен в течении этого времени. Чтобы этого избежать, следует уменьшить время хранения отрицательных ответов или вовсе отключить их хранения. Чтобы задать время хранения следует скорректировать (или создать, если отсутствует) DWORD параметр MaxNegativeCacheTtl , который ограничивает предельное время хранения отрицательных ответов. Для отключения их хранения достаточно выставить нулевое время хранения.

    Временное отключение кэширования DNS ответов

    Если требуется на время отключить кэширование адресов в локальном хранилище, необходимо в командной строке ввести команду net stop dnscache (или sc stop dnscache ) и нажать Enter. Для обратного включения следует в командной строке ввести команду net start dnscache (или sc start dnscache) и нажать Enter, либо перезагрузить компьютер.

    Назначение DNS это перевод доменных имен, легко запоминаемых человеком в IP адреса которые понимают компьютеры, этот процесс называется-Разрешение имен. Что нам даст установка собственного кеширующего DNS сервера? Это немного ускорит отклик сайтов + Linux не очень хорошо воспринимает имена NetBios, а ведь иногда приходится находить компьютеры или принтеры внутри локальной сети, а хочется это делать по именам.

    Запоминать IP адреса- не удобно, а постоянно лазить к журнал работы DHCP сервера- тоже не наш метод. Вот для таких случаев и нужен DNS в локальной сети. Сама установка пакета bind9 не отличается сложностью, затыки, обычно возникают на стадии его конфигурирования, т.к. после легко читаемых конфигурационных файлов системы, на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С. Т.к. сервер будет работать внутри локальной сети, то не имеет смысла переносить его в chroot окружение и вся настройка занимает совсем немного времени. На этом, лирическую часть, можно завершить, переходим к установке и настройке.

    Установим DNS сервер Bind9:

    # apt - get install bind9

    После завершения, закачки и установки, нам необходимо отредактировать его конфигурационный файл:

    # vim / etc / bind / named . conf . options

    Находим секцию, она находится в самом начале конфигурационного файла, кроме нее там больше ничего нет…

    options { directory "/var/cache/bind" ; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0"s placeholder. // forwarders { // 0.0.0.0; // }; auth - nxdomain no ; # conform to RFC1035 listen - on - v6 { any ; }; };

    Секция forwarders, отвечает за то, куда будет передаваться DNS запрос на разрешение имени, в случае если его нет в собственной базе. Последнее время меня совсем не радует, работа этих серверов у провайдера по этому можно подключить сторонние например гугловские, запомнить IP очень легко 8.8.8.8, на его примере я и буду вести настройку, но никто не мешает использовать, те что вам нравятся больше.

    Редактируем секцию, для начала с нее нужно снять комментарии и добавить сторонние DNS, если есть необходимость добавить несколько серверов, например на тот случай если сервер google не выдержит ваших запросов и поломается:), то IP других серверов можно написать в столбик, тогда можно добиться более значительной отказоустойчивости.

    forwarders { 8.8.8.8 ; 193.58.251.251 ; //Российская служба DNS -SkyDNS };

    В эту секцию лучше вписать IP того сервера который у вас указан в файле /etc/resolv.conf или вписать туда в секциюnameserver этот IP. Сохраняем изменения и выходим. Перезапускаем сервер и проверяем. Набираем в командной строке nslookup mail.ru
    Должно выдать:

    Non - authoritative answer : Name : mail . ru Addresses : 94.100.191.202

    Это говорит о том, что наш сервер не является, главным в обслуживании этой зоны (mail.ru), но запросы добавил в кеш!
    Теперь нужно создать ДНС зону для нашей сети чтобы машины могли находить различные сетевые сервисы - могут быть, например, сетевые принтеры, они могут быть как самостоятельными так и расшаренными на других рабочих станциях.
    Нашу зону можно назвать orgname –т.е. название организации.
    Первым делом создаем зону, для этого отредактируем named.conf.local

    # vim / etc / bind / named . conf . local

    и добавим в него следующее:

    zone "orgname" { type master ; file "/etc/bind/db.orgname" ; };

    Сохраняем и выходим
    Теперь нам необходимо создать файл настройки зоны

    # vim / etc / bind / db . orgname

    и вставляем в него следующее:
    (Прошу отнестись внимательно к синтаксису конфигурационного файла, даже точки имеют значение)

    @ IN SOA orgname . root . orgname . (20101015 4h ; время обновления - 4 часа 1h ; повтор каждый час 1w ; как долго хранить информацию - 1 неделю 1d ) ; TTL (время жизни ) записи - 1 день @ IN NS orgname . ; имя сервера имен @ IN A 192.168.10.1 ; A - запись - IP адрес нашего ДНС сервера который обслуживает эту зону, @ означает что это корневая зона. * IN CNAME @ printer IN A 192.168.10.25 ; Можно создать ДНС запись сетевого принтера который находится по адресу 192.168.10.25

    Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи:
    1) Зарезервировать IP адрес на DHCP сервере, о том, как это сделать, можно прочитать в статье- Настройка DHCP сервера
    2) Создать DNS зону для этого IP, вида devicename IN A XXX.XXX.XXX.XXX. Где: devicename-сетевое имя устройства; XXX.XXX.XXX.XXX-его IP адрес который зарезервирован на DHCP сервере.

    теперь нам необходимо отредактировать файл resolv.conf

    # vim / etc / resolv . conf

    и вписать туда:

    nameserver 127.0.0.1

    все что там было можно закоментировать поставив #
    перезапускам сервер

    # reboot

    Сделано это для того чтобы сервер искал все в собственной базе, а уже потом BIND будет перенаправлять запросы к серверу 8.8.8.8 IP которого вписан в директиве forwarders .
    Теперь можно проверять работоспособность:
    Если тестирование происходит из под Windows:

    ping devicename . orgname

    Если тестируем из под Linux:

    ping devicename . orgname - c 4

    Должны пойти пинги на тот IP который вы указали вместо XXX.XXX.XXX.XXX

    Можно так же проверять скорость обработки запросов коммандой dig

    # dig @127.0.0.1 tut.by ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 tut.by ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63893 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 13, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;tut.by. IN A ;; ANSWER SECTION: tut.by. 103 IN A 178.172.160.5 tut.by. 103 IN A 178.172.160.4 tut.by. 103 IN A 178.172.160.2 tut.by. 103 IN A 178.172.160.3 ;; AUTHORITY SECTION: . 6029 IN NS i.root-servers.net. . 6029 IN NS b.root-servers.net. . 6029 IN NS m.root-servers.net. . 6029 IN NS k.root-servers.net. . 6029 IN NS e.root-servers.net. . 6029 IN NS d.root-servers.net. . 6029 IN NS j.root-servers.net. . 6029 IN NS g.root-servers.net. . 6029 IN NS l.root-servers.net. . 6029 IN NS f.root-servers.net. . 6029 IN NS h.root-servers.net. . 6029 IN NS a.root-servers.net. . 6029 IN NS c.root-servers.net. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Mar 22 16:46:24 MSK 2016 ;; MSG SIZE rcvd: 310

    artem

    30.10.2013

    10379

    Настройка кэширующего DNS-сервера для решения проблемы зависания chan_sip.so.

    SIP-модуль Asterisk синхронно разрешает DNS-имена, если DNS-сервер, по каким-либо причинам, перестанет отвечать на запросы, код SIP-модуля прекращает выполнение до наступления таймаута DNS-запроса. Результатом этого является неработаспособность всех клиентов и провайдеров, подключенных по SIP, клиенты не могут регистрироваться и совершать вызовы.
    Способы решения проблемы:
    1. Не указывать DNS-имена в параметре SIP-пиров ‘host’ и в строках SIP-регистраций, указывать только IP-адреса (позволяет полностью исключить возможность возникновения проблемы, но невозможно с некоторыми провайдерами).
    2. Настроить кэширующий DNS-сервер на хосте Asterisk.

    В данной статье будет описан способ решения проблемы с помощью DNS-сервера BIND (инструкция верна для CentOS 5-6)

    Настройка DNS-сервера BIND

    1. Устанавливаем BIND, копируем шаблоны настроек и файлы стандартных зон

    yum install bind bind-chroot
    cp /etc/localtime /var/named/chroot/etc

    cp /usr/share/doc/bind-*/sample/etc/named.root.hints /var/named/chroot/etc
    cp /usr/share/doc/bind-*/sample/etc/named.rfc1912.zones /var/named/chroot/etc
    cp /usr/share/doc/bind-*/sample/etc/named.conf /var/named/chroot/etc

    cp /usr/share/bind-*/sample/var/named/localdomain.zone /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/localhost.zone /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/named.broadcast /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/named.ip6.local /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/named.local /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/named.root /var/named/chroot/var/named
    cp /usr/share/bind-*/sample/var/named/named.zero /var/named/chroot/var/named

    2. Правим конфиг BIND /var/named/chroot/etc/named.conf

    В конфиг нужно внести следующие правки:

    > Добавить в раздел options строчку:

    Можно указать свои DNS-серверы. Если не указывать эту строчку, то BIND будет опрашивать корневые DNS-серверы, что медленнее

    > Разрешить рекурсивные запросы для view-зоны ‘localhost_resolver’ (заменить ‘recursion no’ на ‘recursion yes’, если этого не сделать, то сам хост не сможет делать рекурсивные запросы через DNS-сервер). Рекурсивные запросы и запросы кэша для остальных зон можно отключить

    > Закомментировать или удалить разделы, отвечающие за настройку внутренних зон и DDNS, т.к. их просто не будет

    Листинг полученного конфига:

    //
    // Sample named.conf BIND DNS server ‘named’ configuration file
    // for the Red Hat BIND distribution.
    // See the BIND Administrator’s Reference Manual (ARM) for details, in:
    // file:///usr/share/doc/bind-*/arm/Bv9ARM.html
    // Also see the BIND Configuration GUI: /usr/bin/system-config-bind and
    // its manual.
    options
    {
    // Those options should be used carefully because they disable port
    // randomization
    // query-source port 53;
    // query-source-v6 port 53;

    // Put files that named is allowed to write in the data/ directory:
    directory “/var/named”; // the default
    dump-file “data/cache_dump.db”;
    statistics-file “data/named_stats.txt”;
    memstatistics-file “data/named_mem_stats.txt”;
    max-cache-size 2097152;

    forwarders { 8.8.8.8; 8.8.4.4; };
    };
    //logging
    //{
    /* If you want to enable debugging, eg. using the ‘rndc trace’ command,
    * named will try to write the ‘named.run’ file in the $directory (/var/named).
    * By default, SELinux policy does not allow named to modify the /var/named directory,
    * so put the default debug log file in data/ :
    */
    // channel default_debug {
    // file “data/named.run”;
    // severity dynamic;
    // };
    //};
    // All BIND 9 zones are in a “view”, which allow different zones to be served
    // to different types of client addresses, and for options to be set for groups
    // of zones.
    // By default, if named.conf contains no “view” clauses, all zones are in the
    // “default” view, which matches all clients.
    // If named.conf contains any “view” clause, then all zones MUST be in a view;
    // so it is recommended to start off using views to avoid having to restructure
    // your configuration files in the future.
    view “localhost_resolver”
    {
    /* This view sets up named to be a localhost resolver (caching only nameserver).
    * If all you want is a caching-only nameserver, then you need only define this view:
    */
    match-clients { localhost; };
    match-destinations { localhost; };
    recursion yes;

    /* these are zones that contain definitions for all the localhost
    * names and addresses, as recommended in RFC1912 – these names should
    * ONLY be served to localhost clients:
    */
    include “/etc/named.rfc1912.zones”;
    };
    view “internal”
    {
    /* This view will contain zones you want to serve only to “internal” clients
    that connect via your directly attached LAN interfaces – “localnets” .
    */
    match-clients { localnets; };
    match-destinations { localnets; };
    recursion no;

    Allow-query-cache { none; };

    // all views must contain the root hints zone:
    include “/etc/named.root.hints”;

    // include “named.rfc1912.zones”;
    // you should not serve your rfc1912 names to non-localhost clients.

    // These are your “authoritative” internal zones, and would probably
    // also be included in the “localhost_resolver” view above:

    //zone “my.internal.zone” {
    // type master;
    // file “my.internal.zone.db”;
    //};
    //zone “my.slave.internal.zone” {
    // type slave;
    // file “slaves/my.slave.internal.zone.db”;
    // masters { /* put master nameserver IPs here */ 127.0.0.1; } ;
    // // put slave zones in the slaves/ directory so named can update them
    //};
    //zone “my.ddns.internal.zone” {
    // type master;
    // allow-update { key ddns_key; };
    // file “slaves/my.ddns.internal.zone.db”;
    // // put dynamically updateable zones in the slaves/ directory so named can update them
    //};
    };
    //key ddns_key
    //{
    // algorithm hmac-md5;
    // secret “use /usr/sbin/dns-keygen to generate TSIG keys”;
    //};
    view “external”
    {
    /* This view will contain zones you want to serve only to “external” clients
    * that have addresses that are not on your directly attached LAN interface subnets:
    */
    match-clients { any; };
    match-destinations { any; };

    recursion no;
    // you’d probably want to deny recursion to external clients, so you don’t
    // end up providing free DNS service to all takers

    allow-query-cache { none; };
    // Disable lookups for any cached data and root hints

    // all views must contain the root hints zone:
    include “/etc/named.root.hints”;

    // These are your “authoritative” external zones, and would probably
    // contain entries for just your web and mail servers:

    //zone “my.external.zone” {
    // type master;
    // file “my.external.zone.db”;
    //};
    };

    3. Запускаем BIND, включаем запуск при старте системы

    service named start

    Если в синтаксисе конфига допущены ошибки или каких-либо файлов не хватает, сообщение об ошибке будет выведено в консоль и записано в лог /var/log/messages