• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Remote-Port nach aussen freigeben

gehrke

Administrator
Teammitglied
Moin *

Bin als lausiger Netzwerker mal wieder hilfsbedürftig...

Ich habe einen angemieteten Server bei einem Hoster ('vj1'/CentOS) und einen RasPi zuhause ('j11'/Raspbian).

Auf 'j11' läuft ein Webserver, den ich gerne mit dem Umweg über 'vj1' ins Internet stellen möchte.
Sprich: http auf 'vj1' wird 1:1 durchgereicht auf 'j11'

Bitte keine Diskussionen darüber, warum ich das machen will.

Ich hatte gehofft, dies via SSH-Tunnel realisieren zu können:
Code:
pi@j11:~ ssh -T -R 80:localhost:80 root@vj1
Enter passphrase for key '/home/pi/.ssh/id_rsa':
Das funktioniert prinzipiell auch:
Code:
[root@vj1 ~]# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      0          138592     9573/sshd: root@not
Lokal kann ich das benutzen, der Request landet bei 'j11' und wird korrekt beantwortet:
Code:
[root@vj1 ~]# wget http://localhost:80/index.html
--2018-07-31 21:42:16--  http://localhost/index.html
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10701 (10K) [text/html]
Saving to: ‘index.html.3’

100%[=======================================================================================================================================>] 10,701      --.-K/s   in 0s      

2018-07-31 21:42:16 (128 MB/s) - ‘index.html.3’ saved [10701/10701]
Aber nach aussen funktioniert das nicht (Firewall ist temporär down). Liegt wahrscheinlich daran, dass Port 80 auf 'localhost' gebunden ist, welches nur intern verfügbar ist.

Wie könnte ich dieses Vorhaben möglichst schlank umsetzen?!?


Vielen Dank im Voraus für Eure Antworten...

Glückauf,
gehrke
 

marce

Guru
QnD - Nginx oder Apache auf VServer, VHost einrichten, Proxy auf Endpunkt des ssh-Tunnls (z.B. localhost:81 - 80 würde ich zur pot. Konfliktvermeidung erst mal lassen)

Sicherlich kann man da auch mit iptables was basteln - je nach dem, mit was Du fitter bist :)
 
gehrke schrieb:
Moin *
...
Wie könnte ich dieses Vorhaben möglichst schlank umsetzen?!?

Ich gehe davon aus, dass vj1 einen Apache Web-Server installiert hat.
Dann ist die einfachste Lösung, vj1 als Proxy zu konfigurieren. (Apache proxy_module)
Damit hast du viele unterschiedliche Möglichkeiten, den j11 Webserver zu erreichen.
Beispiele:
www.gehrke.com = vj1
j11.gehrke.com = j11
oder
www.gehrke.com = vj1
www.gehrke.com/j11 = j11
oder
www.gehrke.com = vj1:80
www.gehrke.com:2222 = j11:80
und natürlich auch
www.gehrke.com = j11
vj1.gehrke.com = vj1

Nachzulesen unter Apache virtual host und proxy_module
Verwendete proxy_module Directives für ein einfaches Szenario sind:
ProxyPass
ProxyRequests
ProxyVia

Eine weitere Möglichkeit ist das policy routing auf vj1
Das hat mit iptables nichts zu tun.
Alles ankommende auf port 80 und 443 wird auf die IP von j11 geroutet.
Das routing wird in eine existierende oder private Tabelle eingetragen, je nach Anforderung.
Siehe man ip -> route add ... table

Auch mit iptables ist das realisierbar mit FORWARD, POSTROUTING und NAT
Das ist aber nur dann empfehlenswert, wenn dir iptables gut bekannt ist.

Alle 3 Möglichkeiten sind mit Dynamic DNS Service aufrüstbar ... sofern benötigt im Falle DHCP vom provider.
Damit ist die IP von j11 dem vj1 immer bekannt und das routing oder proxieing entsprechend.

Gruß
Gräfin Klara
 

spoensche

Moderator
Teammitglied
Du hast die "Qual" der Wahl bei der Lösung.

Zusammenfassung:

- iptables forwarding
- Apache als Proxy
- Apache mod_rewrite + redirect
- nginx als Proxy
- Redirect mittels PHP, Perl, JavaScript usw.
- Plain HTML Redirect
 
Oben