Как установить и настроить собственный DNS сервер на своем VPS / VDS сервере с Ubuntu

2024-07-19 10:44:09


В этой статье мы опишем настройку установку и настройку своего собственного DNS сервера, используя приложение для BIND9. Допустим у нас есть домен my-some-domain.ru и 2 сервера с IP-адресами 217.28.222.130 и 217.28.222.131. На оба этих сервера мы установим и настроим приложение bind9.

Далее мы создадим DNS записи ns1.my-some-domain.ru и ns2.my-some-domain.ru и привяжем их к нашим ip адресам в панели регистратора доменных имен.

Подключимся к нашему первому серверу 217.28.222.130 и установим и настроим Bind9.

  1. Установите BIND9:

    Если у вас не установлен BIND9, установите его. Для Ubuntu/Debian это можно сделать с помощью команды:

    sudo apt-get update
    sudo apt-get install bind9 bind9utils bind9-doc
    
  2. Настройте файл конфигурации BIND9:

    Откройте файл конфигурации BIND9 с помощью любого текстового редактора:

    sudo nano /etc/bind/named.conf.local
    

    Добавьте следующие записи:

    zone "my-some-domain.ru" {
        type master;
        file "/etc/bind/db.my-some-domain.ru";
        allow-transfer { 217.28.222.131; };
    };
    

    Параметр "type master" говорит о том, что этот DNS сервер будет ведущим (основным). То есть именно на него мы будем добавлять записи. А все подчиненные DNS сервера будут копировать настройки с него в случае их изменений.  В параметры allow-transfer укажем ip адрес нашего второго DNS сервера, который будет являться ведомым (slave). 

  3. Создайте файл зоны:

    Создайте файл зоны для вашего домена:

    sudo cp /etc/bind/db.local /etc/bind/db.my-some-domain.ru

    Откройте файл и измените соответствующие строки на:

    ;
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @       IN      SOA     ns1.my-some-domain.ru. admin.my-some-domain.ru. (
                               3         ; Serial
                          604800         ; Refresh
                           86400         ; Retry
                         2419200         ; Expire
                          604800 )       ; Negative Cache TTL
    ;
    @       IN      NS      ns1.my-some-domain.ru.
    @       IN      NS      ns2.my-some-domain.ru.
    @       IN      A       217.28.222.130
    ns1     IN      A       217.28.222.130
    ns2     IN      A       217.28.222.131  ; Указываем IP адрес второго DNS сервера
    www     IN      A       217.28.222.130
    

    Файлы своего сайта я разместил на том же сервере, поэтому сразу добавил A запись с тем же ip адресом. Сохраните и закройте файл.

  4. Проверьте конфигурацию:

    Проверьте конфигурацию BIND9 на наличие синтаксических ошибок:

    sudo named-checkconf
    

    Если вы видите ошибки, исправьте их и повторите команду.

  5. Если вы используете firewall - добавьте правило:
    sudo ufw allow Bind9
  6. Перезапустите BIND9:

    Перезапустите BIND9 для применения изменений:

    sudo service bind9 restart
    
  7. Проверьте зону:

    Проверьте, что зона была создана правильно:

    sudo named-checkzone my-some-domain.ru /etc/bind/db.my-some-domain.ru
    

    Если вы видите ошибки, исправьте их и повторите команду.

  8. Теперь нужно настроить второй сервер (slave). Подключаемся к серверу 217.28.222.131, производим установку bind9, как описано в шаге 1. Затем настраиваем его конфигурацию, но в отличии от первого сервера - делаем его slave:

    zone "my-some-domain.ru" {
        type slave;
        file "/var/lib/bind/slaves/db.my-some-domain.ru";
        masters { 217.28.222.130; };
    };
    

    Сам файл создавать не надо, но нужно создать папку slaves по указанному пути и дать ей права. Для этого выполним команды:

    
    sudo mkdir /var/lib/bind/slaves/
    sudo chmod -R g+w /var/lib/bind/slaves/
    

    После этого перезагружаем bind9 командой:

    sudo service bind9 restart

    Заходим в папку /var/lib/bind/slaves/ и убеждаемся, что файл с настройками зоны для домена появился и его содержимое совпадает с аналогичным файлом на master сервере. Еще рекомендую выполнить команду:

    sudo service bind9 status

    После выполнения команды отобразятся логи сервиса - следует убедиться, что в них нет ошибок.

  9. Проверьте работоспособность DNS:

    Убедитесь, что ваш DNS сервер работает правильно, используя nslookup или dig:

    dig @217.28.222.130 my-some-domain.ru
    

    Вы должны увидеть IP-адрес вашего сайта в ответе.

  10. Теперь заходим в панель управления регистратора доменных имен и привязываем наши ns1 и ns2 сабдомены к ip адресам наших DNS серверов.

    Привязка ns записей к своему собственному DNS серверу

    После чего, спустя некоторое время наш сайт будет доступен (если у нас настроен веб сервер).