Gibt es ein Skript zum Hinzufügen einer Portweiterleitungsregel im Heimrouter?

15

TL; DR : Ich suche ein Skript oder einen Cron-Job, der regelmäßig auf einem Linux-Host (Fedora auf Himbeer-Pi) ausgeführt wird und prüft, ob im Router noch eine Portweiterleitungsregel vorhanden ist, und füge sie hinzu, wenn dies nicht der Fall ist . Ziel ist es, von jedem Rechner im Internet außerhalb meines Heimnetzwerks über SSH, VNC und das Übertragungs-Webinterface immer auf den Himbeer-Pi-Linux-Host zuzugreifen. Das Setup ist unten angegeben:

Router :

Beetel 440Tx1 ADSL2 Router + Modem + WLAN.

Setup :

Der Router ist mit dem Internet verbunden (ISP Broadband) und verfügt über eine dynamische externe IP. Es bietet meinen Computern ein privates Heimnetzwerk mit den internen IP-Adressen 192.168.xy, die auch als DHCP fungieren.

Gastgeber :

Ein Himbeer-Pi-ARM-Host mit Fedora Linux, der die ganze Zeit über mit SSH-, VNC- und Transmission-Daemon-Servern ausgeführt wird und beim Booten gestartet wird. Es hat auch den dyndns-freien DUC (Dynamic Update Client) von no-ip.com, der routinemäßig die externe IP überprüft und sie an den Host-String bindet. So kann ich die externe IP meines Routers immer durch Auflösen meines dyndns-Strings wie myrouter.no-ip.org finden . Der pi hat eine statische interne IP wie 192.168.1.z.

Port-Weiterleitung :

Sie müssen sich nur dann mit der GUI / dem Browser mit den werkseitigen Anmeldeinformationen beim Router anmelden, wenn Sie über ein Ethernet-Kabel oder ein passwortgeschütztes Wi-Fi-Netzwerk mit diesem Netzwerk verbunden sind

http://192.168.1.1/html/index1.html

Ich richte die Regel ein, indem ich mich anmelde, um Datenverkehr an den Ports 22, 5900, 9091 der externen IP an die entsprechenden Listener-Programme (sshd, vncserver, transmission-daemon) auf dem pi unter 192.168.1.z weiterzuleiten.

Problem :

Dieser Router verliert die oben genannte Portweiterleitungsregel, wenn er (der Router) neu gestartet wird, oder selbst wenn die Stromversorgung kurzzeitig ansteigt und die USV kurz einspringen muss, und erhält normalerweise dynamisch eine andere externe IP von meinem ISP.

Anforderung :

Ein Skript oder ein Cron-Job, der auf meinem Fedora-Linux-Pi ausgeführt werden kann und der sich bei meinem Router anmelden und in regelmäßigen Abständen die Existenz dieser Portweiterleitungsregel abfragen und diese erstellen kann, wenn sie fehlt. Hilfe geschätzt.

PKM
quelle
1
Unterstützt der Router das Einrichten der Portweiterleitung über UPnP? (Können Programme, die unter Windows / Mac / Linux ausgeführt werden, derzeit selbst automatisch Regeln für die Portweiterleitung einrichten?)
Scott Chamberlain,
Ich denke schon, weil pcwintech.com/showimage?file=files/screenshots/beetel-440txi/… Ich weiß nicht viel über UPnP außer der Wikipedia-Seite. Das Googeln nach diesem Routertyp (in Frage) führte mich zu dieser Seite.
PKM

Antworten:

17

MiniUPnP ist ein Befehlszeilen-UPnP-Client, mit dem Sie die Portweiterleitung aktivieren können. Die Quelle ist verfügbar, sodass Sie sie auf dem Pi kompilieren können sollten.

Ich denke, das ist die Syntax, die Sie benötigen, aber ich habe keine Maschine, auf der ich sie testen kann. Sie würden einfach Folgendes in ein Skript einfügen, das die uPnP-Ports für Sie einrichtet

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
quelle
das funktioniert, aber was ist der richtige Ort, um es hinzuzufügen, damit der Befehl beim Start ausgeführt wird?
Ciasto piekarz
1
Sie können @reboot <cmd>in Ihrem Crontab verwenden
Martin
1
miniupnpc sollte mit raspbian mit apt verfügbar sein
Scott
und upnpc verwendet, wenn es auf dem Computer ausgeführt wird, auf dem der Dienst ausgeführt wird, die lokale Adresse, sodass ifconfig / grep nicht erforderlich ist
Scott
Das ifconfig ...Teil hat bei mir nicht funktioniert, also habe ich ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'gemäß dieser Antwort verwendet .
Helder S Ribeiro