# Домашнее задание 36 ## DNS - настройка и обслуживание Для выполнение задания используется стенд https://github.com/erlong15/vagrant-bind ### Корректировка Vagrantfile В иходный Vagrantfile добавлена еще одна VM - Client2 с ip 192.168.50.20 ```bash 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 ```bash 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](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** следующие: ```bash - 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) ```bash $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**, со следующим содержанием: ```bash $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** ```bash // 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** Со следующим содержимом: ```bash $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 ```bash 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**. Нажмите, чтобы развернуть ```bash 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**. Нажмите, чтобы развернуть ```bash 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** ```bash - name: SELinux /etc/named file: path: /etc/named setype: named_zone_t recurse: yes ``` ### Проверка Запускаем vagrant ```bash 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 сервера на наши запросы ```bash [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 сервера ```bash [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** так же отдаются верные результаты Задание выполнено!