Настройка и администрирование Domain Name Server (DNS)

У меня на работе мы используем Linux как DNS-сервер. Этот раздел описывает настройку DNS таблиц и использование пакета BIND 8.x, стандартно поставляемого с Red Hat.

Note

Замечание: Red Hat 5.1 и младше использует BIND 4.x, который использовал немного другой формат файла конфигурации. BIND 8.x предлагает больше возможностей, чем BIND 4.x, а поскольку 4.x более не развивается, лучше обновить пакет BIND до последней версии. Просто установите пакет BIND RPM (см. раздел Использование Red Hat Package Manager (RPM) в главе 10), и преобразуйте ваш файл конфигурации в новый формат.

Преобразование выполнить просто! В каталоге с документацией, который является частью BIND (например, в `` /usr/doc/bind-8.1.2/'' для BIND версии 8.1.2), есть файл ``named-bootconf.pl'', который представляет собой скрипт на Perl. Если Perl у Вас установлен (замечание переводчика: если нет, поставьте: он ОЧЕНЬ пригодится), Вы можете использовать скрипт чтобы преобразовать ваш файл конфигурации. Чтобы сделать это, введите от имени root:


cd /usr/doc/bind-8.1.2 
./named-bootconf.pl < /etc/named.boot > /etc/named.conf
mv /etc/named.boot /etc/named.boot-obsolete

Вы должны теперь иметь файл ``/etc/named.conf'', который должен работать с BIND 8.x. Ваши таблицы DNS будут работать и с новой версией BIND, так как формат таблиц не изменился.

Конфигурация DNS под Linux включает следующие шаги:

  1. Для включения сервиса DNS, файл ``/etc/host.conf'' должен выглядеть следующим образом:

    
    # Lookup names via /etc/hosts first, then by DNS query
    order hosts, bind
    
    # We don't have machines with multiple addresses
    multi on
    
    # Check for IP address spoofing
    nospoof on
    
    # Warn us if someone attempts to spoof
    alert on
    
    

    Определение extra spoof чуть повысит производительность (хотя и незначительный), так что если Вы не беспокоитесь, можете отключить записи “nospool” и “alert”.

  2. Настройте как нужно файл `` /etc/hosts''. Обычно, он невелик, но для увеличения производительности можно добавить в него какие угодно адреса машин, чтобы избежать поиска их в таблицах DNS.

  3. Файл ``/etc/named.conf '' должен быть настроен, чтобы указывать на ваши DNS таблицы согласно примеру ниже.

    Note

    (Замечание: IP-адреса приведены здесь только в качестве примера и должны быть заменены на Ваши значения!):

    
    options {
      // DNS tables are located in the /var/named directory
      directory "/var/named";
    
      // Forward any unresolved requests to our ISP's name server
      // (this is an example IP address only -- do not use!)
      forwarders {
        123.12.40.17;
      };
    
      /*
       * If there is a firewall between you and nameservers you want
       * to talk to, you might need to uncomment the query-source
       * directive below.  Previous versions of BIND always asked
       * questions using port 53, but BIND 8.1 uses an unprivileged
       * port by default.
       */
      // query-source address * port 53;
    };
    
    // Enable caching and load root server info
    zone "named.root" {
      type hint;
      file "";
    };
    
    // All our DNS information is stored in /var/named/mydomain_name.db
    // (eg. if mydomain.name = foobar.com then use foobar_com.db)
    zone "mydomain.name" {
      type master;
      file "mydomain_name.db";
      allow-transfer { 123.12.41.40; };
    };
    
    // Reverse lookups for 123.12.41.*, .42.*, .43.*, .44.* class C's
    // (these are example Class C's only -- do not use!)
    zone "12.123.IN-ADDR.ARPA" {
      type master;
      file "123_12.rev";
      allow-transfer { 123.12.41.40; };
    };
    
    // Reverse lookups for 126.27.18.*, .19.*, .20.* class C's
    // (these are example Class C's only -- do not use!)
    zone "27.126.IN-ADDR.ARPA" {
      type master;
      file "126_27.rev";
      allow-transfer { 123.12.41.40; };
    };
    
    

    Tip

    Совет: Опцией allow-transfer мы ограничили область распространения зональных данных DNS указанным IP-адресом. В данном примере машина 123.12.41.40 (допустим, вторичный сервер DNS нашего домена) может запрашивать зональные данные. Если опция не задана, узнать о Ваших зональных данных DNS сможет любая машина в Internet, что часто используется spammers и IP spoofers, так что я советую ограничить область распространения вторичным DNS сервером или использовать loopback-адрес, ``127.0.0.1''.

  4. Теперь можно задать DNS таблицы в каталоге `` var/named/'' в соответствии с настройкой в файле ``/etc/named.conf''. Настройка файлов базы данных DNS в первый раз очень сложно, и выходит за рамки этого документа. Имеется несколько руководств, которые названы ниже. Я приведу несколько примеров:

    Типовой файл `` /var/named/mydomain_name.db'' прямой файл поисковой таблицы:

    
    ; This is the Start of Authority (SOA) record.  Contains contact
    ; & other information about the name server.  The serial number
    ; must be changed whenever the file is updated (to inform secondary
    ; servers that zone information has changed).
        @ IN SOA mydomain.name.  postmaster.mydomain.name. (
            19990811        ; Serial number
            3600            ; 1 hour refresh
            300             ; 5 minutes retry
            172800          ; 2 days expiry
            43200 )         ; 12 hours minimum
    
    ; List the name servers in use.  Unresolved (entries in other zones)
    ; will go to our ISP's name server isp.domain.name.com
            IN NS           mydomain.name.
            IN NS           isp.domain.name.com.
    
    ; This is the mail-exchanger.  You can list more than one (if
    ; applicable), with the integer field indicating priority (lowest
    ; being a higher priority)
            IN MX           mail.mydomain.name.
    
    ; Provides optional information on the machine type & operating system
    ; used for the server
            IN HINFO        Pentium/350     LINUX
    
    ; A list of machine names & addresses
        spock.mydomain.name.    IN A    123.12.41.40   ; OpenVMS Alpha
        mail.mydomain.name.     IN A    123.12.41.41   ; Linux (main server)
        kirk.mydomain.name.     IN A    123.12.41.42   ; Windows NT (blech!)
    
    ; Including any in our other class C's
        twixel.mydomain.name.   IN A    126.27.18.161  ; Linux test machine
        foxone.mydomain.name.   IN A    126.27.18.162  ; Linux devel. kernel
    
    ; Alias (canonical) names
        gopher      IN CNAME        mail.mydomain.name.
        ftp         IN CNAME        mail.mydomain.name.
        www         IN CNAME        mail.mydomain.name.
    
    

    Типовой файл `` /var/named/123_12.rev'' обратный файл поисковой таблицы:

    
    ; This is the Start of Authority record.  Same as in forward lookup table.
        @ IN SOA mydomain.name.  postmaster.mydomain.name. (
            19990811        ; Serial number
            3600            ; 1 hour refresh
            300             ; 5 minutes retry
            172800          ; 2 days expiry
            43200 )         ; 12 hours minimum
    
    ; Name servers listed as in forward lookup table
            IN NS           mail.mydomain.name.
            IN NS           isp.domain.name.com.
    
    ; A list of machine names & addresses, in reverse.  We are mapping
    ; more than one class C here, so we need to list the class B portion
    ; as well.
        40.41       IN PTR    spock.mydomain.name.
        41.41       IN PTR    mail.mydomain.name.
        42.41       IN PTR    kirk.mydomain.name.
    
    ; As you can see, we can map our other class C's as long as they are
    ; under the 123.12.* class B addresses
        24.42       IN PTR    tsingtao.mydomain.name.
        250.42      IN PTR    redstripe.mydomain.name.
        24.43       IN PTR    kirin.mydomain.name.
        66.44       IN PTR    sapporo.mydomain.name.
    
    ; No alias (canonical) names should be listed in the reverse lookup
    ; file (for obvious reasons).
    
    

    Любые другие обратные файлы поисковой таблицы, необходимые чтобы отображать адреса в различные классы B (типа 126.27. *) могут быть созданы, и будут очень похожи на данный файл, поскольку пример обращает файл поисковой таблицы выше.

  5. Теперь запустите демон named. Обычно он запускается из файла ``/etc/rc.d/init.d/named'' при загрузке системы. Вы также можете запускать и останавливать его ручками; командами ``named start'' и `` named stop'' соответственно.

  6. При каждом изменении таблиц DNS сервер должен быть перезапущен командой ``/etc/rc.d/init.d/named restart''. После перезапуска можно проверить изменения командой nslookup для запроса к машине, которая добавлена или изменена.

Более подробная информация по настройке DNS есть в ``DNS-HOWTO'' по адресу: http://metalab.unc.edu/Linux/HOWTO/DNS-HOWTO-5.html.