Установка вторичного сервера FreeIPA на CentOS и настройка репликации
Используемые термины: FreeIPA, CentOS.
Мы добавим второй сервер FreeIPA и настроим репликацию с первым. Предполагается, что у нас уже есть сам сервер — в противном случае, нужно сначала выполнить действия из инструкции Установка и использование FreeIPA на CentOS.
Процедура выполняется по следующему плану:
- Подключение вторичного сервера к FreeIPA в качестве клиента.
- Изменение принадлежности к группе для узла вторичного сервера.
- Настройка репликации.
Наша инструкция подойдет для Rocky Linux или CentOS 7.
Предварительная настройка
DNS
Время
Hostname
Брандмауэр
SELinux
Установка сервера FreeIPA и подключение к первичной ноде
Добавление нового сервера в группу ipaservers
Настройка репликации
Настройка hosts
Включение репликации данных LDAP
Установка репликации ipa-ca
Постнастройка
Устранение проблем
No DNA range defined
PKINIT certificate request failed
Topology does not allow server
Удаление узла
Дополнительные настройки
Создание SRV для NTP
Смена idrange
Смена CRL generation master
Подготовка вторичного сервера
Для работы FreeIPA принципиально важны правильные настройки времени, DNS и брандмауэра.
DNS
Клиентские компьютеры (а первое, что мы делаем, это настраиваем наш вторичный сервер в качестве клиента FreeIPA) должны быть настроены на использование DNS-сервера, который мы сконфигурировали на сервере FreeIPA во время его установки. В сетевых настройках указываем использовать наш сервер ipa для разрешения имен:
- Пример настройки сети в CentOS / Rocky Linux
- Настройка сети с помощью netplan (Debian, Ubuntu).
- В устаревающих системах на основе deb настройка выполняется в файле /etc/network/interfaces (опция dns-nameservers) или /etc/resolv.conf (опция nameserver).
После внесения изменений мы должны перезагрузить сетевые службы и, желательно, убедиться, что используется нужный DNS-сервер (с помощью команды nslookup или dig).
Время
Установим часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере используется московское время.
Затем устанавливаем и запускаем утилиту для синхронизации времени chrony.
yum install chrony
systemctl enable chronyd --now
Имя сервера
Для корректной работы вторичного сервера, необходимо, задать ему полное доменное имя (FQDN). Выполняем команду:
hostnamectl set-hostname ipa-server-2.dmosk.local
* где ipa-server-2.dmosk.local — имя сервера, которое будет использоваться.
Брандмауэр
Необходимо открыть несколько портов, которые используются службами FreeIPA:
firewall-cmd --permanent --add-port=53/{tcp,udp} --add-port={80,443}/tcp --add-port={88,464}/{tcp,udp} --add-port=123/udp --add-port={389,636}/tcp
firewall-cmd --reload
* где:
- 53 — запросы DNS.
- 80 и 443 — http и https для доступа к веб-интерфейсу управления.
- 88 и 464 — kerberos и kpasswd.
- 123 — синхронизация времени.
- 389 и 636 — ldap и ldaps соответственно.
SELinux
Отключаем SELinux командами:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Установка FreeIPA и подключение к основному серверу
Устанавливаем freeipa-server. Команды немного отличаются в зависимости от версии CentOS.
а) для Rocky Linux / CentOS 8:
dnf install @idm:DL1
yum install ipa-server ipa-server-dns
б) для CentOS 7:
yum install ipa-server ipa-server-dns
* предполагается, что мы будем реплицировать данные каталога + DNS, поэтому мы установим также пакет ipa-server-dns.
После установки пакетов ipa-server и ipa-server-dns можно переходить к подключению к основному серверу.
Выполним конфигурирование клиента командой:
ipa-client-install --mkhomedir --domain=dmosk.local --realm=DMOSK.LOCAL --server=ipa-server.dmosk.local
Если в нашей сети всего один FreeIPA, система предупредит, что автообнаружение серверов для аварийного переключения не может работать. Соглашаемся и отвечаем yes:
If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure.
Proceed with fixed values and no DNS discovery? [no]: yes
Система отобразить настройки LDAP в консоли, например:
Client hostname: ipa-server-2.dmosk.local
Realm: DMOSK.LOCAL
DNS Domain: DMOSK.LOCAL
IPA Server: ipa-server.dmosk.local
BaseDN: dc=dmosk,dc=local
Если эти настройки верны, отвечаем положительно на запрос Continue to configure the system with these values?
Continue to configure the system with these values? [no]: yes
Система спросит, от какого пользователя производить настройку — вводим admin:
User authorized to enroll computers: admin
... и пароль:
Password for admin@DMOSK.LOCAL:
Начнется процесс конфигурации — после его завершения:
...
Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring DMOSK.LOCAL as NIS domain.
Client configuration complete.
The ipa-client-install command was successful
... сразу проверим, что клиент может получать билет от сервера:
kinit admin
... и вводим пароль от пользователя admin.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
Ticket cache: KCM:0
Default principal: admin@DMOSK.LOCAL
Valid starting Expires Service principal
09/20/2021 16:23:05 09/21/2021 15:25:28 krbtgt/DMOSK.LOCAL@DMOSK.LOCAL
Клиент настроен. Удаляем полученный билет:
kdestroy
И переходим к добавлению нового узла в группу серверов IPA.
Настройка на сервере FreeIPA
На стороне сервера IPA нам необходимо добавить узел для нашего вторичного сервера в группу ipaservers. Это можно сделать в веб-интерфейсе (раздел Идентификация - Группы - Группы узлов). Но мы рассмотрим пример для работы из командной строки.
Авторизовываемся в консоли от администратора:
kinit admin
Добавляем наш хост в группу ipaservers:
ipa hostgroup-add-member ipaservers --hosts ipa-server-2.dmosk.local
Мы должны увидеть что-то на подобие:
Host-group: ipaservers
Description: IPA server hosts
Member hosts: ipa-server.dmosk.local, ipa-server-2.dmosk.local
-------------------------
Number of members added 1
Теперь можно переходить к настройке репликации.
Настройка репликации
Репликация будет настраиваться в несколько шагов:
- Настройка DNS для корректного разрешения имен в момент конфигурирования реплики.
- Настройка репликации каталога.
- Репликация центра сертификации.
Рассмотрим их выполнение подробнее.
1. Добавление записей в DNS
На сервере создаем запись PTR в обратной зоне DNS. Это можно сделать через веб-интерфейс в разделе Сетевые службы - DNS - Зоны DNS.
А также, в момент установки у нас еще нет корректно работающей DNS на вторичном узле, но система может требовать разрешения имени хоста — добавим нужную запись в hosts:
vi /etc/hosts
...
192.168.0.15 ipa-server.dmosk.local
192.168.0.16 ipa-server-2.dmosk.local
* предполагается, что у нас хост ipa-server с адресом 192.168.0.15 и ipa-server-2 с 192.168.0.16.
2. Репликация каталога
Выполняем команду:
ipa-replica-install --setup-dns --no-forwarders
Мы увидим ошибку, что невозможно разрешить обратное имя нашего хоста, либо игнорируем ее:
Lookup failed: Preferred host ipa-server-2.dmosk.local does not provide DNS.
Reverse DNS resolution of address 192.168.0.16 (ipa-server-2.dmosk.local) failed. Clients may not function properly. Please check your DNS setup. (Note that this check queries IPA DNS directly and ignores /etc/hosts.)
Continue? [no]: yes
,,, либо возвращаемся к вопросу добавления записи PTR — возможно, была допущена ошибка.
Ждем — в конечном итоге мы увидим:
...
The ipa-replica-install command was successful
3. Установка ipa-ca
После настройки репликации мы увидим предупреждение:
WARNING: The CA service is only installed on one server (ipa-server.dmosk.local).
It is strongly recommended to install it on another server.
Run ipa-ca-install(1) on another master to accomplish this.
Оно означает, что роль центра сертификации пока находится только на первом сервере. Рекомендуется ее также установить на вторичный сервер. Для этого запускаем команду:
ipa-ca-install
Дожидаемся ее выполнения. Мы должны увидеть:
...
Done configuring certificate server (pki-tomcatd).
Updating DNS system records
После настройки репликации
Наш вторичный сервер готов к работе и может выполнять запросы. Нам нужно провести несколько проверок и изменить сетевые настройки для серверов и клиентов.
Рассмотрим процесс подробнее.
1. Проверка работы DNS.
С любого компьютера в сети выполняем dns-запрос к новому серверу, например:
nslookup ipa-server.dmosk.local 192.168.0.16
* в данном примере мы делаем запрос адреса для первичного сервера через DNS вторичного.
Система должна вернуть ответ на подобие:
Server: 192.168.0.16
Address: 192.168.0.16#53
Name: ipa-server.dmosk.local
Address: 192.168.0.15
2. Проверяем состояние работы контроллеров.
Для этого есть утилита ipa-healthcheck. Ставим ее командой:
yum install ipa-healthcheck
Для общего анализа вводим:
ipa-healthcheck --failures-only
Для проверки репликации:
ipa-healthcheck --source ipahealthcheck.ds.replication --failures-only
3. Смена DNS.
И так, у нас дополнительный сервер IPA и DNS. Стоит добавить вторичный сервер, как альтернативный DNS на серверах и клиентах.
Делать новый сервер первичным или вторичным — дело десятое. Главное, чтобы клиенты могли отправлять соответствующие запросы.
Примеры настроек сети для различных систем:
- CentOS / Rocky Linux.
- Debian, Ubuntu с помощью netplan.
- В устаревающих системах на основе deb настройка выполняется в файле /etc/network/interfaces (опция dns-nameservers) или /etc/resolv.conf (опция nameserver).
Также если в нашей сети используется DHCP, добавляем для раздачи новый DNS.
Возможные ошибки
Рассмотрим некоторые ошибки, с которыми сталкивался я при работе с репликой FreeIPA.
No DNA range defined
С данной ошибкой мы, скорее всего, столкнемся при проверке ipa-healthcheck на вторичном сервере. Полный текст:
... No DNA range defined. If no masters define a range then users and groups cannot be created.
Причина: данное предупреждение нам говорит о том, что на вторичном сервере не задан диапазон DNA, который определяет начальный и конечный идентификаторы создаваемых объектов (UIDs). Таким образом, вторичный сервер не сможет использоваться для создания новых объектов.
Решение: задаем данный диапазон. Это можно сделать с мастера.
Выполняем команду:
ipa-replica-manage dnarange-show
Она нам покажет, какие на данный момент заданы диапазоны, например:
ipa-server.dmosk.local: 849400000-849599999
ipa-server-2.dmosk.local: No range set
* как видим, для нашего нового сервера ipa-server-2.dmosk.local диапазон не задан.
Посмотреть начальное значение и максимальное для количества идентификатором можно командой:
ipa idrange-find
Разбиваем наш диапазон на два:
ipa-replica-manage dnarange-set ipa-server.dmosk.local 849400000-849499999
ipa-replica-manage dnarange-set ipa-server-2.dmosk.local 849500000-849599999
Готово — теперь оба наших сервера могут выдавать идентификаторы для объектов.
PKINIT certificate request failed
Ошибка появляется в момент настройки CA на реплике на одном из этапов команды ipa-ca-install. Полный текст:
PKINIT certificate request failed: Certificate issuance failed (CA_UNREACHABLE: Server at https://ipa-server-2.dmosk.local/ipa/json failed request, will retry: 4016 (Failed to authenticate to CA REST API).)
Failed to configure PKINIT
Full PKINIT configuration did not succeed
The setup will only install bits essential to the server functionality
You can enable PKINIT after the setup completed using 'ipa-pkinit-manage'
При этом, сама настройка CA отрабатываем корректно.
Для решения выполним команду, которую нам рекомендует мастер настройки:
ipa-pkinit-manage enable
Topology does not allow server
При попытке удалить сервер из реплики командой ipa-replica-manage del мы можем получить ошибку:
Removal of 'servername1.domain.foo' leads to disconnected topology in suffix 'domain':
Topology does not allow server servername1.domain.foo to replicate with servers:
servername2.domain.foo
Причина: топология репликации построена через удаляемый сервер и если мы его удалим, то репликация станет невозможной.
Решение: на портале управления IPA переходим в раздел IPA-сервер - Топология - Topology Graph. Мы увидим визуальное предстваление, как постоен процесс репликации. Необходимо перестроить топологию таким образом, чтобы удаляемый сервер не играл в ней центральную роль.
Удаление узла
Если у нас появилась необходимость удалить один из серверов FreeIPA, мы должны удалить настройку реплики и после уже можно удалять саму роль FreeIPA.
Список текущих серверов можно посмотреть командой:
ipa-replica-manage list
Для удаления реплики вводим (на любом хосте FreeIPA, кроме удаляемого):
ipa-replica-manage del ipa-server.dmosk.local
* указываем, что мы отключаем реплику для сервера ipa-server.dmosk.local.
Теперь удаляем настройку для FreeIPA (на хосте, который нужно удалить):
ipa-server-install --uninstall -U
Готово.
На клиентских компьютерах не забываем убрать из списка DNS удаленный сервер.
Дополнительные настройки
Рассмотрим настройки, которые не являются обязательными, но могут оказаться полезными.
Создание SRV для сервиса синхронизации времени
Данная запись не является обязательной и не создается по умолчанию ни при поднятии мастера, ни при настройке реплики. Давайте это исправим:
ipa dnsrecord-add dmosk.local _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa-server.dmosk.local.
ipa dnsrecord-add dmosk.local _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa-server-2.dmosk.local.
* в данном примере мы создадим 2 записи типа SRV для двух наших серверов.
Смена диапазона идентификаторов
Выше мы уже говорили про диапазоны идентификаторов, которые задействуются при создании объектов. По умолчанию, создается диапазон с большими значениями. На практике, могут встретиться приложения, которые не смогут работать с учетными записями, имеющими данные большие значения.
Сменить настройки диапазона нельзя — система выдаст ошибку. Но мы можем создать новый диапазон и использовать его.
Создаем диапазон:
ipa idrange-add "New Range" --base-id=50000 --range-size=20000
* в данном примере мы создаем диапазон с названием New Range, первый идентификатор равен 50000, всего идентификаторов 20000.
Теперь мы можем назначить значения из нового диапазона для наших серверов:
ipa-replica-manage dnarange-set ipa-server.dmosk.local 50000-59999
ipa-replica-manage dnarange-set ipa-server-2.dmosk.local 60000-69999
Смена CRL generation master
Для инфраструктуры FreeIPA характерно использование только одного мастера по отзыву сертификатов (Certificate Revocation List). Проверить статус работы сервиса можно командой:
ipa-crlgen-manage status
Если мы видим:
CRL generation: enabled
... то данный сервер является мастером.
Если мы хотим перенести данную роль на другой сервер, то сначала мы отключаем crlgen на текущем сервере:
ipa-crlgen-manage disable
После разрешаем ее на новом сервере:
ipa-crlgen-manage enable