portweiterleitung

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

portweiterleitung

Beitrag von ducatisepp » 18.02.2016 08:43:02

Hallo zusammen,

ich habe ein Problem mit der Portweiterleitung von einem VPS auf einen Dynclient.
Folgendes Szenario:
Ich möchte Anfragen von extern über meinen VPS auf meine Fritzbox weiterleiten.Da ich in den IPTables ja keinen Dynhost eintragen kann habe ich mir ein Script gebaut das die IP des Dyndns Accounts überprüft und falls sie die IP ändert nie neue abspeichert. Wenn ich das Script händisch ausführe dann funktioniert die weiterleitung. Nach IP Änderung durch Zwangstrennung aktualisiert er mir auch die IP aber die Weiterleitung funktioniert nicht mehr. Auch nach einem Neustart funktioniert das ganze nicht mehr. Habe auch einen Cronjob eingerichtet der alle 3 Minuten läuft damit ich das nicht händisch machen muss aber der aktualisiert nur die IP.

Wahrscheinlich habe ich eine Kleinigkeit übersehen. Wäre schön wenn jemand von Euch drüberschauen könnte. Wenn ich nach neustart bzw IP Änderung die IP im Ordner /root/dynhosts/host-...dyndns.org ändere (ihm also vorkaukel das sich die IP geändert hat) und anschliessend das script händisch laufen lasse funktioniert es wieder.

Als Script habe ich mir dieses hier zusammengebaut
HOST=$1
HOSTFILE="/root/dynhosts/host-$HOST"
CHAIN="host.dyndns.org" # change this to whatever chain you want.
IPTABLES="/sbin/iptables"

# check to make sure we have enough args passed.
if [ "${#@}" -ne "1" ]; then
echo "$0 hostname"
echo "You must supply a hostname to update in iptables."
exit
fi

# lookup host name from dns tables
IP=`/usr/bin/dig +short $HOST | /usr/bin/tail -n 1`
if [ "${#IP}" = "0" ]; then
echo "Couldn't lookup hostname for $HOST, failed."
exit
fi

OLDIP=""
if [ -a $HOSTFILE ]; then
OLDIP=`cat $HOSTFILE`
# echo "CAT returned: $?"
fi

# has address changed?
if [ "$OLDIP" == "$IP" ]; then
echo "Old and new IP addresses match."
exit
fi

# save off new ip.
echo $IP>$HOSTFILE

echo "Updating $HOST in iptables."
if [ "${#OLDIP}" != "0" ]; then
echo "Removing old rule ($OLDIP)"
`$IPTABLES -D $CHAIN -s $OLDIP/32 -j ACCEPT`
fi
echo "Inserting new rule ($IP)"
`$IPTABLES -A $CHAIN -s $IP/32 -j ACCEPT`

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -d "IP des VPS" -p tcp --dport 12345 -j DNAT --to-dest $IP:12345
iptables -t nat -A POSTROUTING -d $IP -p tcp --dport 12345 -j SNAT --to-source "IP des VPS"
cronjob habe ich mit crontab -e folgenden eintrag
*/3 * * * * cd /root && sh tables.sh > /dev/null 2>&1
Vielleicht gibt es ja eine andere Möglichkeit das ich eine Portweiterleitung einrichten kann mit Dyn Adressen.
Ziel soll es sein eben Anfragen an den VPS weiterzuleiten an meine DynAdresse.

Vielen Dank für Eure Hilfe
Ducatisepp

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: portweiterleitung

Beitrag von uname » 18.02.2016 08:51:20

Hallo und willkommen im Forum,

magst du noch mitteilen welcher Dienst bei dir im lokalen Netzwerk zuhause auf welche Art von Daten wartet? Handelt es sich um ein Debian-System? Wenn ja würde ich wahrscheinlich mindestens aus Sicherheitsgründen die Verbindung von innen starten, wenn nötig auf Remote-SSH-Port-Forwarding setzen und DynDNS sowie die Firewallfreischaltung verwerfen.

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 18.02.2016 09:18:12

Hallo uname,

Mein VPS ist ein Debian 8 Server und daheim habe ich eine Fritzbox mit Portfreigaben laufen.
Das System soll den Port Forwarden damit ich Benutzern den Zugriff auf meine NAS gewährleisten kann. Dazu mag ich aber meine private Dyn unter der die Fritzbox erreichbar ist nicht verwenden sondern eine andere die ich auf dem VPS hoste.
Die Art der Weiterleitung wäre mir egal. Es soll einfach nur über die IP Adresse des VPS laufen. Die Dyn auf dem VPS zu ändern oder abzuschalten ist um einiges einfacher als die Dyn bei mir zuhause damit nicht alle Freigaben neu angepasst werden müssen die ich nutze.

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Re: portweiterleitung

Beitrag von mistersixt » 18.02.2016 11:28:39

Schau doch mal, nachdem Du auf der Fritzbox zu Hause eine neue IP bekommen hast, mit "iptables -t nat -L" nach, ob die alten Regeln auch wirklich gelöscht wurden.
--
System: Debian Bookworm, 6.5.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 4.0 Ghz., Radeon RX 5700 XT, 16 GB Ram, XFCE

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 18.02.2016 12:27:02

mit einer neuen IP hab is es noch nicht getestet. Hab die Kiste neu aufgesetzt und festgestellt das dann wenn ich iptables -t nat -L aufrufe kein Eintrag drinsteht. Cronjob ist aber gelaufen weil er mir die aktuelle IP unter /root/dynhosts/host-host.dyndns.org anzeigt. Nur wenn ich das Script manuell laufen lasse (und natürlich die IP in der hostdatei ändere damit er updaten muss) wird der eintrag in der IPTables erstellt.
Deshalb scheint es wohl am Cronjob zu liegen das er das Script irgendwie nicht vollständig abarbeitet denn nur mit dem Cronjob funktioniert es nicht wohl aber wenn ich das script manuell ausführe.
Auch nach nem Neustart ist die Crontab natürlich leer und wird nicht wieder mit dem cronjob befüllt

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Re: portweiterleitung

Beitrag von mistersixt » 18.02.2016 13:07:48

Poste doch mal bitte das ganze Script nach http://pastebin.com/ ... und dann kannst Du mal versuchen, oben im Script "set -x" einzugeben, dann siehst Du das Abarbeiten der einzelnen Zeilen, und den crontab-Eintrag so machen, dass der output irgendwo landet, so was wie...

Code: Alles auswählen

*/3 * * * * cd /root && sh tables.sh > /tmp/bla.log 2>&1
--
System: Debian Bookworm, 6.5.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 4.0 Ghz., Radeon RX 5700 XT, 16 GB Ram, XFCE

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 18.02.2016 15:01:03

Also mit set-x sehe ich das alles einwandfrei durchläuft. Hab jetzt auch mal ein log erstellt für den Cronjob und da liegt wohl der Hund begraben.
Wird alles abgearbeitet bloß am Ende wenn er das Forwarding eintragen soll bekomm ich die Meldung

./iptables.sh: line 64: sysctl: command not found
+ iptables -t nat -A PREROUTING -d IPvomVPS -p tcp --dport 12345 -j DNAT --to-dest IPvonzuhause:12345
./iptables.sh: line 66: iptables: command not found
+ iptables -t nat -A POSTROUTING -d IPvondaheim -p tcp --dport 12345 -j SNAT --to-source IPvomVPS

irgendwie kann er in der Shell den Befehl abarbeiten im Cron aber nicht.
Fehlt da noch ein Befehl damit das auch im Cronjob verarbeitet werden kann?

Viele Grüsse
Ducatisepp

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: portweiterleitung

Beitrag von uname » 18.02.2016 15:39:24

Für Remote-Port-Forwarding kannst du viewtopic.php?t=121486 lesen.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: portweiterleitung

Beitrag von eggy » 18.02.2016 15:55:24

command not found
Das klingt so, als ob da die Pfade fehlen.

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 18.02.2016 21:23:23

Bin bloß etwas ratlos welcher Pfad da fehlt bzw welches Kommando ich für den Crontab für die IPTables brauch.

@uname den Beitrag hab ich schon gelesen aber einen ssh Tunnel will ich eigentlich gar nicht aufbauen. Wär zwar auch ne Lösung aber es muss doch auch noch nen Befehl geben damit er mir die Zeile "iptables -t nat -A PREROUTING -d IPvomVPS -p tcp --dport 12345 -j DNAT --to-dest IPvonzuhause:12345" ausführt.

Was richtig komplizertes kann das fast nicht mehr sein. Vielleicht seh ich ja den Wald vor lauter Bäumen nicht was beim Ausführen des Cronjobs anders abläuft als in der Shell.
Ich frickel mich mal weiter durch. Vielleicht hat ja noch jemand ne idee was ich noch anpassen könnte.

Dank Euch schonmal

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 18.02.2016 21:55:15

@eggy
hast mir den entscheidenden Hinweis gegeben. Musste natürlich den ganzen Pfad angeben
/sbin/iptables -t nat -A PREROUTING -d IPvomVPS -p tcp --dport 12345 -j DNAT --to-dest IPvonzuhause:12345

fehlte natürlich /sbin/

Danke für Eure Mühe vielleicht bin auch ich mal in der Lage jemanden zu helfen

Viele Grüsse
Ducatisepp

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: portweiterleitung

Beitrag von eggy » 19.02.2016 13:54:33

Bei sysctl fehlt der wahrscheinlich auch.
Falls Dich der Hintergrund interessiert, die Kurzfassung: diverse Umgebungsvariablen sind nicht/anders gesetzt; "echo $PATH" bringt Dir als eingeloggtem User ne lange Liste von Verzeichnissen, in denen nach ausführbaren Dateien gesucht wird, unter cron nicht.
In anderen Cron-Threads hier im Forum ist die Problematik auch ausführlicher behandelt worden, einfach mal die Suche anwerfen.

ducatisepp
Beiträge: 7
Registriert: 18.02.2016 08:13:12

Re: portweiterleitung

Beitrag von ducatisepp » 19.02.2016 22:27:05

Hi eggy,

bei sysctl hat es wie Du geschrieben hast natürlich auch gefehlt. Danke für die Erklärung. Das bringt natürlich jetzt Licht ins dunkle und ist so betrachtet nur logisch wenn man darüber nachdenkt. Wieder was gelernt ;-)

Danke Dir

VG
Ducatisepp

Antworten