segunda-feira, 18 de agosto de 2008

Openfire: comunicação entre servidores

Um ótimo recurso do protocolo XMPP é a possibilidade dos servidores conversarem entre si, permitindo assim a integração de diferentes domínios Jabber.

Exemplificando

Vamos supor que tenhamos dois servidores Jabber de domínios diferentes. Vamos dizer que o domínio jabber de um deles é jabber.dominio.com.br e o do outro é jabber.outrodominio.com.br. Imagine que em um dos servidores exista uma conta (JID) marcelo@jabber.dominio.com.br e no outro servidor exista a conta renata@jabber.outrodominio.com.br. Com a comunicação entre servidores, é possível que o usuário marcelo fale com a usuária renata sem que tenha de possuir uma conta no domínio jabber.outrodominio.com.br e vice-versa. Isso é extremamente prático e eficiente principalmente em empresas que possuam vários servidores/domínios XMPP (sejam eles locais ou remotos), como também para empresas que tenham clientes com servidores Jabber próprios (que é o caso da Propus). Explicando: com a minha conta jabber da Propus eu adiciono os usuários de nossos clientes, sem a necessidade de ter uma conta em cada um dos servidores. Isso é realmente muito útil.

Como configurar o Openfire para isso ?

A configuração é extremamente simples. Em primeiro lugar é necessário que os servidores consigam se comunicar entre si pela porta 5269 (jabber s2s - server to server). Além disso, é preciso que ambos consigam resolver o DNS dos domínios jabber configurados no Openfire (tanto do domínio local quanto do remoto), caso contrário não conseguirão se conectar.

Logue então no console admin do Openfire e vá em Servidor -> Configurações do Servidor - > Servidor para Servidor. Lá você irá se deparar com várias opções. Veja:
  • Serviço ativado: ativa ou desativa a comunicação servidor para servidor.


  • Configurações de Conexões ociosas: nessa opção você pode forçar que a conexão entre os servidores seja desativada após um período de inatividade (configurável).


  • Permitido conectar: essa opção é muito importante. Nela você irá determinar que servidores podem ou não conectar no seu servidor. Existem aqui duas opções:
  1. Qualquer um: com essa opção, qualquer servidor poderá se conectar ao seu servidor.
  2. Lista Branca: com essa opção, você irá definir uma lista de domínios jabber que tem permissão de conexão ao seu servidor. O domínio jabber é a porção que vem depois do @ no JID do usuário. Ex: marcelo@xmpp.empresa.com.br. O domínio jabber é xmpp.empresa.com.br.


  • Não permitir conexão: aqui você deve informar os servidores que não podem se conectar ao seu servidor. Essa lista só faz sentido se você escolher a opção Qualquer um no item Permitido Conectar.


Do meu ponto de vista, a lista branca é um recurso muito importante pelo fato de poder garantir o uso correto do comunicador (principalmente em ambiente empresarial), negando a integração com outros servidores (como Google Talk, por exemplo).
Essa é uma feature antiga do Openfire (existe desde os tempos do Wildfire), que foi um dos primeiros (senão o primeiro) servidores XMPP a possuir tal recurso. Mais recentemente, o servidor XMPP ejabberd incorporou o recurso em sua versão 2.0, enquanto que outros servidores como jabberd 1.4 e jabberd 2, até onde eu conheço (pois não os uso há muito tempo) , não possuem tal recurso, permitindo a conexão com qualquer outro servidor.

Fica aí então a dica para quem quer integrar vários servidores Openfire distintos, que apesar de ser um recurso simples e de fácil configuração, acaba dando trabalho para muitos administradores da ferramenta.

PS: o post foi atualizado em 30/05/2010, com algumas novas explicações.

29 comentários:

  1. Se os outros servidores Jabber não têm a opção para barrar indesejáveis (ou melhor liberar só os que são aceitáveis) sempre há a possibilidade de usar o iptables para barrá-los. De qq forma é sempre bom ter o conhecimento das possibilidades e limitações de cada serviço.

    ResponderExcluir
  2. Realmente é uma possibilidade.

    Bloquear a porta 5269 e liberar somente para IPs específicos. Funcionaria também.

    ResponderExcluir
  3. Um servidor Openfire ver 3.5.2 pode conectar sem problemas em outro servidor com ver 3.6.0

    ResponderExcluir
  4. Sim, é totalmente possível.

    Você pode conectar qualquer servidor Jabber (ejabberd, jabberd, gmail, openfire, wildfire, etc..) a qualquer outro usando o s2s. E não importa a versão.

    Um abraço,

    ResponderExcluir
  5. Prezado Marcelo,
    Estamos na fase de testes da solução openfire+spark em nossa empresa.
    Temos uma floresta microsoft em 3 cidades: BH, RJ e SP. Já configuramos os servidores openfire de BH e de SP conforme as intruções deste tutorial. Porém não estamos conseguindo adicionar contatos de usuários de outro dominio. Como seria para adicionar o contato quando ele for de outro dominio? login@sp.empresa.com.br ou login@ip do server openfire? Quando é usuário do meu proprio dominio está ok. Basta colocar o login que ele mesmo já puxa o nome completo.
    Poderia nos dar uma dica?
    Agradecemos pela atenção.
    Julio.

    ResponderExcluir
  6. Júlio.

    Você deve adicionar o usuário como um jid (jabber ID), ou seja, por exemplo mhterres@sp.empresa.com.br.

    Com isso suponho que teu openfire tenha sido configurado com o nome sp.empresa.com.br e que esse nome consiga ser resolvido corretamente pelo DNS. Além disso, também é preciso que os servidores se conectem diretamente na porta 5269 e que o openfire esteja configurado com permissão para esse domínio no server 2 server.

    Aguardo teu retorno para saber se funcionou :-)

    []s

    ResponderExcluir
  7. Prezado Marcelo
    Tenho instalado o open-fire 3.6.2 e spark nas estações de minha rede. Dentro do escritório funciona perfeitament. Contudo surgiu a necessidade de contactar com mensagem instantanea em outro endereço externo.
    Criei um Host pelo no-ip( tenho serviço velox com ip dinamico) e tentei usálo para que o computador externo achasse meu servidor mas não funcionou.
    Gostaria de saber se é possível esta comunicação sem ter que instalar um outro servidor openfire em local externo?

    Desd ejá muito grato

    ResponderExcluir
  8. É preciso que você consiga acessar externamente a porta 5222 (ou 5223 se estiver usando SSL) de seu servidor.

    Talvez seja preciso fazer algo no modem ou no firewall pra que isso ocorra, mas aí depende de seu servidor.

    []s

    ResponderExcluir
  9. Bom dia Marcelo,

    estou tentando fazer servidores integrados ao AD (alocados em unidades diferentes da empresa que trabalho) "conversarem" (server 2 server) e fazer com que os usuários de cada domínio possam se comunicar entre si... segui todos os passos descritos por você mas não tive sucesso. Testei a comunicação na porta 5269 e todos os servidores respondem (não há firewall entre eles, estao ligados por MPLS). O que fazer? se possível entre em contato comigo no email djcelsodub@gmail.com... estou com o pescoço a prêmio pois vendi "o peixe" de que era possível essa integração (depois de ter pesquisado assunto)... grato desde já.

    Celso S. Faria
    Americana/SP

    ResponderExcluir
  10. bom dia quando tento add outro user do outro servidor a seguinte mensagem aparece mas não consigo resolver

    * Aviso: Usuários remotos ou entidades devem aceitar subscriçõse de presença automaticamente.

    ResponderExcluir
  11. É necessário que o usuário aceite que outros usuários o adicionem de forma automática.

    Isso precisa ser configurado no cliente.

    []s

    ResponderExcluir
  12. Desculpe como faço isso???

    Estou batendo cabeça nesse ponto pode me ajudar Marcelo?

    Uso o spark como client

    ResponderExcluir
  13. Oi Rodrigo.

    Não saberia te dizer pois não uso Spark.

    Mas deve ser uma opção que existe nas preferências da conta.

    []s

    ResponderExcluir
  14. Bom dia pessoal, gostaria de saber se tem como tipo o dominio é www.meudominio.com.br o nome do servidor é www eu gostaria que os usuário logasse com usuario@meudominio.com.br é possivel?

    ResponderExcluir
  15. Olá.

    Para isso funcionar você precisa configurar o "Nome do Servidor" no Openfire como meudominio.com.br.

    Também é preciso que meudominio.com.br resolva para o IP externo do teu servidor.

    []s

    ResponderExcluir
  16. Ola Marcelo.
    Por favor, verifique se pode me ajudar.
    Estou tentando realizar a integração do openfire entre 2 empresas. Contudo, as empresas só possuem domino local (@empresa1.local e @empresa2.local), é possivel interliga-los?
    Ambas as empresas possuem IP fixo. Ja fizemos as liberações da porta 5269 e incluimos os endereços dos servidores, mas nao conseguimos conectar.

    ResponderExcluir
    Respostas
    1. Tal integração não funcionará se você quiser utilizar um link Internet normal para comunicação com os domínios locais, pois um servidor não saberá como chegar no outro.

      O que você pode fazer é colocar um DNS dinâmico nas pontas (só para ter um nome que resolva para um válido da internet) e mandar ele resolver no IP fixo. Ex: empresa1xmpp.no-ip.org resolve para o IP fixo da empresa 1 e empresa2xmpp.no-ip.org resolve para o IP fixo da empresa2.

      Depois será preciso configurar o Openfire de cada local para utilizar o novo nome (empresa1xmpp.no-ip.org ao invés de empresa1.local e empresa2xmpp.no-ip.org ao invés de empresa2.local).

      O problema é que o nome do servidor não pode ser alterado. O mesmo só pode ser indicado no momento da instalação inicial. Para alterá-lo será necessário mexer no DB, mas aí o buraco é mais embaixo e a chance de algo dar errado é grande.

      Eu consideraria uma instalação do zero para resolver esta questão.

      []s

      Excluir
  17. Ola,

    Já configuramos o open fire e spark para funciona na filiam e matriz da empresa que ficam em cidades diferentes. Temos VELOX nas duas empresas.

    O que eu posso fazer para que os usuários de uma empresa possam teclar com os da outra?

    Se minha pergunta estiver redundante, me desculpem. E que não sou tão experiente para posso aprender.

    ResponderExcluir
  18. Oi Warley.

    Você deve seguir as indicações deste post. Aqui constam todas as informações necessárias para conseguir integrar os servidores (que precisam ser de domínios diferentes).

    Se tiver dúvidas, pode me mandar um e-mail (tem ali na barra esquerda).

    []s

    ResponderExcluir
  19. Olá chará

    Eu configurei dois servidores openfire 3.7.1 baseado no linux e não obtive sucesso. Pedi ajuda no site da Ignite mas não obtive resposta.

    http://community.igniterealtime.org/message/225784#225784

    Você poderia me dar uma luz nessa?

    Desde já obrigrado Marcelo

    ResponderExcluir
  20. Olá.

    Se entendi bem você configurou o domínio jabber (o que vem após o @ no JID) dos Openfires com o nomes servmess e servmess1, correto?

    Te sugiro também adicionar os registros SRV no teu servidor DNS:

    http://mundoopensource.blogspot.com.br/2011/05/openfire-e-os-registros-srv-do-dns.html

    []s

    ResponderExcluir
  21. Ola boa tarde eu consegui certinho aqui so que no outro server a pessoa fica aparecendo off line no outro server

    ResponderExcluir
    Respostas
    1. Olá.

      Logue no console admin e vá em Sessões -> Sessões do servidor.

      Verifique então se os servidores estão se comunicando nas duas direções (setas verdes para ambos lados).

      []s

      Excluir
  22. Ola Marcelo isso ta sim uma seta verde e outra azul

    ResponderExcluir
    Respostas
    1. Então deve haver algum problema de comunicação entre os servidores.

      []s

      Excluir
  23. Respostas
    1. Dá uma olhada nos logs de ambos servidores.

      Lá deve ter uma pista do problema.

      []s

      Excluir
  24. deu certo aqui, mais consegui so adicionando o amigo de outro server e pede autotizacao quando add no server mais funfo certinho.

    ResponderExcluir