Домашнее задание 36

DNS - настройка и обслуживание

Для выполнение задания используется стенд https://github.com/erlong15/vagrant-bind

Корректировка Vagrantfile

В иходный Vagrantfile добавлена еще одна VM - Client2 с ip 192.168.50.20

  config.vm.define "client2" do |client2|
    client2.vm.network "private_network", ip: "192.168.50.20", virtualbox__intnet: "dns"
    client2.vm.hostname = "client2"
  end

Для ns02 добавлен еще один ip адрес 192.168.50.12

  config.vm.define "ns02" do |ns02|
    ns02.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "dns"
    ns02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "dns"
    ns02.vm.hostname = "ns02"
  end

Готовый Vagrantfile

Корректировка playbook.yml

Итак цели ДЗ следующие

Что нужно сделать?

  1. Взять стенд https://github.com/erlong15/vagrant-bind
  2. Добавить еще один сервер client2
  3. Завести в зоне dns.lab:
    1. имя web1 - смотрит на клиент1
    2. имя web2 - смотрит на клиент2
  4. Завести еще одну зону newdns.lab
  5. Завести в зоне newdns.lab запись www - смотрит на обоих клиентов
  6. Настроить split-dns
    1. клиент1 - видит обе зоны, но в зоне dns.lab только web1
    2. клиент2 видит только dns.lab

Пункты 1 и 2мы уже выполнили добавить новую VM в Vagratfile

Первое что сделаем, это отредактируем ссылки на репозитории, добавив в provisioning/playbook.yml следующие:

  - name: update centos repo
    shell: |
      sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/CentOS*
      sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/CentOS*
      sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/CentOS*

Для выполнения целей по ДЗ 3.1 и 3.2, отредактируем файл provisioning/named.dns.lab, добавив имена: web1 - смотрит на 192.168.50.15 (vm client) web2 - смотрит на 192.168.50.20 (vm client2)

$TTL 3600
$ORIGIN dns.lab.
@               IN      SOA     ns01.dns.lab. root.dns.lab. (
                            2711201407 ; serial
                            3600       ; refresh (1 hour)
                            600        ; retry (10 minutes)
                            86400      ; expire (1 day)
                            600        ; minimum (10 minutes)
                        )

                IN      NS      ns01.dns.lab.
                IN      NS      ns02.dns.lab.

; DNS Servers
ns01            IN      A       192.168.50.10
ns02            IN      A       192.168.50.11

;web1 & web2
web1            IN      A       192.168.50.15
web2            IN      A       192.168.50.20

Для выполнения целей по ДЗ 4 и 5 добавим в каталог provisioning/ кофигурационный файл named.newdns.lab, со следующим содержанием:

$TTL 3600
$ORIGIN newdns.lab.
@               IN      SOA     ns01.newdns.lab. root.newdns.lab. (
                            2711201407 ; serial
                            3600       ; refresh (1 hour)
                            600        ; retry (10 minutes)
                            86400      ; expire (1 day)
                            600        ; minimum (10 minutes)
                        )

                IN      NS      ns01.newdns.lab.
                IN      NS      ns02.newdns.lab.

; DNS Servers
ns01            IN      A       192.168.50.10
ns02            IN      A       192.168.50.11

;www
www            IN      A       192.168.50.15
www            IN      A       192.168.50.20

Так же изменим provisioning/master-named.conf, добавим туда путь до файла конфигурации новой зоны newdns.lab

    // lab's zone
    zone "newdns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.newdns.lab";
    };

Для выполнения целей по ДЗ 6.1 и 6.2 добавим в каталог provisioning/ еще один кофигурационный файл named.dns.lab.limit Со следующим содержимом:

$TTL 3600
$ORIGIN dns.lab.
@               IN      SOA     ns01.dns.lab. root.dns.lab. (
                            2711201407 ; serial
                            3600       ; refresh (1 hour)
                            600        ; retry (10 minutes)
                            86400      ; expire (1 day)
                            600        ; minimum (10 minutes)
                        )

                IN      NS      ns01.dns.lab.
                IN      NS      ns02.dns.lab.

; DNS Servers
ns01            IN      A       192.168.50.10
ns02            IN      A       192.168.50.11

;web1
web1            IN      A       192.168.50.15

Далее требуется изменить provisioning/master-named.conf и provisioning/slave-named.conf настроив access листы, для правильной работы split-dns

Добавим 2 ACL

acl "client" { 192.168.50.15; }; 
acl "client2" { 192.168.50.20; };
acl "slave" { 192.168.50.12; };
  • Для ACL client мы добавим разрешие смотреть полность в зону newdns.lab а так же в зону dns.lab которую мы определили в файле named.dns.lab.limit, тем самым client будет видить только web1/

  • Для ACL client2 мы добавим разрешие смотреть полность в зону dns.lab.

  • ACL slave нам нужен для того, что бы забрать парвильную зону named.dns.lab.limit

  • Для всех остальных, разрешим все

Итого конфигурационный файл provisioning/master-named.conf, примет следующий вид:

**provisioning/master-named.conf**. Нажмите, чтобы развернуть
options {

    // network 
    listen-on port 53 { 192.168.50.10; };
    listen-on-v6 port 53 { ::1; };

    // data
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";

    // server
    recursion yes;
    allow-query     { any; };
    allow-transfer { any; };
    
    // dnssec
    dnssec-enable yes;
    dnssec-validation yes;

    // others
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

// RNDC Control for client
key "rndc-key" {
    algorithm hmac-md5;
    secret "GrtiE9kz16GK+OKKU/qJvQ==";
};
controls {
        inet 192.168.50.10 allow { 192.168.50.15; } keys { "rndc-key"; }; 
};


// ZONE TRANSFER WITH TSIG
include "/etc/named.zonetransfer.key"; 
server 192.168.50.11 {
    keys { "zonetransfer.key"; };
};
server 192.168.50.12 {
    keys { "zonetransfer.key"; };
};

acl "client" { 192.168.50.15; }; 
acl "client2" { 192.168.50.20; };
acl "slave" { 192.168.50.12; };

view "client" {
    match-clients { "client"; "slave"; };
    zone "dns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.dns.lab.limit";
    };
    
    zone "newdns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.newdns.lab";
    };
};

view "client2" {
    match-clients { "client2"; };
    zone "dns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.dns.lab";
    };
    
};

view "any" {
    match-clients { "any"; };

    // root zone
    zone "." IN {
        type hint;
        file "named.ca";
    };

    // zones like localhost
    include "/etc/named.rfc1912.zones";
    // root's DNSKEY
    include "/etc/named.root.key";

    // lab's zone
    zone "dns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.dns.lab";
    };


    // lab's zone reverse
    zone "50.168.192.in-addr.arpa" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.dns.lab.rev";
    };

    // lab's ddns zone
    zone "ddns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        allow-update { key "zonetransfer.key"; };
        file "/etc/named/named.ddns.lab";
    };

    // newlab's zone
    zone "newdns.lab" {
        type master;
        allow-transfer { key "zonetransfer.key"; };
        file "/etc/named/named.newdns.lab";
    };

};

Конфигурационный файл provisioning/slave-named.conf, примет следующий вид:

**provisioning/slave-named.conf**. Нажмите, чтобы развернуть
options {

    // network 
    listen-on port 53 { 192.168.50.11; };
    listen-on-v6 port 53 { ::1; };

    // data
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";

    // server
    recursion yes;
    allow-query     { any; };
    allow-transfer { any; };
    
    // dnssec
    dnssec-enable yes;
    dnssec-validation yes;

    // others
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

// RNDC Control for client
key "rndc-key" {
    algorithm hmac-md5;
    secret "GrtiE9kz16GK+OKKU/qJvQ==";
};
controls {
        inet 192.168.50.11 allow { 192.168.50.15; } keys { "rndc-key"; };
};      


// ZONE TRANSFER WITH TSIG
include "/etc/named.zonetransfer.key"; 
server 192.168.50.10 {
    keys { "zonetransfer.key"; };
};


acl "client" { 192.168.50.15; }; 
acl "client2" { 192.168.50.20; };

view "client" {
    match-clients { "client"; };
    zone "dns.lab" {
        type slave;
        masters { 192.168.50.10; };
        transfer-source 192.168.50.12;
        file "/etc/named/named.dns.lab.limit";
    };

    zone "newdns.lab" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.newdns.lab";
    };

};


view "client2" {
    match-clients { "client2"; };
    zone "dns.lab" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.dns.lab";
    };
    
};

view "any" {
    match-clients { "any"; };
    // root zone
    zone "." IN {
        type hint;
        file "named.ca";
    };

    // zones like localhost
    include "/etc/named.rfc1912.zones";
    // root's DNSKEY
    include "/etc/named.root.key";

    // lab's zone
    zone "dns.lab" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.dns.lab";
    };

    // lab's zone reverse
    zone "50.168.192.in-addr.arpa" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.dns.lab.rev";
    };

    // lab's ddns zone
    zone "ddns.lab" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.ddns.lab";
    };

    // newlab's zone
    zone "newdns.lab" {
        type slave;
        masters { 192.168.50.10; };
        file "/etc/named/named.newdns.lab";
    };
};

Для правильной работы SELinux добавим в provisioning/playbook.yml для выполнения на ns01 и ns02

  - name: SELinux /etc/named
    file:
      path: /etc/named
      setype: named_zone_t
      recurse: yes

Проверка

Запускаем vagrant

alex@ubuntu-pc:~/Документы/36$ vagrant up 
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.

Bringing machine 'ns01' up with 'virtualbox' provider...
Bringing machine 'ns02' up with 'virtualbox' provider...
Bringing machine 'client' up with 'virtualbox' provider...
Bringing machine 'client2' up with 'virtualbox' provider...
==> ns01: Importing base box 'centos/7'...
==> ns01: Matching MAC address for NAT networking...
==> ns01: Checking if box 'centos/7' version '2004.01' is up to date...
==> ns01: Setting the name of the VM: 36_ns01_1774890326153_42178
==> ns01: Clearing any previously set network interfaces...
==> ns01: Preparing network interfaces based on configuration...
    ns01: Adapter 1: nat
    ns01: Adapter 2: intnet
==> ns01: Forwarding ports...
    ns01: 22 (guest) => 2222 (host) (adapter 1)
==> ns01: Running 'pre-boot' VM customizations...
==> ns01: Booting VM...
...

...
changed: [client2] => (item=bind-utils)
changed: [client2] => (item=ntp)

TASK [copy transferkey to all servers and the client] **************************
changed: [client2]

PLAY [ns01] ********************************************************************
skipping: no hosts matched

PLAY [ns02] ********************************************************************
skipping: no hosts matched

PLAY [client] ******************************************************************
skipping: no hosts matched

PLAY RECAP *********************************************************************
client2                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Подключаемся по ssh к VM client, и смотрим что будут отдавать DNS сервера на наши запросы

[vagrant@client ~]$ nslookup web1.dns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

Name:   web1.dns.lab
Address: 192.168.50.15

[vagrant@client ~]$ nslookup web2.dns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

** server can't find web2.dns.lab: NXDOMAIN

[vagrant@client ~]$ nslookup web1.dns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

Name:   web1.dns.lab
Address: 192.168.50.15

[vagrant@client ~]$ nslookup web2.dns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

** server can't find web2.dns.lab: NXDOMAIN

[vagrant@client ~]$ nslookup www.dns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

** server can't find www.dns.lab: NXDOMAIN

[vagrant@client ~]$ nslookup www.dns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

** server can't find www.dns.lab: NXDOMAIN

Как видим, оба сервера отдают для client именно то что и требуются по ДЗ

Подключаемся по ssh к VM client2, и смотрим что будут отдавать там DNS сервера

[vagrant@client2 ~]$ nslookup web1.dns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

Name:   web1.dns.lab
Address: 192.168.50.15

[vagrant@client2 ~]$ nslookup web1.dns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

Name:   web1.dns.lab
Address: 192.168.50.15

[vagrant@client2 ~]$ nslookup web2.dns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

Name:   web2.dns.lab
Address: 192.168.50.20

[vagrant@client2 ~]$ nslookup web2.dns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

Name:   web2.dns.lab
Address: 192.168.50.20

[vagrant@client2 ~]$ nslookup www.newdns.lab 192.168.50.10
Server:     192.168.50.10
Address:    192.168.50.10#53

** server can't find www.newdns.lab: NXDOMAIN

[vagrant@client2 ~]$ nslookup www.newdns.lab 192.168.50.11
Server:     192.168.50.11
Address:    192.168.50.11#53

** server can't find www.newdns.lab: NXDOMAIN

Для client2 так же отдаются верные результаты

Задание выполнено!

Description
DNS - настройка и обслуживание
Readme 40 KiB