He hecho algunos avances interesantes, que iré poniendo por aquí para conocimiento de todos...
Introducción:
Los routers (y otros dispositivos de red, como altavoces inalámbricos, discos multimedia, cámaras, etc.) tienen una característica llamada UPnP (Universal Plug and Play). La mayoría de los routers modernos la tienen (desde 2002). Bien.
Cuando un dispositivo UPnP se conecta a una red, su función es ver qué más hay conectado, y para ello, envía un "mensaje de descubrimiento" (en inglés suena mejor) a la IP 239.255.255.250 y puerto UDP 1900. Todos los dispositivos UPnP están programados para responder a este mensaje, con una respuesta que contiene información del dispositivo (nombre, servicios que admite, su IP, etc. en un XML). Bien.
Conociendo la IP y los servicios que admite cada dispositivo, es posible comunicarse con él, enviándole "comandos" y esperando su respuesta, siempre y cuando los comandos sean válidos y el dispositivo los admita. Esto se hace enviando mensajes concretos en formato XML por SOAP. Bien también.
Encontré un código algo antiguo, de un tipo ruso, que hacía el Discover de dispositivos en la red y permitía enviar el comando de Abrir y Cerrar Puertos. He de decir que
funciona perfectamente (después de algunos retoques), aunque como explicaré ahora, no del todo:
El código funciona, y el router me devuelve "OK 200". Utilizando la utilidad "miniupnpc", que se puede descargara
aquí, puedo ver que efectivamente el puerto aparece como abierto. Bien.
El problema es que, en el router
NO me aparece ese puerto como abierto.
Seguiré investigando.
Aquí hay información sobre lo que acabo de poner:
http://www.upnp-hacks.org/upnp.html
El código fuente lo pongo en otra respuesta para que quede más claro.