Joining a Samba DC to an Existing Active Directory

samba_ad-dsДля работы леса Active Directory (AD) достаточно запустить один контроллер домена. Однако для отказоустойчивости и балансировки нагрузки, нужно добавить в лес AD дополнительные контроллеры домена. Ниже будет описан принцип присоединения Дополнительного DC Samba к существующему лесу Active Directory.

О настройке Samba в качестве первичного контроллера домена написано в статье Samba Active Directory domain controller.

Второй контроллер домена, так же как и первый, будет запущен на Samba версии 4.3. В качестве операционной системы традиционно используется Ubuntu Server 16.04.

После установки Ubuntu Server, изменим имя сервера на dc2

# hostnamectl set-hostname dc2

Добавим запись в /etc/hosts

# nano /etc/hosts

127.0.0.1       localhost
192.168.10.12   dc2.4skill.loc   dc2
. . .

Определим сетевые настройки

# lshw -C network | grep name
logical name: ens32

# nano /etc/network/interfaces
. . .
# The primary network interface
auto ens32
iface ens32 inet static
        address 192.168.10.12
        netmask 255.255.255.0
        gateway 192.168.10.254
        dns-nameservers 192.168.10.11
        dns-search 4skill.loc

В dns-nameservers нужно указать ip адрес первичного контроллера dc1.

Чтобы изменения вступили в силу, перезапустим сетевую службу

# service networking restart

Обновим индексы пакетов и систему

# apt update
# apt upgrade

Установим Samba и другие необходимые пакеты, включая DNS сервер bind

# apt install samba winbind krb5-user bind9

Проверим статус служб samba

# ps ax | egrep "samba|smbd|nmbd|winbindd"
  4858 ?        Ss     0:00 /usr/sbin/smbd -D
  4861 ?        S      0:00 /usr/sbin/smbd -D
  4877 ?        S      0:00 /usr/sbin/smbd -D
  4934 ?        Ss     0:00 /usr/sbin/nmbd -D
  5115 ?        Ss     0:00 /usr/sbin/winbindd
  5116 ?        S      0:00 /usr/sbin/winbindd
  5191 pts/1    R+     0:00 /bin/sh /bin/egrep --color=auto samba|smbd|nmbd|winbindd

Во время подготовки контроллера домена, службы samba должны быть остановлены. Остановим запущенные службы

# service smbd stop && service nmbd stop && service winbind stop

Удалим оригинальный файл конфигурации samba

# rm /etc/samba/smb.conf

Присоединим новый контроллер DC2 к существующему домену 4skill.loc

# samba-tool domain join 4skill.loc DC -U"4SKILL\administrator" --dns-backend=BIND9_DLZ
Finding a writeable DC for domain '4skill.loc'
Found DC dc1.4skill.loc
Password for [4SKILL\administrator]:
workgroup is 4SKILL
realm is 4skill.loc
checking sAMAccountName
Adding CN=DC2,OU=Domain Controllers,DC=4skill,DC=loc
Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=4skill,DC=loc
Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=4skill,DC=loc
Adding SPNs to CN=DC2,OU=Domain Controllers,DC=4skill,DC=loc
Setting account password for DC2$
Enabling account
Adding DNS account CN=dns-DC2,CN=Users,DC=4skill,DC=loc with dns/ SPN
Setting account password for dns-DC2
Calling bare provision
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Provision OK for domain DN DC=4skill,DC=loc
Starting replication
Schema-DN[CN=Schema,CN=Configuration,DC=4skill,DC=loc] objects[402/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=4skill,DC=loc] objects[804/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=4skill,DC=loc] objects[1206/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=4skill,DC=loc] objects[1550/1550] linked_values[0/0]
Analyze and apply schema objects
Partition[CN=Configuration,DC=4skill,DC=loc] objects[402/1614] linked_values[0/0]
Partition[CN=Configuration,DC=4skill,DC=loc] objects[804/1614] linked_values[0/0]
Partition[CN=Configuration,DC=4skill,DC=loc] objects[1206/1614] linked_values[0/0]
Partition[CN=Configuration,DC=4skill,DC=loc] objects[1608/1614] linked_values[0/0]
Partition[CN=Configuration,DC=4skill,DC=loc] objects[1614/1614] linked_values[28/0]
Replicating critical objects from the base DN of the domain
Partition[DC=4skill,DC=loc] objects[98/98] linked_values[24/0]
Partition[DC=4skill,DC=loc] objects[371/273] linked_values[24/0]
Done with always replicated NC (base, config, schema)
Replicating DC=DomainDnsZones,DC=4skill,DC=loc
Partition[DC=DomainDnsZones,DC=4skill,DC=loc] objects[47/47] linked_values[0/0]
Replicating DC=ForestDnsZones,DC=4skill,DC=loc
Partition[DC=ForestDnsZones,DC=4skill,DC=loc] objects[18/18] linked_values[0/0]
Committing SAM database
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSynchronized and dsServiceName
Setting up secrets database
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates
Joined domain 4SKILL (SID S-1-5-21-3335106245-326210133-3084934881) as a DC

Заменим оригинальный конфигурационный файл Kerberos на файл из пакета samba

# ln -sf /var/lib/samba/private/krb5.conf /etc/krb5.conf

Добавим в конфигурацию bind файл, с описанием DNS зон, необходимых для работы контроллера

# nano /etc/bind/named.conf
. . .
include "/var/lib/samba/private/named.conf";

Укажем в файле named.conf.options адреса серверов пересылки и путь к dns.keytab файлу, необходимому для динамического обновления DNS записей

# nano /etc/bind/named.conf.options

options {
. . .
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
. . .
        tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
};

Проверим конфигурацию bind на наличие ошибок

# named-checkconf

Выставим права и сменим группу на файле dns.keytab

# chmod 640 /var/lib/samba/private/dns.keytab
# chgrp bind /var/lib/samba/private/dns.keytab

Добавим необходимые разрешения в AppArmor

# nano /etc/apparmor.d/local/usr.sbin.named

/var/lib/samba/private/named.conf r,
/var/lib/samba/private/krb5.conf r,
/var/lib/samba/private/dns/** rwk,
/var/lib/samba/private/dns.keytab r,
/var/tmp/** rwmk,
/dev/urandom rw,

В дальнейшем, для настройки репликации SysVol, необходимо, чтобы все контроллеры домена использовали одни и те же GID для встроенных групп. Для этого создадим копию файла idmap.ldb на первичном контроллере DC1

# tdbbackup -s .bak /var/lib/samba/private/idmap.ldb

Скопируем файл idmap.ldb.bak на второй контроллер

# scp /var/lib/samba/private/idmap.ldb.bak admin_user@192.168.10.12:
The authenticity of host '192.168.10.12 (192.168.10.12)' can't be established.
ECDSA key fingerprint is SHA256:/6oa2tbh1v7CK+Qv8M8VnFx3ORhlaxBC7udtkXqaSzU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.12' (ECDSA) to the list of known hosts.
admin_user@192.168.10.12's password:
idmap.ldb.bak                                 100%   80KB  80.0KB/s   00:00

admin_user — пользователь, под которым настраивается сервер;
192.168.10.12 — ip адрес второго контроллера домена DC2.

На втором контроллере DC2 заменим оригинальный файл idmap.ldb, на файл, скопированный из контроллера DC1

# mv ~/idmap.ldb.bak /var/lib/samba/private/idmap.ldb

и сбросим ACL для sysvol на значения по умолчанию

# samba-tool ntacl sysvolreset

сообщение об ошибке

ERROR(runtime): uncaught exception - (-1073741823, 'Undetermined error')

можно игнорировать, это известный баг 39123.

При присоединении Samba DC к существующему домену, не создаются записи в DNS. Однако после перезагрузки второго контроллера DC2, будет выполнен первый вход в домен, и в DNS динамически добавится запись типа A. На практике, динамическое обновление срабатывает корректно после перезапуска службы bind на первом контроллере домена DC1.

Перезапустим службу bind на первом контроллере домена DC1

# service bind9 restart

Перезагрузим контроллер DC2

# reboot

Проверим состояние репликации

# samba-tool drs showrepl
Default-First-Site-Name\DC2
DSA Options: 0x00000001
DSA object GUID: 391763dd-5234-45e3-9737-4384951c0a21
DSA invocationId: dbb71ebf-a577-471e-a1c2-ec9ab7944ca0

==== INBOUND NEIGHBORS ====

DC=DomainDnsZones,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ Thu Mar 23 13:29:03 2017 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Mar 23 13:29:03 2017 MSK

CN=Configuration,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ Thu Mar 23 13:29:03 2017 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Mar 23 13:29:03 2017 MSK

CN=Schema,CN=Configuration,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ Thu Mar 23 13:29:03 2017 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Mar 23 13:29:03 2017 MSK

DC=ForestDnsZones,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ Thu Mar 23 13:29:03 2017 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Mar 23 13:29:03 2017 MSK

DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ Thu Mar 23 13:29:07 2017 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Mar 23 13:29:07 2017 MSK

==== OUTBOUND NEIGHBORS ====

DC=DomainDnsZones,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ NTTIME(0) was successful
                0 consecutive failure(s).
                Last success @ NTTIME(0)

CN=Configuration,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ NTTIME(0) was successful
                0 consecutive failure(s).
                Last success @ NTTIME(0)

CN=Schema,CN=Configuration,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ NTTIME(0) was successful
                0 consecutive failure(s).
                Last success @ NTTIME(0)

DC=ForestDnsZones,DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ NTTIME(0) was successful
                0 consecutive failure(s).
                Last success @ NTTIME(0)

DC=4skill,DC=loc
        Default-First-Site-Name\DC1 via RPC
                DSA object GUID: 11ee8332-51ca-48ac-8e6c-593126645277
                Last attempt @ NTTIME(0) was successful
                0 consecutive failure(s).
                Last success @ NTTIME(0)

==== KCC CONNECTION OBJECTS ====

Connection --
        Connection name: 7490d1a3-9adb-4806-92d4-f8a34538ee04
        Enabled        : TRUE
        Server DNS name : dc1.4skill.loc
        Server DN name  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=4skill,DC=loc
                TransportType: RPC
                options: 0x00000001
Warning: No NC replicated for Connection!

Проверим работоспособность локального DNS сервера

# host -t A 4skill.loc localhost
Using domain server:
Name: localhost
Address: ::1#53
Aliases:

4skill.loc has address 192.168.10.12
4skill.loc has address 192.168.10.11

При корректной работе DNS сервер должен разрешить имя домена в ip адреса всех контроллеров домена.

Добавим PTR запись для контроллера DC2

# samba-tool dns add dc1 10.168.192.in-addr.arpa 12 PTR dc2.4skill.loc -U administrator
Password for [4SKILL\administrator]:
Record added successfully

dc1 — имя контроллера, на котором добавляется запись;
10.168.192.in-addr.arpa — зона, для которой добавляется запись;
12 — последний октет ip адреса. В данном примере 192.168.10.12;
PTR — тип записи;
dc2.4skill.loc — узел, для которого добавляется запись;
-U administrator — пользователь, от имени которого производится операция.

Более подробно об управлении DNS сервером на контроллере, можно прочитать тут.

Теперь в домене имеется два DNS сервера. Лучшие практики советуют указывать локальный ip адрес в качестве вторичного DNS сервера, а первичным указывать адрес другого контроллера.

На контроллере DC1

# nano /etc/network/interfaces
. . .
        dns-nameservers 192.168.10.12 192.168.10.11
        dns-search 4skill.loc

На контроллере DC2

# nano /etc/network/interfaces
. . .
        dns-nameservers 192.168.10.11 192.168.10.12
        dns-search 4skill.loc

192.168.10.11 — ip адрес первичного контроллера DC1;
=192.168.10.12 — ip адрес вторичного контроллера DC2.

После изменения сведении о DNS, нужно перезапустить сетевую службу

# service networking restart

О том, как предоставить право входа на контроллер доменным пользователям, можно прочитать в статье Samba DC authenticating domain users using PAM.

Настройка сервера времени на Samba DC описана в статье Samba DC time synchronisation.

О настройке DHCP сервера на контроллере Samba написано в статье Samba DC DDNS update.

Дополнительную информацию по теме можно найти на странице официального руководства.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *