# 📘 Методическое руководство: Завершение миграции на Samba AD DC (`lin-dc1`)
> **Цель:** Полностью удалить остатки старого Windows DC (`win-dc`), очистить DNS и AD, применить корректную конфигурацию Samba и провести финальную диагностику домена `AU.TEAM`.
> **Требования:** Доступ `root`/`sudo`, учётные данные `administrator`, установленный и работающий Samba 4.x.

---

## 🔹 Этап 1. Синхронизация данных (если `win-dc` ещё доступен)
*Выполняется **до** вывода Windows DC из домена, чтобы гарантировать актуальность данных на `lin-dc1`.*

```bash
# Принудительная репликация всех разделов AD
samba-tool drs replicate lin-dc1 WIN-DC DC=DomainDnsZones,DC=au,DC=team --full
samba-tool drs replicate lin-dc1 WIN-DC DC=ForestDnsZones,DC=au,DC=team --full
samba-tool drs replicate lin-dc1 WIN-DC DC=au,DC=team --full

# Обновление всех DNS-записей на lin-dc1
samba_dnsupdate --all-names --verbose
```

✅ **Проверка:** Убедитесь, что `lin-dc1` успешно резолвится как контроллер домена:
```bash
host -t SRV _kerberos._udp.au.team 127.0.0.1
host -t SRV _ldap._tcp.au.team 127.0.0.1
```

---

## 🔹 Этап 2. Очистка DNS от записей старого DC
*Удаляем A-запись и NS-запись `win-dc`, чтобы клиенты не обращались к несуществующему серверу.*

```bash
# Удаление A-записи
samba-tool dns delete localhost au.team win-dc A 192.168.1.2 -U administrator

# Удаление NS-записи
samba-tool dns delete localhost au.team @ NS win-dc.au.team. -U administrator
```

🔍 **Контроль:** Вывод должен быть пустым.
```bash
samba-tool dns query localhost au.team @ ALL | grep -i win
```

---

## 🔹 Этап 3. Удаление остатков репликации из AD
*Ошибки `WERR_DS_DRA_BUSY` и `WERR_DS_ADD_REPLICA_INHIBITED` в логах указывают на то, что Samba пытается реплицироваться с удалённым `win-dc`. Необходимо удалить ссылку на его NTDS Settings.*

```bash
# 1. Поиск объекта репликации старого DC
ldbsearch -H /var/lib/samba/private/sam.ldb --cross-ncs "(&(objectClass=nTDSDSA)(cn=*))" distinguishedName | grep -i win
```

📌 *Если команда вернула строку вида `CN=NTDS Settings,CN=WIN-DC,CN=Servers...`, выполните удаление:*
```bash
# 2. Удаление объекта (замените DN на реальный из вывода выше!)
ldbmodify -H /var/lib/samba/private/sam.ldb << 'EOF'
dn: CN=NTDS Settings,CN=WIN-DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=au,DC=team
changetype: delete
EOF
```
💡 *Если `ldbmodify` сообщает, что объект не найден — значит, ссылка уже удалена. Ошибки исчезнут после перезапуска службы.*

---

## 🔹 Этап 4. Проверка конфигурации `smb.conf`
Убедитесь, что `/etc/samba/smb.conf` содержит корректные параметры. Особенно важен раздел `[global]`:

```ini
[global]
    netbios name = LIN-DC1
    realm = AU.TEAM
    server role = active directory domain controller
    workgroup = AU

    # Полный список обязательных служб для AD DC
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns

    # ⚠️ ВАЖНО: После удаления win-dc замените 192.168.1.2 на внешний DNS
    # (например, 8.8.8.8, 1.1.1.1 или IP маршрутизатора)
    dns forwarder = 192.168.1.2
```
🔄 *После редактирования: `systemctl restart smbd nmbd winbind` (если используется systemd-интеграция, достаточно перезапуска `samba`)*

---

## 🔹 Этап 5. Перезапуск служб и синхронизация времени
*Корректное время критично для Kerberos.*

```bash
# Синхронизация времени на lin-dc1
chronyc -a makestep

# Перезапуск Samba
systemctl restart samba.service
sleep 5

# Проверка логов на наличие критических ошибок
journalctl -u samba.service -n 20 --no-pager | grep -i error
```

🖥️ *Для Windows-клиентов/серверов (опционально):*
```cmd
net time \\192.168.1.3 /set /y
```

---

## 🔹 Этап 6. Комплексная диагностика (Чек-лист)

| № | Проверка | Команда | Ожидаемый результат |
|---|----------|---------|---------------------|
| 1 | **FSMO-роли** | `samba-tool fsmo show` | Все 5 ролей: владелец `CN=LIN-DC1,...` |
| 2 | **Репликация** | `samba-tool drs showrepl` | Без ошибок `FAIL`/`ERROR`. Для одиночного DC разделы могут не показываться (норма) |
| 3 | **DNS SRV-записи** | `host -t SRV _ldap._tcp.au.team 127.0.0.1`<br>`host -t SRV _kerberos._udp.au.team 127.0.0.1` | Возвращают `lin-dc1.au.team` |
| 4 | **Зоны и записи DNS** | `samba-tool dns zone list`<br>`samba-tool dns query localhost au.team @ ALL` | Зона `au.team` активна. Записи `win-dc` отсутствуют |
| 5 | **Пользователи и группы** | `samba-tool user list`<br>`samba-tool group list`<br>`samba-tool user show administrator` | Список загружается. `administrator` активен |
| 6 | **Аутентификация** | `kinit administrator@AU.TEAM`<br>`klist` | Билет Kerberos получен успешно |
| 7 | **Вхождение в домен** | `net ads testjoin` | `Join is OK` |
| 8 | **Уровень домена** | `samba-tool domain level show` | Отображает актуальный уровень (например, `2012 R2` или выше) |
| 9 | **Логи службы** | `journalctl -u samba.service -n 50 --no-pager` | Нет повторяющихся `ERROR`/`CRITICAL` |

---

## ⚠️ Важные примечания и рекомендации

1. **DNS Forwarder:** Параметр `dns forwarder = 192.168.1.2` в `smb.conf` указывает на старый Windows DC. После его полного вывода из сети замените его на внешний DNS-резолвер, иначе внутренние запросы к несуществующим зонам будут таймаутить.
2. **Резервное копирование:** Перед выполнением `ldbmodify` и удалением DNS-записей рекомендуется сделать бэкап:  
   `cp -a /var/lib/samba/private /var/lib/samba/private.backup`
3. **Одиночный DC:** Если в домене остался только `lin-dc1`, разделы репликации могут не отображаться в `samba-tool drs showrepl`. Это штатное поведение.
4. **Клиентские настройки:** Убедитесь, что на всех рабочих станциях в настройках сетевого адаптера указан `192.168.1.3` (или IP `lin-dc1`) как **единственный** DNS-сервер.
5. **Права:** Все команды `samba-tool` и `ldbsearch/modify` требуют запуска от `root` или через `sudo`, а также валидных доменных учётных данных (`-U administrator`).

---
📅 *Документ подготовлен для домена `AU.TEAM`, контроллер `LIN-DC1`. Дата актуализации: 19.04.2026*  
🔧 *При возникновении нестандартных ошибок предоставляйте вывод `journalctl -u samba.service --since "1 hour ago"` и `samba-tool drs showrepl` для анализа.*