Envio de archivos con gaim protocolo jabber desde red local

Ya he conseguido que funcione el envio de archivos con gaim y protocolo jabber. Con la ayuda del sniffer Ethereal he observado como funciona el protocolo jabber para el envio de archivos y he visto que el que intenta enviar un archivo realiza una petición similar a:

<query xmlns='http://jabber.org/protocol/bytestreams' sid='XXXXXXX'>
  <streamhost jid='Marble@bulmalug.net/Gaim' host='192.168.0.5' port='5500'/>
</query>

Como se puede observar esta diciendo que se conecte al puerto 5500, ip 192.168.0.5!!! Es decir, da la ip interna de la red local a los usuarios que estan en internet que por supuesto no se van a poder conectar, deberia dar la ip pública. Para solucionarlo en el gaim vamos a Herramientas -> Preferencias -> Red, se desactiva autodetectar y donde se especifica la IP Pública he puesto un dominio dinámico que se actualiza cada vez que me conecto a internet. En el rango de puertos he puesto entre 5500 y 5502, por supuesto he hecho que el firewall (iptables) del gateway de mi red redirija esos puertos a mi màquina y que el firewall de mi màquina acepte el trafico.

A continuación se puede ver que la petición jabber envia el host que apunta a mi IP:

<query xmlns='http://jabber.org/protocol/bytestreams' sid='XXXXXXX'>
  <streamhost jid='Marble@bulmalug.net/Gaim' host='hostvirtual.homeip.net' port='5500'/>
</query>

Quien tenga ip dinámica como yo y quiera un dominio que apunte siempre a su ip (se ha de actualizar cada vez que se realiza una nueva conexion a internet) puede conseguirlo en dyndns y usar ddclient para actualizar la ip de forma automàtica.

Os pongo las reglas del firewall iptables por si a alguien le interesa:

En el gateway que tiene acceso a internet:

$IPTABLES -t filter -A INPUT -i $INTERNET_INTERFACE -p tcp --dport 5500:5502 -j ACCEPT
$IPTABLES -t nat -I PREROUTING 1 -i $INTERNET_INTERFACE -p tcp --dport 5500:5502 -j DNAT --to-dest 192.168.0.5
$IPTABLES -I FORWARD 1 -p tcp -i $INTERNET_INTERFACE --dport 5500:5502 -d 192.168.0.5 -j ACCEPT

En el ordenador donde se ejecutara gaim configurado para que escuche en los puertos 5500-5502:

$IPTABLES -t filter -A INPUT -i $LAN_INTERFACE -p tcp --dport 5500:5502 -j ACCEPT

Leave a Reply

Your email address will not be published. Required fields are marked *