Меню Рубрики

Сервер доменных имен linux

Поднимаем контроллер домена на Ubuntu Server

Этот вариант может быть полезен для небольших организаций с компьютерами под управлением Windows.
Нет необходимости приобретать недешевую Windows Server для организации AD и CAL лицензии для доступа к контроллеру домена.
В конечном итоге имеем плюшки AD: групповые политики, разграничение прав доступа к ресурсам и т.д.

Я попытался написать подробный алгоритм действий необходимых для организации Active Directory (AD) Domain Controller (DC) на базе Ubuntu Server.

Рассмотрим настройку контроллера домена на примере Ubuntu Server 12.04.4 LTS или Ubuntu Server 13.10, инструкция подходит для обоих вариантов без дополнительных изменений

1. Установка Ubuntu

Думаю установка Ubuntu-server не вызовет проблем даже у большинства пользователей компьютеров.
Желательно при установке ОС сразу правильно указать название машины в сети (hostname) с указанием домена (для примера использую dc1.domain.local), чтобы в дальнейшем меньше надо было править конфигурацию в файлах.
Если в сети не присутствует DHCP-сервер, установщик предложит ввести IP-адрес, маску сети, шлюз и DNS.
Во время установки, также желательно установить OpenSSH server, чтобы иметь удаленный доступ к серверу, а также правильно указать часовой пояс, в котором находится машина.

2. Настройка параметров сетевого адаптера

Настройки сети хранятся в файле /etc/network/interfaces
Редактируем его на свой вкус. В качестве редактора можно использовать nano, vi и т.п.
Для редактирования файлов понадобятся root права, их можно получить например командой после этого, Вы будете работать из под пользователя root.
О том что Вы работаете с правами root пользователя свидетельствует знак # в приглашении командной строки
Либо Вы можете перед каждой командой, которая требует root доступа, приписывать sudo

В конфигурации Вашего сетевого интерфейса, скорее всего, будет

auto eth0
iface eth0 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.10.10
dns-nameservers 192.168.10.10
dns-search domain.local domain

После изменения сетевых настроек необходимо перезапустить сетевой сервис

3. Установка необходимых пакетов

Если Вы все же не установили OpenSSH server на первом этапе, это можно сделать командой
Перед установкой чего либо, лучше сначала обновить систему и пакеты командой
Для того, чтобы компьютеры сети сверяли время по нашему серверу установим ntp-сервер

Samba4 будем использовать последней версии и собирать из исходников, так что нам понадобятся пакеты для её сборки и корректной работы.

4. Сборка Samba4

/dev/mapper/dc1—vg-root / ext4 user_xattr,acl,barrier=1,errors=remount-ro 0 1

после чего необходимо перезагрузить компьютерНе забываем про root права
Скачиваем последнюю стабильную версию Samba из GIT репозитария
конфигурируем, компилируем и устанавливаем Samba Параметр —enable-debug необходим для отображения более подробной информации в логах Samba.

После того, как соберется и установится Samba (это долгое занятие), для удобства её использования, необходимо прописать пути до исполняемых файлов /usr/local/samba/sbin и /usr/local/samba/bin в файлах /etc/sudoers переменная secure_path и /etc/environment переменная PATH, добавив строку :/usr/local/samba/sbin:/usr/local/samba/bin
должна получится строчка что-то вроде этой:

перезагрузимся еще раз (на всякий случай)

5. Поднимаем AD

В качестве DNS сервера AD будем использовать Samba, поэтому отключаем bind командой

Для манипуляций с AD в Samba существует инструмент samba-tool.
Для первоначальной настройки Samba вводим команду

Если на первом этапе Вы правильно указали имя компьютера, все настройки, которые запросит программа, можно оставить поумолчанию.
Во время настройки будет запрошен пароль пользователя Administrator для AD, он должен соответствовать требованиям сложности пароля поумолчанию: хотябы одна буква верхнего регистра, хотябы одна цифра, минимум 8 символов.
Если же пароль не подошел по сложности и Вы увидели ошибку вроде этой:

ERROR(ldb): uncaught exception — 0000052D: Constraint violation — check_password_restrictions: the password is too short. It should be equal or longer than 7 characters!

то перед повторным выполнением первоначальной настройки, необходимо удалить содержимое каталогов /usr/local/samba/private/ и /usr/local/samba/etc/
Если необходимо изменить сложность паролей это можно сделать командой эта команда отключает требование сложности, отключает сроки действия паролей, устанавливает минимальную длину пароля 6 символов

Далее необходимо подправить настройки Samba и добавить туда следующие строки в секцию [global]

allow dns updates = nonsecure and secure
printing = bsd
printcap name = /dev/null

Это позволит динамически обновлять DNS-записи на сервере, при входе рабочей станции (под управлением windows) в домен и отключит поддержку печати, которая постоянно выдает ошибки в лог.

В файле /etc/resolvconf/resolv.conf.d/head необходимо указать наш DNS-сервер Samba 127.0.0.1
и перезапустить сервис resolvconf
Также установим Kerberos клиенти настроим на AD с помощью файла созданного на этапе samba-tool domain provision
Для автоматического запуска сервиса Samba необходим скрипт:

6. Проверяем работоспособность сервера

root 865 0.3 3.0 95408 31748? Ss 18:59 0:00 /usr/local/samba/sbin/samba -D

Name: dc1.domain.local
Address: 192.168.10.1

Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Sharename Type Comment
— — — netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.6)
Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Server Comment
— — Workgroup Master
— ——-

Warning: Your password will expire in 41 days on Wed Apr 23 18:49:14 2014

Valid starting Expires Service principal
12/03/2014 19:17 13/03/2014 05:17 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL

Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
. D 0 Wed Mar 12 18:46:48 2014
… D 0 Wed Mar 12 18:49:15 2014

Вот и всё.
Можно вводить в домен клиентов, заводить пользователей.

Управлять AD можно:
частично при помощи samba-tool на Ubuntu
при помощи Administration Tools Pack на Windows XP
при помощи Remote Server Administration Tools (RSAT) на Windows 7 и выше

Источник

Контроллер домена Ubuntu 20.04 – Ubuntu 20.04 AD-DC

Данная статья не подходит для новых инсталяций. Если вы разворачиваете контроллер домена на Ubuntu 20, из репозиториев, вам необходима следующая статья: Контроллер домена Ubuntu 20.04.1 – Ubuntu AD-DC — dhcp-dyndns 2020

Время идёт, технологии не стоят на месте, выходят новые, более актуальные версии операционных систем, и собсно если ты не в тренде, безусловно ты отправляешься на кадровую помойку. Поэтому сегодня речь пойдет о том, как настроить контроллер домена Ubuntu 20.04. Прежде всего, напомню, что ранее уже была статья Контроллер домена Ubuntu 18.04 – Ubuntu 18.04 AD-DC . Там поднимался “контроллер домена на коленке”. Статья безусловно годная и пользующаяся спросом, но, напомню что время идёт и технологии не стоят на месте.

Цель данной статьи – не только актуализировать информацию предыдущей. Эта статья будет с блекджеком и блудницами. Если ранее при настройке домен инициализировался с помощью samba_internal DNS сервера и был способен лишь контролировать авторизацию и обслуживать dns имена присоединённых к нему клиентов, в этой статье будут использоваться BIND9 + dhcpd и все вытекающие прелести, такие как автоматическое создание DNS записей в локальной зоне, для устройств получивших адрес по DHCP. То есть любых устройств, а не только членов домена. Изначально я планировал оформить информацию в виде десятка отдельных статей, но в итоге решил объединить всё на одной странице. Так что ниже последует огромнейшая стена текста. Нуждающийся же да превозможет

1. Установка Ubuntu Server 20.04

Ни чем не отличается от установки Ubuntu Server 18.04
Полезные команды после установки:

sudo apt update && sudo apt dist-upgrade -y

# Установить набор сетевых утилит включающий привычный многим ifconfig

# Узнать текущий шлюз по умолчанию

2. Задаём имя сервера
3. Задаём статический IP

4. Контроллер домена Ubuntu – Настройка BIND9 – Часть 1

Примечательно, что начинается установка домена с установки DNS сервера, пакета, распространяемого отдельно от samba4. Можно и потом, но таки в этом случае придётся делать дополнительные телодвижения. Дабы этого избежать сперва надо установить bind и провести его частичную настройку. Установим, создадим зоны, проведём первичную конфигурацию

4.1 Ставим BIND9_DLZ

Прежде всего проверяем версию bind

4.2. Cмотрим где bind держит named.conf

В результате увидим что-то типа этого:

–sysconfdir=/etc/bind – это папка где лежит файл named.conf

4.3 Смотрим где днс сервер держит кеш

В результате видим что-то типа /var/cache/bind
Эта директория понадобится нам при дальнейшей настройке

4.4 Проверяем named.conf

В результате видим:

Нам понадобятся файлы выделенные красным

4.5 Правим named.conf.options

В первую очередь делаем бэкап и правим файл

sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options_bak
sudo nano /etc/bind/named.conf.options

Удаляем его содержимое и заменяем следующим:

# Глобальные настройки
options <
auth-nxdomain yes;
directory «/var/cache/bind»; # Папка с кешем bind
notify no;
empty-zones-enable no;
tkey-gssapi-keytab «/var/lib/samba/private/dns.keytab»;
minimal-responses yes;

# IP адреса и подсети от которых будут обрабатываться запросы
allow-query <
127.0.0.1;
192.168.1.0/24; # Текущая локальная сеть ag-dc-1.adminguide.lan
>;

# IP адреса и подсети от которых будут обрабатываться рекурсивные запросы
# (Зон не обслуживаемых этим DNS сервером)
allow-recursion <
127.0.0.1;
192.168.1.0/24; # Текущая локальная сеть ag-dc-1.adminguide.lan
>;

# Перенаправлять запросы, на которые нет информации в локальной зоне
# на следующие сервера:
forwarders <
192.168.1.2; # IP адрес DNS форвардера
8.8.8.8; # IP адрес DNS форвардера
8.8.4.4; # IP адрес DNS форвардера
>;

4.6 Правим named.conf.default-zones

sudo cp /etc/bind/named.conf.default-zones /etc/bind/named.conf.default-zones_bak
sudo nano /etc/bind/named.conf.default-zones

Удаляем его содержимое и заменяем следующим:

# Корневые сервера
# (Необходимы для рекурсивных запросов)
zone «.» <
type hint;
file «named.root»;
>;

# localhost zone
zone «localhost» <
type master;
file «master/localhost.zone»;
>;

# 127.0.0. zone.
zone «0.0.127.in-addr.arpa» <
type master;
file «master/0.0.127.zone»;
>;

4.7 Конец первичной настройки BIND9

5. Контроллер домена Ubuntu – Настройка – Часть 1

5.1 Отключаем systemd-resolved

5.1.1 Останавливаем сервис

sudo service systemd-resolved stop

5.1.2 Убираем из автозапуска

sudo systemctl disable systemd-resolved.service

5.1.3 Удаляем симлинк /etc/resolv.conf

5.1.4 Открываем и изменяем конфиг

5.1.5 Настраиваем адрес сервера имён как на картинке.

nameserver 192.168.1.2
search adminguide.lan

Сейчас, nameserver должен быть настроен на адрес нашего текущего DNS сервера, который расположен например на роутере или ещё где
В search указывается имя нашего будущего домена
Сохраняем изменения Ctrl+O

5.2 Настраиваем файл /etc/hosts

Обязательно чтобы AD DC мог резолвиться по имени на свой IP адрес внутри настраиваемой сети, даже при пинге с самого AD DC
Открываем файл и вносим изменения

127.0.0.1 localhost.localdomain localhost
192.168.1.100 ag-dc-1.adminguide.lan ag-dc-1

5.3 Проверяем что в системе не работают самобые процессы

ps ax | egrep «samba|smbd|nmbd|winbindd»

Не должно быть ни одного процесса, как на картинке:

5.4 Инсталлируем Samba

Очень важно помнить, что контроллер домена на самбе, инициализируется раз и навсегда. Возможность изменить его название в будущем – отсутствует в принципе. Как-то назвав его однажды, с таким именем он и будет существовать до скончания веков или пока вы его не убьёте. Назвав домен ADMINGUIDE.LAN, он на всегда останется с этим именем ADMINGUIDE.LAN . Samba4 не поддерживает переименовывание домена. После его инициализации, для изменения названия, вы должны будете исключить из домена все машины которые успели в него ввести, удалить AD DC, с нуля всё настроить и ввести машины уже в него. Так что я настоятельно рекомендую продумать каждый шаг прежде чем начинать инициализировать домен, прочитать данную инструкцию до самого конца, продумать ньюансы, чтобы избежать ошибок в будущем.

5.4.1 Устанавливаем samba4 и все нужные пакеты с помощью следующей строки:

sudo apt -y install samba krb5-config winbind smbclient krb5-user

5.4.2 Дефолтная область для Керберос 5

5.4.3 Сервер Kerberos для вашей области

5.4.4 Управляющий сервер вашей области Kerberos

5.4.5 Ожидаем окончание установки

5.4.6 Бэкапим файл с исходными настройками Samba

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bkp

5.5 Инициализируем контроллер домена Ubuntu 20.04

5.5.1 Запускаем инициализацию с опцией —interactive

Из своего AD DC, мы будем рулить юзерами и группами компьютеров с линуксовыми операционками. Потому заразаранее активируем совместимость с NIS, используя команду –use-rfc2307

sudo samba-tool domain provision —use-rfc2307 —interactive

Включение поддержки Network Information Service (NIS), никак не повредит работе AD DC, несмотря даже на ситуацию в которой он никогда столкнётся с Linux серверами или компьютерами. В тоже время, если настроить контроллер без этой опции, и когда-нибудь в него будут введены машины с линуксом, придётся модифицировать схему AD и добавлять поддержку NIS. Делать это конечно же придётся с большим риском убить контроллер.

5.5.2 Указываем параметры домена

Если в процессе настройки не было допущено ошибок, те параметры которые вам нужно настраивать, кроме DNS backend инсталлятор поместит в квадратные скобки как дефолтные значения.

Realm [ADMINGUIDE.LAN]:
Domain [ADMINGUIDE]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
DNS forwarder IP address (write ‘none’ to disable forwarding) [192.168.1.2]:
Administrator password:
Retype password:

В тот момент когда установщик попросит ввести пароль, лучшее задать такой, что понадёжнее, т.к. мы будем использовать его для авторизации под администратором AD DC.
Если в данный момент в дефолтных значениях фигурируют не те значения которое вы ожидаете, скорее всего допущен серьёзный косяк, лучше начать настраивать заново.

5.5.3 Проверяем последствия инициализации

Если мы увидим информацию аналогичную приведённой ниже – это значит что контроллер домена на Ubuntu успешно завершил инициализацию:
В конце видим где самба держит конфиг named и конфиг krb5

5.6 Конец первичной настройки контроллера домена

6. Контроллер домена Ubuntu – Конфигурация BIND9 – Часть 2

6.1 Активируем интеграцию DLZ

sudo nano /var/lib/samba/bind-dns/named.conf

Смотрим фаел. Если всё было сделано правильно, там автоматом будет раскомменчена строка отвечающая за интеграцию нашей версии самбы с нашей версией bind9. Главная проблема в том, что в данный момент в репозиториях Focal нету совместимых на уровне версий dlz, пакетов samba4 и bind9. Примечательно что версия samba4 находящаяся на данный момент в репозитории, на уровне dlz поддерживает BIND 9.11.x . В то время как находящийся в репозитории пакет BIND9, на данный момент версии 9.16.х . Со временем, это вероятнее всего изменится и я актуализирую статью, а пока надо раскомментить строку для BIND 9.12.x

Этот же файл надо заинклудить в основную конфигурацию named

6.2 Проверяем права на dns.keytab

$ ls -l /var/lib/samba/private/dns.keytab
-rw-r—— 2 root bind 802 Apr 3 19:36 /var/lib/samba/private/dns.keytab

6.3 Проверяем права на папку /bind-dns/

$ ls -l /var/lib/samba/
total 1408
drwxr-xr-x 4 root root 4096 Apr 3 17:51 DriverStore
-rw——- 1 root root 421888 Apr 3 17:51 account_policy.tdb
drwxrwx— 3 root bind 4096 Apr 6 11:44 bind-dns # Вот она 🙂
-rw——- 1 root root 696 Apr 3 17:51 group_mapping.tdb
drwxr-xr-x 11 root root 4096 Apr 3 17:51 printers
drwxr-xr-x 5 root root 4096 Apr 3 19:36 private
-rw——- 1 root root 528384 Apr 3 17:51 registry.tdb
-rw——- 1 root root 421888 Apr 3 17:51 share_info.tdb
drwxrwx—+ 3 root 3000000 4096 Apr 3 19:36 sysvol
drwxrwx—T 2 root sambashare 4096 Apr 3 17:51 usershares
-rw——- 1 root root 32768 Apr 5 00:00 winbindd_cache.tdb
drwxr-x— 2 root winbindd_priv 4096 Apr 3 17:51 winbindd_privileged

6.4 Смотрим права на /etc/krb5.conf

$ ls -l /etc/krb5.conf
-rw-r—r— 1 root bind 2891 Apr 3 17:51 /etc/krb5.conf

В случае несоответствия

6.5 Проверяем наличие утилиты nsupdate

6.6 Загружаем список корневых днс серверов

sudo wget -q -O /var/cache/bind/named.root http://www.internic.net/zones/named.root
sudo chown root:bind /var/cache/bind/named.root
sudo chmod 640 /var/cache/bind/named.root

6.7 Проверяем конфиг

sudo named-checkconf
sudo service bind9 start

Если ошибок не будет обнаружено, то named-checkconf не выдаст никакой информации, можно пытаться запустить сервис. Если попытка запуска тоже не выдаст никаких критов прямо в терминал – значит хорошо. DNS сервер почти готов к работе

6.8 Создаём файлы зон

sudo mkdir /var/cache/bind/master
sudo chown bind:bind /var/cache/bind/master

Создаём файл localhost.zone

sudo nano /var/cache/bind/master/localhost.zone

и копируем туда следующее:

@ 1D IN SOA @ root (
2013050101 ; serial
8H ; refresh
2H ; retry
4W ; expiry
1D ; minimum
)

Устанавливаем владельца и права доступа

sudo chown bind:bind /var/cache/bind/master/localhost.zone
sudo chmod 640 /var/cache/bind/master/localhost.zone

Помещаем в него содержимое:

@ IN SOA localhost. root.localhost. (
2013050101 ; Serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D ; Minimum TTL
)

1 IN PTR localhost.

Задаём права на файл:

sudo chown bind:bind /var/cache/bind/master/0.0.127.zone
sudo chmod 640 /var/cache/bind/master/0.0.127.zone

6.9 Запускаем\перезапускаем bind9, проверяем созданные зоны

$ sudo service bind9 restart
AdminGuide.Ru@ag-dc-1:

$ host -t A localhost 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1 # 53
Aliases:

localhost has address 127.0.0.1
AdminGuide.Ru@ag-dc-1:

$ host -t PTR 127.0.0.1 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1 # 53
Aliases:

1.0.0.127.in-addr.arpa domain name pointer localhost.

6.10 Завершаем донастройку DNS сервера

На этом этапе мы имеем рабочий DNS сервер, способный обслуживать контроллер домена, и можем перейти к донастройку контроллера домена

7. Контроллер домена Ubuntu – Настройка – Часть 2

7.1 Настройка запуска

Для корректной работы, все процессы самбы должна запускать сама самба и никто иной. Если процесс самбы будет запущен не самбой а например от рута и этот процесс сгенерит какой-нибудь нужный для работы контроллера домена фаел, то после этого вы можете хоть взрывать весь домен, т.к. больше у вас он не взлетит. Из-за этого, для возвращения работоспособсности, придётся вручную дебажить, искать где косяк, просто реально до посинения выискивать причину ошибки. Я занимался этим у нескольких заказчиков, не пожелаю этого никому. Проще сразу же сделать нормально.

sudo systemctl stop smbd nmbd winbind
sudo systemctl disable smbd nmbd winbind
sudo systemctl mask smbd nmbd winbind

Блокируем samba-ad-dc для ручного старта, включаем сервис и включаем его автозапуск

sudo systemctl unmask samba-ad-dc
sudo systemctl start samba-ad-dc
sudo systemctl enable samba-ad-dc

7.2 Настройка DNS адреса

Указываем сервером имён, свой собственный айпишник AD DC

Для этого необходимо сконфигурировать параметры сети по следующему принципу:

dhcp4: no
dhcp6: no
addresses: [192.168.1.100/24, ]
gateway4: 192.168.1.2
nameservers:
addresses: [192.168.1.100, ]

Настраиваем адрес сервера имён, так же указывая там айпишник AD DC, приведя его к виду:

Меняем старое содержимое на следующее:

nameserver 192.168.1.100
search adminguide.lan

7.3 Контроллер домена Ubuntu – Настройка Kerberos

При инициализации AD DC, будет создан файл конфигурации керберос, где он расположен, указывается в конце отчета об инициализации. Дабы не делать двойную работу, заменяем существующий файл настроек Kerberos, только что созданным файлом.

sudo cp /var/lib/samba/private/krb5.conf /etc/

7.4 Убеждаемся что всё работает

7.4.1 Смотрим имеющиеся на контроллере общие каталоги

Помним что они автоматически создаются в момент инициализации и если их нет, значит где-то косяк. А в следствии такого косяка, ничего не будет функционировать нормально или не будет даже запускаться

7.4.2 Смотрим возможность подключения к netlogon
Теперь сотрим пускает ли доменного админа в каталог netlogon

smbclient //localhost/netlogon -UAdministrator -c ‘ls’

Когда потребуется авторизация, вводим пароль указанный в момент инициализации. Авторизовавшись успешно вы получите доступ к каталогу

7.4.3 Когда потребуется авторизация, вводим пароль указанный в момент инициализации. Авторизовавшись успешно вы получите доступ к каталогу

7.4.4 Проверяем правильность настройки DNS
Если bind9 был настроен некорректно, то AD DC не взлетит. Для того чтобы проверить, попытаемся извлечь из днс сервера необходимые записи

7.4.4.1 Во-первых смотрим SRV запись _ldap

$ host -t SRV _ldap._tcp.adminguide.lan.
_ldap._tcp.adminguide.lan has SRV record 0 100 389 ag-dc-1.adminguide.lan.

7.4.4.2 Во-вторых смотрим SRV запись _kerberos

$ host -t SRV _kerberos._udp.adminguide.lan.
_kerberos._udp.adminguide.lan has SRV record 0 100 88 ag-dc-1.adminguide.lan.

7.4.4.3 В-третьих проверяем A запись контроллера домена

$ host -t A ag-dc-1.adminguide.lan.
ag-dc-1.adminguide.lan has address 192.168.1.100

7.4.4.4 Проверяем работоспособность Kerberos

$ kinit administrator
Password for administrator@ADMINGUIDE.LAN:
Warning: Your password will expire in 38 days on Fri May 15 19:36:28 2020

7.4.4.5 В конечном итоге, смотрим кеш авторизационных тикетов Kerberos

$ klist
Ticket cache: FILE:/tmp/krb5cc_1001
Default principal: administrator@ADMINGUIDE.LAN

Valid starting Expires Service principal
04/07/20 09:02:16 04/07/20 19:02:16 krbtgt/ADMINGUIDE.LAN@ADMINGUIDE.LAN
renew until 04/08/20 09:02:12
AdminGuide.Ru@ag-dc-1:

7.4.5 Конец проверки настроек DNS
На этом этапе мы готовы перейти к настройке DHCP сервера

8. Контроллер домена Ubuntu – Настройка DHCP сервера
8.1 Для начала устанавливаем DHCP сервер

sudo apt-get install isc-dhcp-server

8.2 Затем создаём пользователя домена для работы с обновлениями

sudo samba-tool user create dhcpduser —description=»Unprivileged user for TSIG-GSSAPI DNS updates via ISC DHCP server» —random-password

8.3 Так же устанавливаем истечение пароля и добавляем в группу DnsAdmins

$ sudo samba-tool user setexpiry dhcpduser —noexpiry
Expiry for user ‘dhcpduser’ disabled.
AdminGuide.Ru@ag-dc-1:

$ sudo samba-tool group addmembers DnsAdmins dhcpduser
Added members to group DnsAdmins

8.4 Теперь экспортируем данные

sudo samba-tool domain exportkeytab —principal=dhcpduser@ADMINGUIDE.LAN /etc/dhcpduser.keytab
sudo chown dhcpd:dhcpd /etc/dhcpduser.keytab
sudo chmod 400 /etc/dhcpduser.keytab

8.5 Создаём скрипт

И копируем в него следующий код, к сожалению в дзене нет ни тега code ни тега spoiler 🙁

# This script is for secure DDNS updates on Samba 4
# Version: 0.8.9

# Uncomment the next line if using a self compiled Samba and adjust for your PREFIX
# PATH=»/usr/local/samba/bin:/usr/local/samba/sbin:$PATH»
BINDIR=$(samba -b | grep ‘BINDIR’ | grep -v ‘SBINDIR’ | awk ‘‘)
WBINFO=»$BINDIR/wbinfo»

# DNS domain
domain=$(hostname -d)
if [ -z $ ]; then
logger «Cannot obtain domain name, is DNS set up correctly?»
logger «Cannot continue. Exiting.»
exit 1
fi

# Additional nsupdate flags (-g already applied), e.g. «-d» for debug
NSUPDFLAGS=»-d»

# krbcc ticket cache
export KRB5CCNAME=»/tmp/dhcp-dyndns.cc»

# Kerberos principal
SETPRINCIPAL=»dhcpduser@$«
# Kerberos keytab
# /etc/dhcpduser.keytab
# krbcc ticket cache
# /tmp/dhcp-dyndns.cc
TESTUSER=»$($WBINFO -u) | grep ‘dhcpduser’)»
if [ -z «$» ]; then
logger «No AD dhcp user exists, need to create it first.. exiting.»
logger «you can do this by typing the following commands»
logger «kinit Administrator@$»
logger «samba-tool user create dhcpduser —random-password —description=\»Unprivileged user for DNS updates via ISC DHCP server\»»
logger «samba-tool user setexpiry dhcpduser —noexpiry»
logger «samba-tool group addmembers DnsAdmins dhcpduser»
exit 1
fi

# Check for Kerberos keytab
if [ ! -f /etc/dhcpduser.keytab ]; then
echo «Required keytab /etc/dhcpduser.keytab not found, it needs to be created.»
echo «Use the following commands as root»
echo «samba-tool domain exportkeytab —principal=$ /etc/dhcpduser.keytab»
echo «chown XXXX:XXXX /etc/dhcpduser.keytab»
echo «Replace ‘XXXX:XXXX’ with the user & group that dhcpd runs as on your distro»
echo «chmod 400 /etc/dhcpduser.keytab»
exit 1
fi

# Variables supplied by dhcpd.conf
action=$1
ip=$2
DHCID=$3
name=$

usage()
<
echo «USAGE:»
echo » $(basename $0) add ip-address dhcid|mac-address hostname»
echo » $(basename $0) delete ip-address dhcid|mac-address»
>

_KERBEROS () <
# get current time as a number
test=$(date +%d’-‘%m’-‘%y’ ‘%H’:’%M’:’%S)
# Note: there have been problems with this
# check that ‘date’ returns something like
# 04-09-15 09:38:14

# Check for valid kerberos ticket
# logger «$ [dyndns] : Running check for valid kerberos ticket»
klist -c /tmp/dhcp-dyndns.cc -s
if [ «$?» != «0» ]; then
logger «$ [dyndns] : Getting new ticket, old one has expired»
kinit -F -k -t /etc/dhcpduser.keytab -c /tmp/dhcp-dyndns.cc «$»
if [ «$?» != «0» ]; then
logger «$ [dyndns] : dhcpd kinit for dynamic DNS failed»
exit 1;
fi
fi

# Exit if no ip address or mac-address
if [ -z «$» ] || [ -z «$» ]; then
usage
exit 1
fi

# Exit if no computer name supplied, unless the action is ‘delete’
if [ «$» = «» ]; then
if [ «$» = «delete» ]; then
name=$(host -t PTR «$» | awk ‘‘ | awk -F ‘.’ ‘‘)
else
usage
exit 1;
fi
fi

И устанавливаем права на скрипт

sudo chmod 755 /usr/local/bin/dhcp-dyndns.sh

8.6 Модифицируем файл с настройками

8.6.1 Создаём бекап и модифицируем конфиг

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf_bak
sudo nano /etc/dhcp/dhcpd.conf

8.6.2 Заменяем содержимое на следующее. И опять с великим сожалением констатирую отсутствие тегов code или spoiler в дзене 🙁

subnet 192.168.1.0 netmask 255.255.255.0 < # Подсеть и маска на которую будет вещать dhcp сервер
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option time-offset 0;
option routers 192.168.1.2; # Шлюз
option domain-name «adminguide.lan»; # Имя домена
option domain-name-servers 192.168.1.100; # ДНС сервера
option netbios-name-servers 192.168.1.100; # NetBIOS сервера
option ntp-servers 192.168.1.100; # NTP сервера
pool < # Пулл адресов
max-lease-time 1800; # Максимальное время аренды в секундах
range 192.168.1.110 192.168.1.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(«adminguide.ru 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
execute(«/usr/local/bin/dhcp-dyndns.sh», «delete», ClientIP, «», «0»);
>

8.7 Редактируем права на запуск

Добавляем в конец файла перед закрывающей скобкой >

/usr/local/bin/dhcp-dyndns.sh rix,
/dev/tty wr,
/usr/sbin/samba rix,
/usr/bin/gawk rix,
/usr/bin/grep rix,
/usr/bin/hostname rix,
/usr/bin/logger rix,
/usr/bin/wbinfo rix,
/usr/bin/date rix,
/usr/bin/klist rix,
/usr/bin/host rix,
/proc/** wr,
/usr/bin/kinit rix,
/etc/dhcpduser.keytab rk,
/run/samba/winbindd/pipe wr,
/etc/dhcpduser.keytab rk,
/tmp/* wrk,
/usr/bin/nsupdate rix,

sudo /etc/init.d/apparmor stop && sudo /etc/init.d/apparmor start

Рестарт DHCP сервера

sudo service isc-dhcp-server stop && sudo service isc-dhcp-server start

8.8 Контроллер домена Ubuntu – Проверяем работу DHCP

В сети с ad-dc-1 у меня есть еще 1 ubuntu server с именем ag-dc-lin-client-1. Он не в домене, он не настраивался, он просто есть и он получает сетевые настройки по dhcp.
Пытаюсь пингануть этот клиентпо имени, результат нулевой.
Включаю этот сервер, жду пока загрузится. После того как сервер загрузился, пытаюсь снова, пинг идёт.
Команды ping ag-dc-lin-client-1 и ping ag-dc-lin-client-1.adminguide.lan теперь будут успешно пинговать эту машину по имени. Как и другие ваши устройства не находящиеся в домене и получающие адреса по DHCP от контроллера домена.

9. Заключение

Таким образом мы и подошли к концу. Никогда не стоит забывать, что для улучшений ещё очень большой простор, но этот вариант позволит админу иметь в небольшом офисе лицензионный Active Directory Domain Controller с DNS и DHCP серверами, способными обслуживать не только компьютеры присоединённые к домену, но и все машины вообще. Что позволит уйти от настройки локальных сервисов на статические ip адреса, и перейти на использование динамических ip адресов в связке с dns именами устройств.

Источник

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

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

  • Сервер времени linux для всех ос
  • Сервер виртуализации на linux
  • Сервер видеонаблюдения своими руками на linux
  • Сервер teamspeak 3 сервер на linux
  • Сервер linux какой выбрать