¿Existe un script para agregar la regla de reenvío de puertos en el enrutador doméstico?

15

TL; DR : estoy buscando un script o un trabajo cron, que se ejecutará periódicamente en un host de Linux (fedora en raspberry pi) que verificará si todavía existe una regla de reenvío de puertos en el enrutador y la agregará si no es así . El objetivo es tener siempre acceso al host Linux raspberry pi a través de SSH, VNC y la interfaz web de transmisión, desde cualquier máquina en Internet fuera de mi red doméstica. La configuración se da a continuación:

Enrutador :

Beetel 440Tx1 ADSL2 enrutador + módem + wifi.

Configuración :

El enrutador está conectado a Internet (ISP Broadband) y tiene una IP externa dinámica. Proporciona una red doméstica privada a mis computadoras con IP internas 192.168.xy que también actúan como DHCP.

Anfitrión :

Un host ARM de raspberry pi con Fedora Linux, que se ejecuta todo el tiempo con ssh, vnc, servidores de transmisión-demonio iniciados en el momento del arranque. También tiene el no-ip.com dyndns free DUC (cliente de actualización dinámica) que verifica rutinariamente la IP externa y la vincula a la cadena del host. Por lo tanto, siempre puedo encontrar la IP externa de mi enrutador resolviendo mi cadena dyndns como myrouter.no-ip.org . El pi tiene una IP interna estática como 192.168.1.z.

Reenvío de puertos :

Debe iniciar sesión en el enrutador utilizando la GUI / navegador con credenciales de fábrica solo si está conectado a esa red, ya sea a través de un cable de ethernet o wifi protegido con contraseña

http://192.168.1.1/html/index1.html

Configuré la regla al iniciar sesión para reenviar cualquier tráfico en los puertos 22, 5900, 9091 en la IP externa a los respectivos programas de escucha (sshd, vncserver, transmission-daemon) en el pi en 192.168.1.z.

Problema :

Este enrutador pierde la regla de reenvío de puertos anterior cuando se reinicia (el enrutador), o incluso si hay un pico de energía eléctrica y el UPS tiene que intervenir momentáneamente, y generalmente obtiene una IP externa diferente de mi ISP dinámicamente.

Requisito :

Un trabajo de secuencia de comandos o cron que puede ejecutarse en mi fedora linux pi que puede iniciar sesión en mi enrutador y sondear periódicamente la existencia de esa regla de reenvío de puertos y crearla si falta. Ayuda apreciada.

PKM
fuente
1
¿El enrutador admite la configuración del reenvío de puertos a través de UPnP? (¿pueden los programas que se ejecutan en Windows / Mac / Linux configurar automáticamente las reglas de reenvío de puertos por sí mismos actualmente?)
Scott Chamberlain
Creo que sí porque pcwintech.com/showimage?file=files/screenshots/beetel-440txi/… Realmente no sé mucho sobre UPnP que no sea la página de Wikipedia. Buscar en Google ese tipo de enrutador (en cuestión) me llevó a esa página.
PKM

Respuestas:

18

MiniUPnP es un cliente UPnP de línea de comandos que le permite habilitar el reenvío de puertos. La fuente está disponible, por lo que debería poder compilarla en Pi.

Creo que esta es la sintaxis que necesita, pero no tengo una máquina para probarla. Simplemente pondría lo siguiente en un script que configuraría los puertos uPnP por usted

upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 22 22 TCP
upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 5900 5900 TCP
upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 9091 9091 TCP
Scott Chamberlain
fuente
eso funciona, sin embargo, ¿cuál es el lugar correcto para agregarlo para que el comando se ejecute al inicio?
Ciasto piekarz
1
Puedes usar @reboot <cmd>en tu crontab
Martin
1
miniupnpc debería estar disponible con raspbian con apt
Scott
y upnpc, si se ejecuta desde la máquina que ejecuta el servicio, usará la dirección local para que el ifconfig / grep sea innecesario
Scott
la ifconfig ...parte no funcionó para mí, así que utilicé ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'según esta respuesta .
Helder S Ribeiro