Резервный контроллер домена — это дополнительный сервер в сети, который реплицирует данные с основного контроллера и готов взять на себя его функции в случае отказа или недоступности основного, обеспечивая тем самым отказоустойчивость и непрерывность работы домена. Его основная задача — перехватить управление аутентификацией, авторизацией и другими службами домена, чтобы пользователи могли продолжать работать без сбоев.
https://wiki.samba.org/index.php/Joining_a_Samba_DC_to_an_Existing_Active_Directory
Запуск одного контроллера домена (DC) достаточна для работающего леса Active Directory (AD). Тем не менее, по причинам избыточности и балансировки нагрузки, вы должны добавить дополнительные DC в ваш AD лес.
Присоединение дополнительной Samba DC к существующему AD отличается от инициализации первого DC в лесу. Если вы настраиваете новый AD лес, см. Настройку SAMBA в качестве контроллера домена Active Directory.
При установке дополнительного DC не нужно делать инициализацию контролера домена и потом его присоединять к существующему домену, это не сработает, вместо этого достаточно будет выполнить команду
samba-tool domain join
которая добавит компьютер к существующему домену.
Разворачивать Samba AD-DC будем на базе Ubuntu 24.04
После установки и предварительных настроек Ubuntu 24.04 перейдем к установке и настройке Samba.
Начальная установка ничем не отличается от установки SAMBA в качестве контролера домена, до момента инициализации (provisioning) контролера домена.
Устанавливаем и предварительно настраиваем BIND
в файле /etc/bind/named.conf.options меняем значение адреса локального сервера
listen-on port 53 {
10.0.0.253; // IP of our DC and BIND Server
127.0.0.1;
::1;
};
После установки BIND продолжаем настраивать SAMBA
sudo nano /etc/resolv.conf
search ladm.lazyadmin.ru
nameserver 10.0.0.254
nameserver 10.0.0.253
nameserver 1.1.1.1
sudo mv /etc/krb5.conf /etc/krb5.conf.orig
sudo nano /etc/krb5.conf
[libdefaults]
dns_lookup_realm = false
dns_lookup_kdc = true
default_realm = LADM.LAZYADMIN.RU
Теперь можно присоединять компьютер к существующему домену.
Опять обращаем внимание на сетевые интерфейсы
sudo samba-tool domain join ladm.lazyadmin.ru DC -U"LADM\administrator" --dns-backend=BIND9_DLZ --option="interfaces=lo ens18" --option="bind interfaces only=yes"
...
Joined domain LADM (SID [SID HASH HERE]) as a DC
sudo systemctl start samba-ad-dc.service
sudo systemctl status samba-ad-dc.service
sudo nano /etc/bind/named.conf.options
раскомментируем строку
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
sudo systemctl start bind9.service
sudo systemctl status bind9.service
host -t A vmdc02.ladm.lazyadmin.ru
vmdc02.ladm.lazyadmin.ru has address 10.0.0.253
sudo apt install ldb-tools
sudo ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationId=*)' --cross-ncs objectguid
# record 1
dn: CN=NTDS Settings,CN=VMDC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ladm,DC=lazyadmin,DC=ru
objectGUID: 00000000-0000-0000-0000-000000000000
# record 2
dn: CN=NTDS Settings,CN=VMDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ladm,DC=lazyadmin,DC=ru
objectGUID: 00000000-0000-0000-0000-000000000000
# returned 2 records
# 2 entries
# 0 referrals
host -t CNAME 00000000-0000-0000-0000-000000000000._msdcs.ladm.lazyadmin.ru
00000000-0000-0000-0000-000000000000._msdcs.ladm.lazyadmin.ru is an alias for VMDC02.ladm.lazyadmin.ru.
Устанавливаем isc-dhcp-server
sudo apt install isc-dhcp-server -y
sudo samba-tool domain exportkeytab --principal=dhcpduser@LADM.LAZYADMIN.RU /etc/dhcpduser.keytab
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
sudo nano /etc/dhcp/dhcpd.conf
Ключ OMAPI берем с основного DHCP сервера, после того как сгенерируем его
authoritative;
ddns-update-style none;
omapi-port 7911;
omapi-key omapi_key;
key "omapi_key" {
algorithm hmac-md5;
secret "##### KEY HERE FROM DC01 ######";
};
failover peer "dhcp-failover" {
secondary;
address vmdc02.ladm.lazyadmin.ru;
peer address vmdc01.ladm.lazyadmin.ru;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option time-offset 0;
option routers 10.0.0.1;
option domain-name "ladm.lazyadmin.ru";
option domain-name-servers 10.0.0.253, 10.0.0.254;
option ntp-servers 10.0.0.253, 10.0.0.254, 10.0.0.1;
pool {
failover peer "dhcp-failover";
max-lease-time 1800; # 30 minutes
range 10.0.0.100 10.0.0.199;
}
}
on commit {
set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address));
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientDHCID = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
set ClientName = pick-first-value(option host-name, config-option host-name, client-name, noname);
log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName));
execute("/usr/local/bin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName);
}
on release {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientDHCID = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
log(concat("Release: IP: ", ClientIP));
execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, ClientDHCID);
}
on expiry {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
# cannot get a ClientMac here, apparently this only works when actually receiving a packet
log(concat("Expired: IP: ", ClientIP));
# cannot get a ClientName here, for some reason that always fails
# however the dhcp update script will obtain the short hostname.
execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, "", "0");
}
sudo systemctl restart bind9
sudo systemctl status bind9
sudo systemctl restart isc-dhcp-server
sudo systemctl status isc-dhcp-server
Проверяем и донастраиваем apparmor
Настройка репликации