Subdomain mit iptables auf lokale ip adressieren

W

wanie

Grünschnabel
Hallo,

Ich habe einen linux router, und dahinter einige server (VM's mit eigenen IP's).
Die domain zeigt auf meine statische IP, und auch die wildcards werden weitergeleitet.

Nun möchte ich diese verschiedenen server von außen über die subdmain ansprechen.
Also zb: sub1.domain.tld -> 192.168.1.2
sub2.domain.tld -> 192.168.1.3
usw...

Ich weiß, apache2 bietet mit seiner virtual hosts proxy eine gute lösung diese subdomains für das http(s) protokoll weitezuleiten.
Ich würde das jedoch gerne über die IPTABLES lösen.
Grund dafür ist, das ich die Server mit jedem Protokoll von außen direkt ansprechen kann.
Selbstverständlich bin ich mir bewusst das die einzelnen server dann gut abgesichert sein müssen!

Ich habe bereits viel gegoogelt, jedoch immer nur lösungen gefunden die an das apache2 virtual hosts anlehnen.

Gibt es jemanden der erfahrung hat dieses problem mit iptables zu lösen?
Was sind die nachteile?
Sind alle server auf die eine subdomain zeigt dann in einer DMZ?
Gibt es vielleicht ein schönes howto dazu, das ich einfach noch nicht gefunden habe?

Ich wäre um jede hilfe dankbar!

Gruß
wanie
 
Zuletzt bearbeitet:
Hallo,

was du vorhast wird nicht funktionieren, da der Adressbereich 192.168.x.x zu den privaten Netzen zählt, die nicht über das Internet geroutet werden.

Sprich von innen funktioniert alles prächtig, nur wenn wer von außen darauf zugreifen will, wird die sub1.domain.tdl zwar auch ordnungs gemäß auf die 192.168.1.2 aufgelöst, nur wird der entsprechende Client den Server dahinter nie erreichen, bzw versuchen ein System bei sich im lokalen Netz ansprechen.

Zum Thema iptables.
Iptables arbeitet, soweit ich weiß, auf Ebene 3 und 4 des OSI-Modells, sprich IP und Port. Hier findet keine Unterscheidung nach Hostnamen statt. Deshalb kannst du auch nur z.B. Öffentliche_IP:Port_80 auf Interne_IP:Port_80 weiterleiten und nicht auf Interne_IP_1:Port_80, Interne_IP_2:Port_80 etc. (Loadbalancer mal ausgenommen, aber das ist hier nicht das Thema). Also keine Möglichkeit n Server hinter einer öffentlichen IP über den selben Port direkt anzusprechen.

Zum Thema DMZ.
Eine DMZ ist ein durch eine Firewall oder Firewall-Regeln vom Rest des Internen Netzes getrennter Netzberreich, auf den von außen zugegriffen werden darf/soll, der aber möglichst nochmals gegen das Intranet abgeschirmt ist.
internet | FW | DMZ (webserver, mailserver, etc) | FW | intranet (clients / intranetserver)
hat also mit DNS nichts am Hut.

mfg
HeadCrash
 
Zuletzt bearbeitet:
Du kannst in Iptables nur basierend auf Zielport und IP umleiten. Die Ziel-IP wird immer die gleiche sein, nämlich deine statische und der Port je nachdem auch. Wenn auf einer VM der SMTP Server läuft und auf einer anderen der HTTP Server, dann kannst du das über die Ports auseinanderhalten. Mehr geht nicht.

Um anhand des Hostnamens umzuleiten setzt du voraus, dass der Hostname im Protokoll mit übertragen wird. Das ist z.B. bei HTTP der Fall. Hier kannst du dann mittels Apache basierend auf dem Hostnamen routen. Das funktioniert aber schon bei HTTPS nicht mehr.
 
Hallo,
Zum Thema iptables.
Iptables arbeitet, soweit ich weiß, auf Ebene 3 und 4 des OSI-Modells, sprich IP und Port. Hier findet keine Unterscheidung nach Hostnamen statt. Deshalb kannst du auch nur z.B. Öffentliche_IP:Port_80 auf Interne_IP:Port_80 weiterleiten und nicht auf Interne_IP_1:Port_80, Interne_IP_2:Port_80 etc. (Loadbalancer mal ausgenommen, aber das ist hier nicht das Thema). Also keine Möglichkeit n Server hinter einer öffentlichen IP über den selben Port direkt anzusprechen.

Vielen dank für die Info!
Nur zur Info, wäre sowas denn mit einem Loadbalancer möglich?
Ist warscheinlich ein wenig Zweckentfremdet, aber könnte hilfrei sein...

Gruß
wanie
 
Morgen,

wie saeckereier schon sagte, nein. es geht nicht.

Ein Loadbalancer dient dazu die Last für z.B. einen Webauftritt auf mehrere Systeme zuverteilen, die alle identische Inhalte ausliefern. Von außen hast du keine Möglichkeit zu beeinflußen auf welchem System du landest.

mfg
HeadCrash
 
Ok, danke für die Antworten.
Im Professionellen Bereich wird sowas dann vermutlich über mehrere Internet IP's und iptables gelöst oder?
Ich denke für meinen Zweck werde ich dann mit dem redirect proxy was apache anbietet Arbeiten. und für die anderen Dienste halt dann einfach auf andere Ports ausweichen.
Ist zwar dann immer umständlich, aber wenn mans weis geht das schon.

Nur wundert mich das es dafür wirklich noch keine Lösung gibt.
Bin wohl der einzige der solche Flausen im Kopf hat :D

Gruß
wanie
 
Im Professionellen Bereich wird sowas dann vermutlich über mehrere Internet IP's und iptables gelöst oder?

Nein, das geht genau so mit einer Externen IP die auf den loadbalancer zeigt und dieser gibt einfach an die richtigen Webserver weiter, Ansonsten ist sowas noch per DNS-Roundrobin oder simplen Reverse-Proxy möglich.

Nur wundert mich das es dafür wirklich noch keine Lösung gibt.
Bin wohl der einzige der solche Flausen im Kopf hat

Sowas wird auch nie funktionieren da es eine solche Funktion in TCP/IP und DNS nicht gibt, du kannst kein DNS-Eintrag auf irgendeinen x-beliebigen Service Routen der danach noch die zu verwendeten Ports wissen soll und dann auch noch dazu die hürde in private Netze überspringt. Was vielleicht möglich wäre, da kenn ich jetzt deine Hardware nicht, wäre Flat Based Loadbalancing, dabei werden die MAC-Adressen umgeschrieben damit der Switch hinterm Gateway die Anfragen direkt an die richtigen Server weiterleitet, ist aber eine erhebliche Kostenfrage und geht IMO wiederum nur für HTTP, HTTPs ist wieder schluss, bei anderen Services hab ich jetzt keine Erfahrung damit gesammelt.

Was du jedoch machen könntest wäre das Routing deiner externen IP auf verschiedene Ports deiner internen Server.

externeip:80 --> server1:80
externeip:81 --> server2:81
externeip:82 --> server3:82

Dann alle Subdomains auf server1:80 per vhosts einrichten und von dort Redirects auf externeip:81, externeip:82 usw. mit mod-rewrite kannst du dann auch noch die subdomains hinzufügen, jedoch wird der client immer die Port-Nummern in der Adressleiste sehen.
 
Zuletzt bearbeitet:
Rein für http wäre das einfachste ein Apache als Reverse-Proxy auf dem Router, dann zeigen alle Hostnamen auf die IP des Routers und der leitet weiter.
 

Ähnliche Themen

pf: interne Anfragen-Umleitung

VHOST Problem, Debian Lenny

squid transparent proxy will nicht transparent werden !! :-(

virtual hosts richtig einrichten

Problem mit IPTables

Zurück
Oben