Assim, resolvi escrever esse post, discutindo alguns métodos e requerimentos para que isso funcione corretamente.
Existem três cenários que são os mais comuns (pelo que tenho percebido):
- O Servidor Openfire está rodando no mesmo servidor que o roteador/firewall.
- O Servidor Openfire está rodando em um outro servidor dentro da rede interna mas o mesmo não possui um IP “público”. Saiba mais sobre IPs de redes privadas aqui.
- O Servidor Openfire está rodando em outro servidor da rede interna, mas o mesmo possui um IP “público”.
- O domínio configurado no Openfire deve ser resolvido via DNS, tanto na rede interna quanto na Internet. Já vi várias pessoas que configuram o domínio como o IP do servidor na rede interna. Isso obviamente impede o uso via Internet, pois tal IP não é roteável. O mais indicado é que você use um nome como jabber.dominio.com.br, e que esse nome seja resolvido ou para o IP “público” do roteador/firewall ou para o IP do Servidor Openfire, caso ele possui um IP “público”. Nos casos onde se usa ADSL com IP dinâmico, uma dica é registrar um DNS dinâmico no no-ip ou no dyndns e depois pedir a empresa que cuida de seu DNS para configurar o jabber.dominio.com.br para ser um CNAME desse nome registrado.
- Em quaisquer das situações será necessário alterar as políticas de firewall de sua rede. Estou partindo do princípio que você tem acesso ao firewall de sua rede. Como trabalho com Linux, estou também supondo que você tenha conhecimento da ferramenta iptables.
- Caso você use um link ADSL, o ideal é que você tenha um modem que funcione em bridge, e que sua operadora utilize o protocolo PPPoE. Assim você poderá se livrar do NAT no modem, e não será necessário configurar o mesmo. Caso não seja seu caso, tal post não tem intenção de debater configurações de modens, por isso consulte a documentação de seu equipamento. Cabe citar que o fato de não ser PPPoE não quer dizer que não vá funcionar, mas sim que isso poderá envolver outros passos e técnicas que não serão discutidos aqui, para que seu acesso externo funcione.
Nessa situação, basta apenas liberar o acesso de entrada das portas que serão necessárias em seu servidor. Supondo que o domínio do Openfire configurado seja jabber.dominio.com.br você pode fazer isso com os seguintes comandos:
# XMPP e XMPP SSL
iptables -A INPUT -d jabber.dominio.com.br -p tcp –dport 5222:5223 -j ACCEPT
# Server 2 Server
iptables -A INPUT -d jabber.dominio.com.br -p tcp –dport 5269 -j ACCEPT
Caso 2 – O Servidor Openfire está rodando em um outro servidor dentro da rede interna mas o mesmo não possui um IP “público”.
Supondo que seu servidor Openfire esteja rodando na rede interna no IP 192.168.0.10, e que o domínio do Openfire configurado seja jabber.dominio.com.br podemos usar as seguintes regras pra desviar todo o tráfego vindo para as portas XMPP para o destino.
iptables -A FORWARD -d jabber.dominio.com.br -p tcp –dport 5222:5223 -j ACCEPT
iptables -A FORWARD -d jabber.dominio.com.br -p tcp –dport 5269 -j ACCEPTiptables -t nat -A PREROUTING -d jabber.dominio.com.br -p tcp –dport 5222:5223 -j DNAT –to-destination 192.168.0.10
iptables -t nat -A PREROUTING -d jabber.dominio.com.br -p tcp –dport 5269 -j DNAT –to-destination 192.168.0.10
Caso 3 – O Servidor Openfire está rodando em outro servidor da rede interna, mas o mesmo possui um IP “público”.
Supondo que seu servidor Openfire esteja rodando em um servidor que tem IP “público” (mas que não é o mesmo servidor roteador/firewall) e que o domínio do Openfire configurado seja jabber.dominio.com.br e ainda que esse nome resolva para o IP do servidor que roda o Openfire, podemos usar as seguintes regras pra aceitar todo o tráfego vindo para as portas XMPP do mesmo.
iptables -A FORWARD -d jabber.dominio.com.br -p tcp –dport 5222:5223 -j ACCEPT
iptables -A FORWARD -d jabber.dominio.com.br -p tcp –dport 5269 -j ACCEPT
Até a próxima.