Existe-t-il un script pour ajouter une règle de redirection de port dans le routeur domestique?

15

TL; DR : Je recherche un script ou un travail cron, qui s'exécutera périodiquement sur un hôte linux (fedora sur raspberry pi) qui vérifiera si une règle de redirection de port existe toujours dans le routeur et l'ajoute s'il ne l'est pas . L'objectif est de toujours avoir accès à l'hôte Linux Raspberry Pi via SSH, VNC et l'interface Web de transmission, depuis n'importe quelle machine sur Internet en dehors de mon réseau domestique. La configuration est donnée ci-dessous:

Routeur :

Routeur Beetel 440Tx1 ADSL2 + modem + wifi.

Configuration :

Le routeur est connecté à Internet (ISP Broadband) et possède une adresse IP externe dynamique. Il fournit un réseau domestique privé à mes ordinateurs avec des IP internes 192.168.xy agissant également comme DHCP.

Hôte :

Un hôte ARM Raspberry Pi avec Fedora Linux, fonctionnant tout le temps avec ssh, vnc, des serveurs de transmission-démon démarrés au démarrage. Il possède également le DUC gratuit (client de mise à jour dynamique) no-ip.com dyndns qui vérifie régulièrement l'adresse IP externe et la lie à la chaîne hôte. Ainsi, je peux toujours trouver l'IP externe de mon routeur en résolvant ma chaîne dyndns comme myrouter.no-ip.org . Le pi a une IP interne statique comme 192.168.1.z.

Redirection de port :

Vous devez vous connecter au routeur à l'aide de l'interface graphique / du navigateur avec les informations d'identification d'usine uniquement si vous êtes connecté à ce réseau via un câble Ethernet ou une connexion Wi-Fi protégée par mot de passe

http://192.168.1.1/html/index1.html

J'ai configuré la règle en me connectant pour transférer tout trafic aux ports 22, 5900, 9091 sur l'IP externe vers les programmes d'écoute respectifs (sshd, vncserver, transmission-daemon) sur le pi à 192.168.1.z.

Problème :

Ce routeur perd la règle de redirection de port ci-dessus lorsqu'il (le routeur) est redémarré, ou même s'il y a un pic de puissance électrique et que l'onduleur doit intervenir momentanément, et obtient généralement une IP externe différente de mon FAI de manière dynamique.

Exigence :

Un script ou une tâche cron qui peut s'exécuter sur mon fedora linux pi qui peut se connecter à mon routeur et interroger périodiquement l'existence de cette règle de redirection de port et la créer si elle est manquante. Aide appréciée.

PKM
la source
1
Le routeur prend-il en charge la configuration de la redirection de port via UPnP? (Les programmes fonctionnant sous Windows / Mac / Linux peuvent-ils automatiquement configurer eux-mêmes les règles de redirection de port actuellement?)
Scott Chamberlain
Je le pense parce que pcwintech.com/showimage?file=files/screenshots/beetel-440txi/… Je ne connais pas vraiment grand-chose sur UPnP à part la page wikipedia. Googler pour ce type de routeur (en question) m'a conduit à cette page.
PKM

Réponses:

18

MiniUPnP est un client UPnP en ligne de commande qui vous permet d'activer la redirection de port. La source est disponible, vous devriez donc pouvoir la compiler sur le Pi.

Je pense que c'est la syntaxe dont vous avez besoin, mais je n'ai pas de machine pour le tester. Vous mettriez simplement ce qui suit dans un script qui configurerait les ports uPnP pour vous

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
la source
cela fonctionne, mais quel est le bon endroit pour l'ajouter afin que la commande s'exécute au démarrage?
Ciasto piekarz
1
Vous pouvez utiliser @reboot <cmd>dans votre crontab
Martin
1
miniupnpc devrait être disponible avec raspbian avec apt
Scott
et upnpc, s'il est exécuté à partir de la machine exécutant le service, utilisera l'adresse locale de sorte que l'ifconfig / grep n'est pas nécessaire
Scott
la ifconfig ...partie ne fonctionnait pas pour moi, j'ai donc utilisé ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'selon cette réponse .
Helder S Ribeiro