LINUX.ORG.RU

Кластеризация Openfire для объединения пользователей двух доменов AD

 , ,


0

1

Коллеги, кто «кластеризовал» два (и более) XMPP серверов Openfire (ставлю врсию 4.1.3), присоединяйтесь. Как мне казалось, задача простая и тривиальная, но не тут-то было.

Ситуация типичная: 2 домена Active Directory , по серверу XMPP на домен. По LDAP каждый сервер Openfire читает каталоги каждого (своего) домена. Далее хочется сделать так, чтобы юзеры одного домена могли видеть и общаться с юзерами соседнего домена. Интернет говорит, что для этого нужен Clustering Plugin (ставлю версию 1.2.3): http://www.igniterealtime.org/projects/openfire/plugi.. Плюсиком «установил» этот плагин из списка плагинов в админке, эта процедура ничего не дала, кластеризация остаётся недоступной. Если почитать по ссылке, приведенной выше, то написано, что нужно получить/установить вот эту штуку от Oracle http://www.oracle.com/technetwork/ru/middleware/coher..

Скачал и установил, всё по пруфовой инструкции: - Unzip the coherence file and locate coherence.jar and coherence-work.jar in folder coherence/lib. - Copy coherence.jar and coherence-work.jar to [openfire_home]/plugins/clustering/lib. - Restart Openfire server.

Далее захожу в Server —> Server Manager —> Clustering и вижу тоже, что и ранее: установите плагин для кластеризации.

В error логе Openfire много записей:

2017.04.27 17:04:02 org.jivesoftware.openfire.container.PluginManager - An exception occurred while loading plugin 'clustering':
java.lang.ClassNotFoundException: com.jivesoftware.openfire.ClusteringPlugin
Мне ни о чем не говорит.

В общем, если мои выводы верны, то файл самого плагина clustering.jar скачивается, но не устанавливается. Пробовал распаковать его по аналоги с плагином, который ставится нормально, но успеха нет.

Скорее всего забыл ещё какой-то файлик. Ну и права проверь на файлы, чтоб юзер под которым запускается openfire мог их читать.

anonymous
()
Ответ на: комментарий от upcFrost

Можешь пояснить про два сервера отдельных? У меня и так они отдельные, но насколько я знаю, БД общая должна быть (но до этого я ещё не добрался, потому что не могу плагин установить даже на одном сервере).

yellowboy
() автор топика

сделать так, чтобы юзеры одного домена могли видеть и общаться с юзерами соседнего домена

Боюсь спросить - а просто s2s-то что, не работает?

gasinvein ★★★
()
Ответ на: комментарий от yellowboy

Обычное для xmpp соединение server-to-server. В openfire вроде для этого надо только какую-то службу включить, ну и серверы должны получать надлежащие SRV записи dns с информацией друг о друге.

gasinvein ★★★
()
Ответ на: комментарий от yellowboy

мне просто кажется что ты путаешь кластеризацию и server-to-server связь. кластер - это когда у тебя одинаковый конфиг и ты балансируешь нагрузку между серверами (скажем один домен и 100500 юзеров). server-to-server это чат между юзерами разных серверов/доменов. небольшое уточнение - помни что есть AD домен и XMPP домен. и это разные вещи. пример ниже

ман по s2s можно глянуть тут. по сути это просто два отдельных сервера, которые знают друг о друге и могут перекидывать сообщения юзеров между собой.

есть вариант именно сделать кластер и объединить конфиг. тогда любой юзер сможет регаться на любой сервер. если у тебя два разных домена - проще всего будет взять ADAM либо OpenLDAP (проще первый) и настроить их агрегировать домены скажем по верхней OU или еще как-нибудь,а сервера цеплять уже к агрегатору. в этом случае правда будут свои тонкости с SSO и вообще логином, потом что логин будет user\40addomain@xmppdomain. спарк это умеет сам, а вот с другими клиентами может быть сложнее.

по поводу одной БД - что ты под этим понимаешь? один физический сервер? или именно одна БД с одинаковыми таблицами? если первое - никто не мешает создать на нем две БД типа XMPP_AD1 и XMPP_AD2. если второе - зачем?

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 3)
Ответ на: комментарий от upcFrost

Провозился вчера с srv записями, к чему-то пришел, но не совсем верному. Вопрос (если есть понимание ситуации): как правильно расположить записи в dns? На данный момент я нафаршировал максимально, то есть в dns каждого домена сделал запись для своего xmpp сервера (который в этом домене), клиентскую запись на этот сервер и клиентскую запись на сервер в соседний домен. В соседнем домене аналогично, но почти уверен, что это неверно. Почему, ответить пока не могу, недопонимания остаются.

yellowboy
() автор топика
Ответ на: комментарий от yellowboy

http://prosody.im/doc/dns

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

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

SRV записи настроены, узлы из разных доменов резолвят друг друга. Сеансов сервера в админке не наблюдается. Пользователи друг друга не видят (из разных доменов).

yellowboy
() автор топика
Ответ на: комментарий от upcFrost

Правильность SRV записей проверяю при помощи dig с машин, на которых поднят openfire сервер. Всё резолвится правильно.

yellowboy
() автор топика
Ответ на: комментарий от yellowboy

картинка не грузит, вернее не грузит сам сервис. хз, перезалей на тот же imgur или еще куда.

если вслепую - попробуй посмотреть логи и, если там глухо, трафик

upcFrost ★★★★★
()
Ответ на: комментарий от yellowboy

Ок. А ты с одного сервера телнетом на порт другого можешь зацепить? А то помимо iptables есть еще скажем selinux. Ну и вообще - проверь трафик, есть ли запросы

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Я же выше писал, что порты доступны. ОК, завтра tcpdump запущу на интерфейсе, посмотрю летит ли что-то от соседа. По результату отпишусь. upcFrost, топик не покидай =)

yellowboy
() автор топика
Ответ на: комментарий от yellowboy

В плане не покидай? Мне уведомления приходят при ответе.

Порт может быть открыт, но емнип selinux может резать приложение если прав нет в политике. Ну или резолв криво идет где-то, тоже вариант

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

В плане не покидай? Мне уведомления приходят при ответе.

Понял)

SELinux отсутствует, у меня на двух серверах Debian 8.

Трафика на интерфейсе на порты 5269 и 5222 нет! При этом, если делаю телнет на эти порты (по имени и по IP), трафик идёт. Пробовал даже одновременно передернуть службу openfire на обоих серверах и смотреть в tcpdmp, трафика нет.

yellowboy
() автор топика
Ответ на: комментарий от yellowboy

а в логах хоть что-нибудь есть (Server/Server Manager/Logs-> Debug)? и что там с собственным фаерволом openfire (Server/Server Manager/Security), вернее с проверкой сертификата и прочим шифрованием?

я могу попытаться поднять в тесте две виртуалки, на одной бубунта, на другой центось (сорри, другие лень, эти у меня уже есть с чистыми снапшотами). но вечером.

кстати, кстати... а что ты имеешь ввиду под «юзеры друг друга не видят»? сообщение послать нельзя? или списки не набиваются? или что-то другое? потому что s2s ты увидишь только если есть активные юзеры, которым оно нужно

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 3)
Ответ на: комментарий от upcFrost

Server/Server Manager/Security не нашёл. Нашёл вот что:

http://imgur.com/1kEvkkX

Ну, если интересно и не лень, подними, ибо я уже не знаю чё...

Юзеры не видят друг друга (по одному юзеру в разных XMPP доменах). Группы, в которые входят эти юзеры, расшарены в админке для всех.

Логи дебага одного из серверов:

2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Trying to find a user's DN based on their username. sAMAccountName: bc1_17$, Base DN: DC="***",DC="LOCAL"... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Starting LDAP search... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... search finished 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Trying to find a user's DN based on their username. sAMAccountName: bc1_17$, Base DN: DC="***",DC="LOCAL"... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Starting LDAP search... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... search finished 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Trying to find a user's DN based on their username. sAMAccountName: bc1_17$, Base DN: DC="***",DC="LOCAL"... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Starting LDAP search... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... search finished 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Trying to find a user's DN based on their username. sAMAccountName: bc1_17$, Base DN: DC="***",DC="LOCAL"... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Starting LDAP search... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... search finished 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapGroupProvider - Trying to find group names using query: (&(&(cn=*)(objectClass=group))(member=CN="BC1_17",OU="\d0\9a\d0\be\d0\bc\d0\bf\d1\8c\d1\8e\d1\82\d0\b5\d1\80\d1\8b",OU="\d0\9a\d0\be\d1\80\d0\b7\d0\b8\d0\bd\d0\b0",DC="GLOBAL-STAFF",DC="LOCAL")) 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:34:19 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:34:26 org.jivesoftware.util.CertificateManager - CertificateManager: Subject Alternative Name Mapping returned [global-staff.local] 
2017.05.03 17:34:57 org.jivesoftware.util.CertificateManager - CertificateManager: Subject Alternative Name Mapping returned [global-staff.local] 
2017.05.03 17:35:03 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()... 
2017.05.03 17:35:03 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Warning: Using unencrypted connection to LDAP service! 
2017.05.03 17:35:03 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context... 
2017.05.03 17:35:03 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: ... context created successfully, returning. 
2017.05.03 17:35:10 org.jivesoftware.util.CertificateManager - CertificateManager: Subject Alternative Name Mapping returned [global-staff.local] 
2017.05.03 17:38:55 org.logicalcobwebs.proxool.openfire - Closing statement 19e3d5c5 (belonging to connection 2) automatically 
2017.05.03 17:39:52 org.jivesoftware.util.CertificateManager - CertificateManager: Subject Alternative Name Mapping returned [***.local]
yellowboy
() автор топика
Ответ на: комментарий от yellowboy

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

upcFrost ★★★★★
()
Ответ на: комментарий от yellowboy

Так, ну смотри, я поднял у себя две виртуалки, центось и убунта. версия жопенфаера 4.1.3 (последняя с оф сайта). клиент пиджин. все работает. конфы тоже.

конфигурация: внутренняя дб, днс руками вбит через hosts (включая conference.vmname), сертификаты самоподписанные (дефолт). юзеров заводил руками, добавление в ростер через клиент (на сервере не прописывал ростеры). и да - у меня есть и фаервол, и selinux в полном обвесе, открыл порт и нет проблем. это на центоси. на дебиане все чистое, так что считай что оба варианта работают

сразу несколько вопросов пока консоль перед глазами.

  • что вообще пишет клиент когда ты хочешь из клиента добавить человека с другого сервера?
  • сходи в Logs, уровень info. проверь там что он пишет
  • у тебя разрешены самоподписанные сертификаты? или у тебя они нормальные? настраивается в «сервер-сервер» (на твоем скрине слева), в расширенных настройках. вообще пошуруй там.
  • какая политика STARTTLS (в том же месте настраивается)? я поставил Optional, и Mutual Authentication - Wanted

кроме Mutual Authentication и разрешения self-signed cert ничего не менял от дефолта. почему-то оно тупануло когда попытался в первый раз добавить юзера из другого списка, мол «сервер не найден», на второй раз родило и больше не тупило (проверил раз 10).

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от upcFrost

что вообще пишет клиент когда ты хочешь из клиента добавить человека с другого сервера?

Я не добавлял руками ранее, ждал пока список с другого домена появится автоматически... Сейчас добавил, в tcpdump побежал трафик по нужным портам. Добавил друг друга из разных доменов, добавленный юзер (с двух сторон) висит в статусе «В ожидании» с знаком вопроса. Если написать ему, то сообщение отправляется, но на другой стороне не принимается, пишешь как будто в офф.

сходи в Logs, уровень info. проверь там что он пишет

Вот тут интересно:

2017.05.04 09:43:31 org.jivesoftware.openfire.spi.RoutingTableImpl - Will not route: Remote domain соседний_домен.local is not accessible according to our configuration (typical causes: server federation is disabled, or domain is blacklisted). 
2017.05.04 09:43:33 org.jivesoftware.openfire.spi.RoutingTableImpl - Will not route: Remote domain соседний_домен.local is not accessible according to our configuration (typical causes: server federation is disabled, or domain is blacklisted). 
2017.05.04 09:43:43 org.jivesoftware.openfire.spi.RoutingTableImpl - Will not route: Remote domain соседний_домен.local is not accessible according to our configuration (typical causes: server federation is disabled, or domain is blacklisted). 
2017.05.04 09:43:43 org.jivesoftware.openfire.spi.RoutingTableImpl - Will not route: Remote domain соседний_домен.local is not accessible according to our configuration (typical causes: server federation is disabled, or domain is blacklisted). 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Stopped. 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Started. 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Stopped. 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Started. 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Stopped. 
2017.05.04 09:46:17 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Started. 
2017.05.04 09:46:20 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Stopped. 
2017.05.04 09:46:20 org.jivesoftware.openfire.spi.ConnectionListener[socket_s2s] - Started. 

у тебя разрешены самоподписанные сертификаты? или у тебя они нормальные?

Самоподписные.

какая политика STARTTLS

Поставил как ты сделал, до этого было задизаблено (в процессе экспериментов).

yellowboy
() автор топика
Ответ на: комментарий от upcFrost

Так, всё получилось =) При ручном добавлении есть контакт, после того, как в контекстном меню нажал Подписаться, пришёл запрос авторизации соседу.

Теперь следующие вопросы будут: - можно ли без запроса (думаю да, там чё-то по этому поводу в настройках было)? - список всех пользователей из соседнего домена автоматом нельзя получить никак, чтобы руками не добавлять?

yellowboy
() автор топика
Ответ на: комментарий от yellowboy

Теперь следующие вопросы будут: - можно ли без запроса (думаю да, там чё-то по этому поводу в настройках было)?

вроде как что-то там было без авторизации

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

и да, и нет. по дефолту (и по стандарту) такой функции нету. есть плагины, которые умеют управлять ростерами, можно юзать их. можно писать напрямую в базу. еще я хз можно ли экспортнуть и клонировать ростер, скорее всего можно (в случае без авторизации работать будет).

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

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

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от yellowboy

Кстати есть еще один забавный вариант. мы так тоже делали до того как дошли до агрегатора. тут правда от случая зависит. у тебя есть корп почта? если да - совпадает ли хоть одно поле AD с именем в почте?

грубо говоря. допустим есть вася и федя, из доменов domA и domB. почта васи - vasya@domA.ru, феди - fedya@domB.ru. если твой xmpp-домен совпадает с доменом почты, то можно просто объяснить юзеру мол «хочешь поболтать - Add user, вбил почту, добавил». это обычно легко и быстро доходит до людей. единственный косяк может быть со всякими директорами, но блин, тут уж можно руками набить, тем более что у них обычно круг общения 15-20 человек из начальства.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Всё понял. Буду думать и пробовать.

Спасибо за содействие и помощь!

yellowboy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.