Домашнее задание 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
Итак цели ДЗ следующие
Что нужно сделать?
- Взять стенд https://github.com/erlong15/vagrant-bind
- Добавить еще один сервер client2
- Завести в зоне dns.lab:
- имя web1 - смотрит на клиент1
- имя web2 - смотрит на клиент2
- Завести еще одну зону newdns.lab
- Завести в зоне newdns.lab запись www - смотрит на обоих клиентов
- Настроить split-dns
- клиент1 - видит обе зоны, но в зоне dns.lab только web1
- клиент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 так же отдаются верные результаты
Задание выполнено!