- Mitglied seit
- 04. Sep 2008
- Beiträge
- 2.341
- Punkte für Reaktionen
- 14
- Punkte
- 84
Ich besitze einen TP-Link Router TL-WR1043ND, der unter Portwarding - Virtual Servers leider keine unterschiedlichen Ports für intern und extern zuläßt. Ich könnte zwar ein DD-WRT als Firmware aufspielen, die dies dann unterstützen würde, konnte mich dazu aber nicht durchringen.
Da der Router auch Portwarding per UPNP unterstützt und das sogar mit unterschiedlichen Ports für intern und extern ging ich auf die Suche nach einem UPNP Client für IGD (Internet Gateway Device) mit dem ich diese Einstellungen durchführen kann.
Anmerkung: Die Routersteuerung im DSM erlaubt für meinen Router ebenfalls keine getrennten Ports.
Hinweis: Die Einstellungen per UPNP sind nur solange aktiv, wie der ausgeführte Client vorhanden ist. Wer also seine DS nicht ständig im lokalen Netz hat, der sollte sich entweder ein Start/Stop-Skript erstellen und damit die Einstellungen vornehmen oder auf UPNP verzichten.
Achtung: Man sollte verhindern, dass man selbst oder jemand anderes dieses Tool von ausserhalb starten kann. Ob das Tool von allein nur auf lokalen IP's funktioniert weiss ich leider nicht.
Gefunden habe ich das Projekt Miniupnpd, welches einen Client und Daemon bereitstellt, von dem ich aber nur den Client benutze. Den Daemon gibt es auch als IPKG Paket, dort fehlt allerdings der Client. Deshalb muss man sich das kleine Tool selbst compilieren. Da ich schon alle Compilertools und noch weitere auf meiner DS hatte, kann ich nicht genau sagen, was benötigt wird; gcc, binutils und automake sollten aber reichen. Hier nun die durchzuführenden Schritte (Bisher auf x86 getestet):
Zuerst wechseln wir in das Verzeichnis /usr/src oder erstellen selbiges und wechseln anschließend.
Archiv herunterladen und enpacken
Makefile anpassen (Zeile 12)
original
modifiziert
Compilieren und Installieren
Das Compilieren hatte auf meiner DS209+ (powerpc e500-2) nicht auf Anhieb funktioniert, da bei mir die Datei /opt/lib/gcc/powerpc-linux-gnuspe/3.4.6/include/syslimits.h fehlte. Auch nach einem Reinstall vom gcc war diese Datei nicht vorhanden. Da diese für alle System identisch ist, hier der Inhalt zum selbst erstellen. Beim wem diese Datei vorhanden ist, kann das Erstellen der Datei überspringen.
Nun kann man schon mit upnpc -s den Status abrufen und prüfen, ob auch ein unterstütztes Gerät gefunden wird. Die Rückmeldung sollte ungefähr so aussehen:
Befehle (Liste mit Eingabe von upnpc ohne Parameter)
Hoffe das es für alle verständlich ist und sich einige User melden, die dies auf ihrer DS erfolgreich kompliert haben. Ein weiterer Einsatzbereich wäre z.B. die Ermittlung der externen IP ohne dafür eine Seite im Internet aufzurufen.
Beispiel:
Da der Router auch Portwarding per UPNP unterstützt und das sogar mit unterschiedlichen Ports für intern und extern ging ich auf die Suche nach einem UPNP Client für IGD (Internet Gateway Device) mit dem ich diese Einstellungen durchführen kann.
Anmerkung: Die Routersteuerung im DSM erlaubt für meinen Router ebenfalls keine getrennten Ports.
Hinweis: Die Einstellungen per UPNP sind nur solange aktiv, wie der ausgeführte Client vorhanden ist. Wer also seine DS nicht ständig im lokalen Netz hat, der sollte sich entweder ein Start/Stop-Skript erstellen und damit die Einstellungen vornehmen oder auf UPNP verzichten.
Achtung: Man sollte verhindern, dass man selbst oder jemand anderes dieses Tool von ausserhalb starten kann. Ob das Tool von allein nur auf lokalen IP's funktioniert weiss ich leider nicht.
Gefunden habe ich das Projekt Miniupnpd, welches einen Client und Daemon bereitstellt, von dem ich aber nur den Client benutze. Den Daemon gibt es auch als IPKG Paket, dort fehlt allerdings der Client. Deshalb muss man sich das kleine Tool selbst compilieren. Da ich schon alle Compilertools und noch weitere auf meiner DS hatte, kann ich nicht genau sagen, was benötigt wird; gcc, binutils und automake sollten aber reichen. Hier nun die durchzuführenden Schritte (Bisher auf x86 getestet):
Zuerst wechseln wir in das Verzeichnis /usr/src oder erstellen selbiges und wechseln anschließend.
Archiv herunterladen und enpacken
Rich (BBCode):
wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.5.20110314.tar.gz
tar xf miniupnpc-1.5.20110314.tar.gz
cd miniupnpc-1.5.20110314
original
Rich (BBCode):
CC ?= gcc
Rich (BBCode):
CC = gcc
Das Compilieren hatte auf meiner DS209+ (powerpc e500-2) nicht auf Anhieb funktioniert, da bei mir die Datei /opt/lib/gcc/powerpc-linux-gnuspe/3.4.6/include/syslimits.h fehlte. Auch nach einem Reinstall vom gcc war diese Datei nicht vorhanden. Da diese für alle System identisch ist, hier der Inhalt zum selbst erstellen. Beim wem diese Datei vorhanden ist, kann das Erstellen der Datei überspringen.
Rich (BBCode):
/* syslimits.h stands for the system's own limits.h file.
If we can use it ok unmodified, then we install this text.
If fixincludes fixes it, then the fixed version is installed
instead of this text. */
#define _GCC_NEXT_LIMITS_H /* tell gcc's limits.h to recurse */
#include_next <limits.h>
#undef _GCC_NEXT_LIMITS_H
Rich (BBCode):
make
make install
Rich (BBCode):
upnpc : miniupnpc library test client. (c) 2006-2011 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
List of UPNP devices found on the network :
desc: http://xxx.xxx.xxx.xxx:xxxxx/igd.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Found valid IGD : http://xxx.xxx.xxx.xxx:xxxxx/ipc
Local LAN ip address : xxx.xxx.xxx.xxx
Connection Type : IP_Routed
Status : Connected, uptime=102s, LastConnectionError : ERROR_NONE
Time started : Mon Apr 18 19:19:56 2011
MaxBitRateDown : 100000 bps MaxBitRateUp 100000 bps
ExternalIPAddress = xxx.xxx.xxx.xxx
Bytes: Sent: 2735188860 Recv: 2959387834
Packets: Sent: 384355775 Recv: 697615279
Rich (BBCode):
upnpc : miniupnpc library test client. (c) 2006-2011 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
Usage : upnpc [options] -a ip port external_port protocol
Add port redirection
upnpc [options] -d external_port protocol [port2 protocol2] [...]
Delete port redirection
upnpc [options] -s
Get Connection status
upnpc [options] -l
List redirections
upnpc [options] -L
List redirections (using GetListOfPortMappings)
upnpc [options] -r port1 protocol1 [port2 protocol2] [...]
Add all redirections to the current host
protocol is UDP or TCP
Options:
-u url : bypass discovery process by providing the XML root description url.
-m address : provide ip address of the interface to use for sending SSDP multicast packets.
-p path : use this path for MiniSSDPd socket.
Beispiel:
Rich (BBCode):
upnpc -s | grep ExternalIPAddress | cut -d " " -f3