Платформа: Alt Server p11 x86_64 (Обновленный до Sisyphus) Пакет: samba 4.22.11-alt3 Шаги: 1) Настроить SambaDC с DNS бэкендом BIND9_DLZ 2) Настроить FreeIPA домен 3) Донастроить Samba DC # FREEIPA_IP=<IP> # cat >> /etc/bind/options.conf <<EOF zone "freeipa.freeipadomain" in { type forward; forwarders { ${FREEIPA_IP}; }; }; EOF # sed -i 's/options {/options {\ndnssec-validation no;/' /etc/bind/options.conf # systemctl restart bind && sleep 5; systemctl status bind 4) Донастроить FreeIPA домен # SAMBA_IP=<IP> # sed -i "/dnssec-validation/s/yes/no/" /etc/bind/ipa-options-ext.conf && systemctl restart bind # kinit admin # ipa dnsforwardzone-add samba.sambadomain --forwarder=${SAMBA_IP} --forward-policy=first 5) Установить доверие FreeIPA с Samba (на freeipa сервере): # kinit admin # ipa trust-add --type=ad samba.sambadomain --admin Administrator --password --two-way=true Результат: FreeIPA: ipa: ERROR: Ошибка обмена данными с сервером CIFS: код "1225", сообщение "WERR_CONNECTION_REFUSED" (оба значения могут быть "None") SambaDC: сен 07 13:58:17 dc.samba.sambadomain winbindd[1444]: cm_connect_netlogon: Unable to connect to DC dc.freeipa.freeipadomain of domain FREEIPA over TCP/IP: NT_STATUS_CONNECTION_REFUSED. сен 07 13:58:17 dc.samba.sambadomain winbindd[1444]: Please check your firewall if it allows connections to port 135 and port range 49152-65535 over TCP/IP! При этом доверие устанавливается # ipa trustdomain-find samba.sambadomain Имя домена: samba.sambadomain Имя домена NetBIOS: SAMBA Идентификатор безопасности домена: S-1-5-21-748684808-1408575695-1925940339 Домен включён: True --------------------------------- Количество возвращённых записей 1 --------------------------------- Дополнительно: В P11 на версии samba 4.21.9-alt3.p11.1 ошибка НЕ воспроизводится
Необходимы дополнительные подробности: 1. Настройки сети - Включен ли ipv6 стек? https://www.freeipa.org/page/Active_Directory_trust_setup Нужно проверить вариант с отграничением конфигурации, чтобы не присваивать внешние IPv6-адреса: net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 2. Диагностика и логи - Нужен вывод журналов во время выполнения ipa trust-add: journalctl -f -u smbd -u winbind -u ipa - Будут полезны логи во в то же время (smbd и winbind нужно будет перезапустить): log level = 3 rpc:10 winbind:10
Ошибка так же воспроизводится и с Internal DNS (Ответ для Evgeny Sinelnikov на комментарий #1) > 1. Настройки сети > - Включен ли ipv6 стек? Ошибка воспроизводится и с включенным и с выключенным ipv6 > 2. Диагностика и логи > - Нужен вывод журналов во время выполнения ipa trust-add: > journalctl -f -u smbd -u winbind -u ipa > - Будут полезны логи во в то же время (smbd и winbind нужно будет > перезапустить): > log level = 3 rpc:10 winbind:10 Ничего не изменилось, логи аналогичные как и в первом комментарии Предполагаю, что регресс вызван коммитом https://git.altlinux.org/gitoskop/#/gears/s/samba.git/-/commit/f45bebd41221104629ad954919c5218fc5766d53
Так, погодите. (Ответ для obidinog@basealt.ru на комментарий #0) [...] > При этом доверие устанавливается > # ipa trustdomain-find samba.sambadomain > Имя домена: samba.sambadomain > Имя домена NetBIOS: SAMBA > Идентификатор безопасности домена: S-1-5-21-748684808-1408575695-1925940339 > Домен включён: True [...] То есть, вместо того, чтобы чинить freeipa на предмет обработки ошибок предлагается "чинить" симптомы, которые даже на функциональные возможности не влияют. Просто, чтобы ошибка вывода глаза не мозолила? Может правильнее freeipa запатчить?
Разобрал механизм ошибки. 1. Откуда ошибка на стороне IPA `ipa trust-add --two-way=true` после создания объекта доверия вызывает verify_trust() (ipaserver/dcerpc.py:1471): на Samba DC выполняется netr_LogonControl2Ex(NETLOGON_CONTROL_TC_VERIFY). Samba DC для этого поднимает secure channel к «контроллеру» домена FREEIPA, то есть к smbd на IPA-сервере. Результат pdc_connection_status = 1225 (WERR_CONNECTION_REFUSED) IPA показывает как ошибку. Это не проблема обработки ошибок в freeipa: IPA сообщает, что Samba DC не смог установить канал к IPA. 2. Почему в 4.22.11-alt3 это стало ошибкой Коммит f45bebd41221104629ad954919c5218fc5766d53 (апстримный https://bugzilla.samba.org/show_bug.cgi?id=15987, «Do not fallback to NCACN_NP Netlogon/LSA connections for AD domains») убирает откат на ncacn_np поверх SMB (445/tcp) для доменов с исходящим доверием, если ncacn_ip_tcp (135/tcp + динамический диапазон) недоступен. В 4.21.9 (p11) откат работал и маскировал недоступность TCP-транспорта. Регресс репортёр определил верно. В апстриме фикс вошёл в 4.23.9 и 4.24.2, в 4.22 апстрим его не брал, к нам он попал бэкпортом в alt3. 3. Это не косметика Объект доверия создан в обеих директориях, но канал Samba DC -> IPA не установлен. Со стороны Samba DC не будут работать LSA/Netlogon-запросы к IPA: резолв пользователей и SID домена FREEIPA через winbind, NTLM pass-through для IPA-пользователей на ресурсах Samba-домена, `samba-tool domain trust validate`. Kerberos-доступ IPA-пользователей может продолжать работать, cross-realm этого канала не требует. Просьба проверить на Samba DC: wbinfo --online-status wbinfo -n 'FREEIPA\admin' samba-tool domain trust validate freeipa.freeipadomain 4. Почему CONNECTION_REFUSED FreeIPA штатно поддерживает DCE/RPC по TCP: в реестровом конфиге Samba `rpc_server:tcpip = yes`, документация FreeIPA требует открыть к IPA 135/tcp и 1024-1300/tcp (https://www.freeipa.org/page/Active_Directory_trust_setup). REFUSED (не таймаут) означает: либо на IPA-хосте никто не слушает 135, либо firewall отвечает REJECT. Первое правдоподобно: IPA пишет в реестр устаревшие `rpc_daemon:epmd = fork` / `rpc_daemon:lsasd = fork`, а с Samba 4.16 RPC-сервисы живут в samba-dcerpcd, который smbd запускает по требованию. Нужно убедиться, что rpcd_epmapper у IPA на Sisyphus слушает TCP 135. Просьба к репортёру: на IPA-сервере: ss -ltnp | grep -E ':(135|1[0-2][0-9]{2}|1300) ' ps ax | grep -E 'samba-dcerpcd|rpcd_' с Samba DC: nc -zv dc.freeipa.freeipadomain 135 rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup состояние firewall на обоих хостах. 5. Что делать дальше Откатывать коммит в samba не стоит: апстрим Samba считает недоступность ncacn_ip_tcp у AD-партнёра ошибкой конфигурации, Fedora/RHEL с 4.23.9+ получат то же поведение, и патчить freeipa под это никто не будет. - Если 135 на IPA не слушается, это баг на freeipa: конфигурация Samba, которую пишет IPA, должна гарантировать epmapper на TCP с samba-dcerpcd. Тогда перевешиваем или клонируем на freeipa. - Если дело только в firewall, это NOTABUG с документированием: для доверия Samba DC <-> FreeIPA к IPA нужны 135/tcp и 1024-1300/tcp, раньше это скрывал SMB-fallback. - Для p11: как только туда придёт samba с этим фиксом, инсталляции с доверием к FreeIPA без открытого 135 сломаются так же. Стоит заранее отразить в документации по настройке доверия SambaDC-FreeIPA.
Я подготовил сборку с исправлением для freeipa: https://packages.altlinux.org/ru/tasks/433162/ Прошу потестировать на сизифе.
(Ответ для Evgeny Sinelnikov на комментарий #5) > Я подготовил сборку с исправлением для freeipa: > https://packages.altlinux.org/ru/tasks/433162/ > > Прошу потестировать на сизифе. Проверил с таском, ошибка продолжает воспроизводиться
(Ответ для Anton Farygin на комментарий #4) > Разобрал механизм ошибки. > Просьба проверить на Samba DC: > > wbinfo --online-status > wbinfo -n 'FREEIPA\admin' > samba-tool domain trust validate freeipa.freeipadomain [root@dc ~]# wbinfo --online-status BUILTIN : active connection SAMBA : active connection [root@dc ~]# wbinfo -n 'FREEIPA\admin' failed to call wbcLookupName: WBC_ERR_DOMAIN_NOT_FOUND Could not lookup name FREEIPA\admin [root@dc ~]# samba-tool domain trust validate freeipa.freeipadomain GENSEC backend 'gssapi_spnego' registered GENSEC backend 'gssapi_krb5' registered GENSEC backend 'gssapi_krb5_sasl' registered GENSEC backend 'spnego' registered GENSEC backend 'schannel' registered GENSEC backend 'ncalrpc_as_system' registered GENSEC backend 'sasl-EXTERNAL' registered GENSEC backend 'ntlmssp' registered GENSEC backend 'ntlmssp_resume_ccache' registered GENSEC backend 'http_basic' registered GENSEC backend 'http_ntlm' registered GENSEC backend 'http_negotiate' registered GENSEC backend 'krb5' registered GENSEC backend 'fake_gssapi_krb5' registered Using binding ncalrpc:DC[,auth_type=ncalrpc_as_system] LocalDomain Netbios[SAMBA] DNS[samba.sambadomain] SID[S-1-5-21-3512562242-3691368282-3675320642] ERROR: trusted domain object does not exist for domain [freeipa.freeipadomain] File "/usr/lib64/samba-dc/python3.12/samba/netcmd/domain/trust.py", line 1468, in run local_lsa.QueryTrustedDomainInfoByName(local_policy, > Просьба к репортёру: > > на IPA-сервере: > ss -ltnp | grep -E ':(135|1[0-2][0-9]{2}|1300) ' > ps ax | grep -E 'samba-dcerpcd|rpcd_' [root@dc ~]# ss -ltnp | grep -E ':(135|1[0-2][0-9]{2}|1300) ' [root@dc ~]# ps ax | grep -E 'samba-dcerpcd|rpcd_' 1984 pts/0 S+ 0:00 grep --color=auto -E samba-dcerpcd|rpcd_ > с Samba DC: > nc -zv dc.freeipa.freeipadomain 135 > rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup [root@dc ~]# rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup WARNING: The option -k|--kerberos is deprecated! do_cmd: Could not initialise epmapper. Error was NT_STATUS_CONNECTION_REFUSED > состояние firewall на обоих хостах. Отключено
Дублирую информацию из рассылки, которую нашел по этой проблеме: Способ запуска вручную epmapper на сервере FreeIPA: - в /etc/samba/smb.conf в global добавить "rpc start on demand helpers = no" - запустить /usr/lib/samba/samba-dcerpcd -i --libexec-rpcds После этого у меня получилось построить доверие к Samba 4.22, при этом сама FreeIPA оставалась на старой 4.21. В Samba rpc_client запускает samba-dcerpcd при обращении от smbd или winbind с параметром --np-helper разово только в случае если он не запущен. И если никто с ним не связывается в течение 10 секунд, то служба выключается, т.к. для rpc_client она более не нужна. То есть smbd, судя по всему, не запускает dcerpcd в полноценном режиме с epmapper и прочими службами, чтобы они оставались работать на прослушивание. Похоже, что нужно запускать dcerpcd как отдельную службу для случая с FreeIPA/доменом NT4 и т.п.. Вот эта запись в Release Notes и натолкнула на такой вариант: https://wiki.samba.org/index.php/Samba_Features_added/changed#New_samba-dcerpcd_binary_to_provide_DCERPC_in_the_member_server_setup Апстрим не в курсе о такой проблеме, т.к. коммит, который вызывал регресс и подсветит отсутствие epmapper на FreeIPA, будет доступен только в версии 4.25. Никто еще не проверял с ним работу FreeIPA (по крайней мере публично).
В общем, откат патчей никак не помог: # ipa trust-add --type=ad samba.testdomain --admin Administrator --password --two-way=true Active Directory domain administrator's password: ipa: ERROR: CIFS server communication error: code "3221225581", message "The attempted logon is invalid. This is either due to a bad username or authentication information." (both may be "None") сен 18 21:58:40 dc.freeipa.testdomain smbd[97659]: [2026/09/18 21:58:40.461478, 0, pid=97659] ../../source3/auth/auth_util.c:1945(check_account) Sep 18 21:58:40 dc.freeipa.testdomain smbd[97659]: [2026/09/18 21:58:40.461478, 0, pid=97659] ../../source3/auth/auth_util.c:1945(check_account) сен 18 21:58:40 dc.freeipa.testdomain smbd[97659]: check_account: Failed to convert SID S-1-5-21-3368033394-2376468226-27858894-516 to a UID (dom_user[FREEIPA\cifs/dc.freeipa.testdomain]) Sep 18 21:58:40 dc.freeipa.testdomain smbd[97659]: check_account: Failed to convert SID S-1-5-21-3368033394-2376468226-27858894-516 to a UID (dom_user[FREEIPA\cifs/dc.freeipa.testdomain]) А вот сервис, да, нужно запускать... Нужно его как-то добавить в перечень запускаемых сервисов. И с этим патчем всё заработало. # ipa trust-add --type=ad samba.testdomain --admin Administrator --password --two-way=true Active Directory domain administrator's password: ------------------------------------------------- Re-established trust to domain "samba.testdomain" ------------------------------------------------- Realm name: samba.testdomain Domain NetBIOS name: SAMBA Domain Security Identifier: S-1-5-21-3083772176-1358977590-237535033 Trust direction: Two-way trust Trust type: Active Directory domain Trust status: Established and verified А вот эта шляпа - ну, просто тупиковая проверка - и не отрабатывает, и не определяет ничего полезного: # rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup WARNING: The option -k|--kerberos is deprecated! do_cmd: Could not initialise epmapper. Error was NT_STATUS_NOT_FOUND ____________________ Итого и не в карты, а в домино; и не выиграл, а проиграл.
Тем не менее проблема с найденным изначально патчем проявилась, а сборка alt4 оказалась актуальной. [root@dc apt]# ipa trust-add --type=ad samba.testdomain --admin Administrator --password --two-way=true Active Directory domain administrator's password: ------------------------------------------------- Re-established trust to domain "samba.testdomain" ------------------------------------------------- Realm name: samba.testdomain Domain NetBIOS name: SAMBA Domain Security Identifier: S-1-5-21-3083772176-1358977590-237535033 Trust direction: Two-way trust Trust type: Active Directory domain Trust status: Established and verified [root@dc apt]# rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup WARNING: The option -k|--kerberos is deprecated! do_cmd: Could not initialise epmapper. Error was NT_STATUS_NOT_FOUND [root@dc apt]# hostname dc.freeipa.testdomain [root@dc apt]# Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: [2026/09/19 01:28:27.169679, 0, pid=108884, traceid=31] ../../source3/winbindd/winbindd_cm.c:3225(cm_connect_lsat) Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: cm_connect_lsat: Unable to connect to DC dc.samba.testdomain of domain SAMBA over TCP/IP: NT_STATUS_NOT_FOUND. Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: Please check your firewall if it allows connections to port 135 and port range 49152-65535 over TCP/IP! Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: [2026/09/19 01:28:27.174058, 0, pid=108884, traceid=34] ../../source3/winbindd/winbindd_cm.c:3225(cm_connect_lsat) Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: cm_connect_lsat: Unable to connect to DC dc.samba.testdomain of domain SAMBA over TCP/IP: NT_STATUS_NOT_FOUND. Sep 19 01:28:27 dc.freeipa.testdomain winbindd[108884]: Please check your firewall if it allows connections to port 135 and port range 49152-65535 over TCP/IP!
После апдейта до alt4 валидация на samba, всё равно отваливается: # samba-tool domain trust validate freeipa.testdomain debug_lookup_classname: Unknown classname[rpc] -> adding it... GENSEC backend 'gssapi_spnego' registered GENSEC backend 'gssapi_krb5' registered GENSEC backend 'gssapi_krb5_sasl' registered GENSEC backend 'spnego' registered GENSEC backend 'schannel' registered GENSEC backend 'ncalrpc_as_system' registered GENSEC backend 'sasl-EXTERNAL' registered GENSEC backend 'ntlmssp' registered GENSEC backend 'ntlmssp_resume_ccache' registered GENSEC backend 'http_basic' registered GENSEC backend 'http_ntlm' registered GENSEC backend 'http_negotiate' registered GENSEC backend 'krb5' registered GENSEC backend 'fake_gssapi_krb5' registered Using binding ncalrpc:DC[,auth_type=ncalrpc_as_system] LocalDomain Netbios[SAMBA] DNS[samba.testdomain] SID[S-1-5-21-3083772176-1358977590-237535033] LocalTDO Netbios[FREEIPA] DNS[freeipa.testdomain] SID[S-1-5-21-3368033394-2376468226-27858894] Using binding ncalrpc:DC[,auth_type=ncalrpc_as_system] OK: LocalValidation: DC[\\dc.freeipa.testdomain] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED OK: LocalRediscover: DC[\\dc.freeipa.testdomain] CONNECTION[WERR_OK] resolve_lmhosts: Attempting lmhosts lookup for name _ldap._tcp.freeipa.testdomain<0x0> RemoteDC Netbios[DC] DNS[dc.freeipa.testdomain] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV] Using binding ncacn_np:dc.freeipa.testdomain resolve_lmhosts: Attempting lmhosts lookup for name dc.freeipa.testdomain<0x20> Acquiring initiator credentials failed: smb_gss_krb5_import_cred failed: No such file or directory gensec_spnego_client_negTokenInit_step: gssapi_krb5: creating NEG_TOKEN_INIT for cifs/dc.freeipa.testdomain failed (next[(null)]): NT_STATUS_UNSUCCESSFUL ERROR: REMOTE_DC[dc.freeipa.testdomain]: failed to connect netlogon server - ERROR(0xC0000001) - {Operation Failed} The requested operation was unsuccessful. File "/usr/lib64/samba-dc/python3.12/samba/netcmd/domain/trust.py", line 1543, in run remote_netlogon = self.new_remote_netlogon_connection() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/samba-dc/python3.12/samba/netcmd/domain/trust.py", line 220, in new_remote_netlogon_connection return netlogon.netlogon( ^^^^^^^^^^^^^^^^^^ ______ # samba-tool domain trust validate freeipa.testdomain -U administrator debug_lookup_classname: Unknown classname[rpc] -> adding it... GENSEC backend 'gssapi_spnego' registered GENSEC backend 'gssapi_krb5' registered GENSEC backend 'gssapi_krb5_sasl' registered GENSEC backend 'spnego' registered GENSEC backend 'schannel' registered GENSEC backend 'ncalrpc_as_system' registered GENSEC backend 'sasl-EXTERNAL' registered GENSEC backend 'ntlmssp' registered GENSEC backend 'ntlmssp_resume_ccache' registered GENSEC backend 'http_basic' registered GENSEC backend 'http_ntlm' registered GENSEC backend 'http_negotiate' registered GENSEC backend 'krb5' registered GENSEC backend 'fake_gssapi_krb5' registered Using binding ncalrpc:DC[,auth_type=ncalrpc_as_system] LocalDomain Netbios[SAMBA] DNS[samba.testdomain] SID[S-1-5-21-3083772176-1358977590-237535033] LocalTDO Netbios[FREEIPA] DNS[freeipa.testdomain] SID[S-1-5-21-3368033394-2376468226-27858894] Using binding ncalrpc:DC[,auth_type=ncalrpc_as_system] OK: LocalValidation: DC[\\dc.freeipa.testdomain] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED OK: LocalRediscover: DC[\\dc.freeipa.testdomain] CONNECTION[WERR_OK] resolve_lmhosts: Attempting lmhosts lookup for name _ldap._tcp.freeipa.testdomain<0x0> RemoteDC Netbios[DC] DNS[dc.freeipa.testdomain] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV] Using binding ncacn_np:dc.freeipa.testdomain resolve_lmhosts: Attempting lmhosts lookup for name dc.freeipa.testdomain<0x20> Password for [SAMBA\administrator]: Error reading smb_krb5 reply packet: NT_STATUS_CONNECTION_REFUSED from fe80::be24:11ff:fe1b:d702 Error reading smb_krb5 reply packet: NT_STATUS_CONNECTION_REFUSED from 2a0c:88c0:2:2000:be24:11ff:fe1b:d702 Error reading smb_krb5 reply packet: NT_STATUS_CONNECTION_REFUSED from fe80::be24:11ff:fe1b:d702 Error reading smb_krb5 reply packet: NT_STATUS_CONNECTION_REFUSED from 2a0c:88c0:2:2000:be24:11ff:fe1b:d702 ERROR: REMOTE_DC[dc.freeipa.testdomain]: NETLOGON_CONTROL_TC_VERIFY failed - ERROR(0x00000005) - WERR_ACCESS_DENIED File "/usr/lib64/samba-dc/python3.12/samba/netcmd/domain/trust.py", line 1549, in run remote_netlogon.netr_LogonControl2Ex(remote_server,
(Ответ для Evgeny Sinelnikov на комментарий #9) > А вот эта шляпа - ну, просто тупиковая проверка - и не отрабатывает, и не > определяет ничего полезного: > > # rpcclient -k ncacn_ip_tcp:dc.freeipa.freeipadomain -c epmlookup > WARNING: The option -k|--kerberos is deprecated! > do_cmd: Could not initialise epmapper. Error was NT_STATUS_NOT_FOUND После запуска dcerpcd на FreeIPA, эта команда у меня успешно завершилась и вывела список. (Ответ для Evgeny Sinelnikov на комментарий #11) > После апдейта до alt4 валидация на samba, всё равно отваливается: Валидация без использования Kerberos у меня завершилась на том же месте, надо проверять. При указании пользователя завершилась с ошибкой WERR_NOT_SUPPORTED, а не WERR_ACCESS_DENIED. Скорее всего, что при валидации в параметре -U был указан локальный админ (пароль запрошен для SAMBA\administrator) вместо удаленного (FREEIPA\admin).