Email Homeserver auf Dedicated Server Tunneln
Hey zusammen!
Ich hab zuhause nen Mailserver (Mailcow) am Laufen und bei Hetzner nen Dedicated Server. Jetzt überleg ich, ob es Sinn macht, den Traffic vom Home-Mailserver über den Dedi zu tunneln, um die Public IP vom Server zu nutzen. Der Dedi hat zwei Public IPs, und ich dachte, ich könnte die zweite IP dafür verwenden. Irgendeine VPN-Lösung wie WireGuard oder IPsec wäre ja denkbar.
Macht das Ganze Sinn?
Ich möchte den Mailserver Zuhause betreiben (Private Mails)
Danke schon mal!
Ich hab zuhause nen Mailserver (Mailcow) am Laufen und bei Hetzner nen Dedicated Server. Jetzt überleg ich, ob es Sinn macht, den Traffic vom Home-Mailserver über den Dedi zu tunneln, um die Public IP vom Server zu nutzen. Der Dedi hat zwei Public IPs, und ich dachte, ich könnte die zweite IP dafür verwenden. Irgendeine VPN-Lösung wie WireGuard oder IPsec wäre ja denkbar.
Macht das Ganze Sinn?
Ich möchte den Mailserver Zuhause betreiben (Private Mails)
Danke schon mal!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670984
Url: https://administrator.de/forum/email-homeserver-auf-dedicated-server-tunneln-670984.html
Ausgedruckt am: 29.01.2025 um 18:01 Uhr
105 Kommentare
Neuester Kommentar
Hallo,
was für einen Vorteil hast Du wenn Du über den Server getunnelt auf Mailcow zugreifst?
Es ist nur eine Fehlerquelle mehr.
Dann würde ich den Mailcow eher auf dem Server in der Cloud laufen lassen wegen der schnelleren Anbindung.
Und Zuhause über die IP vom Server surfen macht keinen Spass.
Die meiste IPs in Rechenzentren haben Probleme bei Zugriff auf viele Webseiten. Reddit, Youtube, Microsoft, etc.
Ich tippe gerade auf so einem mittels RDP und nutzen einige Seite am Client bei mir zu Hause.
Stefan
was für einen Vorteil hast Du wenn Du über den Server getunnelt auf Mailcow zugreifst?
Es ist nur eine Fehlerquelle mehr.
Dann würde ich den Mailcow eher auf dem Server in der Cloud laufen lassen wegen der schnelleren Anbindung.
Und Zuhause über die IP vom Server surfen macht keinen Spass.
Die meiste IPs in Rechenzentren haben Probleme bei Zugriff auf viele Webseiten. Reddit, Youtube, Microsoft, etc.
Ich tippe gerade auf so einem mittels RDP und nutzen einige Seite am Client bei mir zu Hause.
Stefan
Moin,
ginge mit einer DNAT-Regel. Ports 25, 465 und 587 (SMTP) sowie 143 und 993 (IMAP) dann auf die IP deines int. Mailservers umleiten.
https://www.elektronik-kompendium.de/sites/net/0812111.htm
Würde aber entweder den Mail-Server direkt auf den Cloud-Server umziehen ODER auf dem Cloud-Server einen MTA einsetzen, der ggf. die Mails noch zwischenpuffern könnte.
ginge mit einer DNAT-Regel. Ports 25, 465 und 587 (SMTP) sowie 143 und 993 (IMAP) dann auf die IP deines int. Mailservers umleiten.
https://www.elektronik-kompendium.de/sites/net/0812111.htm
Würde aber entweder den Mail-Server direkt auf den Cloud-Server umziehen ODER auf dem Cloud-Server einen MTA einsetzen, der ggf. die Mails noch zwischenpuffern könnte.
brauchst Du alles nicht.
Dein Mailserver kann prima zuhause stehen und bekommt alle Mails der Welt. Nur versenden ist ja Dein Problem. Dazu brauchst Du den Server im RZ (bzw. dessen IP) als Mail-Relay. Wenn Du dort einen Mini-Postfix (o.ä.) einsetzt und die beiden so miteinander connectest, dass der RZ-Server die Mails vom Homeserver entgegen nimmt und von dort sendet, ist alles im Lot.
Mache ich seit vielen Jahren so. Ich fahre den Homeserver sogar nachts herunter, alles kein Problem. Die eingehenden Mails werden zurückgestellt, die sendenden Server versuchen es später und morgens, wenn Du hochfährst kommt alles rein.
Prinzip:
https://thomas-leister.de/zentralen-mailserver-mit-weiteren-servern-nutz ...
https://legacy.thomas-leister.de/postfix-als-smarthost-mail-relay-fuer-a ...
Für die Mailkuh:
https://community.mailcow.email/d/1163-interner-mail-relay
Noch simpler ist es natürlich, die Mails gleich über einen Provider (als "Smarthost") zu leiten. Dann werden sie dort aber auch zunächst empfangen, können aber z.B. per POP3 so heruntergeladen werden, dass sie nicht dort liegen bleiben.
https://wiki.ubuntuusers.de/Postfix/
Ich denke aber, die von Dir angedachte Lösung lässt sich auch umsetzen. Sinngemäß wie oben vom Kollegen @em-pie beschrieben, aber nur für den Versand, also IMO nur Port 25 denn nur für den Versand brauchst Du die IP des Hosters und 465 und/oder 587 sind Ports, mit denen Deine Clients an Deinem Server angebunden werden, nicht aber Ports mit denen Dein Server sendet.
Ob das alles sinnvoll ist, ist fraglich, ich hab' das damals mal als "Spielprojekt" gemacht, weil viele hier im Forum immer gesagt haben, Mailserver zu hause geht nicht, aber das Projekt hat lange gehalten Man lernt eine Menge dabei, daher mach es
Viele Grüße, commodity
Dein Mailserver kann prima zuhause stehen und bekommt alle Mails der Welt. Nur versenden ist ja Dein Problem. Dazu brauchst Du den Server im RZ (bzw. dessen IP) als Mail-Relay. Wenn Du dort einen Mini-Postfix (o.ä.) einsetzt und die beiden so miteinander connectest, dass der RZ-Server die Mails vom Homeserver entgegen nimmt und von dort sendet, ist alles im Lot.
Mache ich seit vielen Jahren so. Ich fahre den Homeserver sogar nachts herunter, alles kein Problem. Die eingehenden Mails werden zurückgestellt, die sendenden Server versuchen es später und morgens, wenn Du hochfährst kommt alles rein.
Prinzip:
https://thomas-leister.de/zentralen-mailserver-mit-weiteren-servern-nutz ...
https://legacy.thomas-leister.de/postfix-als-smarthost-mail-relay-fuer-a ...
Für die Mailkuh:
https://community.mailcow.email/d/1163-interner-mail-relay
Noch simpler ist es natürlich, die Mails gleich über einen Provider (als "Smarthost") zu leiten. Dann werden sie dort aber auch zunächst empfangen, können aber z.B. per POP3 so heruntergeladen werden, dass sie nicht dort liegen bleiben.
https://wiki.ubuntuusers.de/Postfix/
Ich denke aber, die von Dir angedachte Lösung lässt sich auch umsetzen. Sinngemäß wie oben vom Kollegen @em-pie beschrieben, aber nur für den Versand, also IMO nur Port 25 denn nur für den Versand brauchst Du die IP des Hosters und 465 und/oder 587 sind Ports, mit denen Deine Clients an Deinem Server angebunden werden, nicht aber Ports mit denen Dein Server sendet.
Ob das alles sinnvoll ist, ist fraglich, ich hab' das damals mal als "Spielprojekt" gemacht, weil viele hier im Forum immer gesagt haben, Mailserver zu hause geht nicht, aber das Projekt hat lange gehalten Man lernt eine Menge dabei, daher mach es
Viele Grüße, commodity
Läuft bei mir seid mehr als einem Jahr. Der Mailcow ist bei mir Zuhause auf dem Server installiert und geht über einen SSL Tunnel zum Hetzner Server(Wobei meine Firewall die VPN Verbindung aufbaut). Der Hetzner Server ist der VPN Server, meine Firewall ist der VPN Client. Alle Mail relevanten Ports werden an den eigenen Server weitergeleitet. In meiner Firewall sind Regeln angelegt worden, die dafür sorgen das der ausgehende Traffic des Mailcows auch über den Tunnel und schließlich über die Internet Verbindung des Hetzner Servers raus gehen.
Funktioniert einwandfrei und ohne Probleme.
Dein vorhaben ist daher umsetzbar und auch von mir empfohlen. Somit umgehst du als Privater Nutzer die dynamische ISP IP oder gar CGNAT IP.
Liebe Grüße
Üba3ba
Funktioniert einwandfrei und ohne Probleme.
Dein vorhaben ist daher umsetzbar und auch von mir empfohlen. Somit umgehst du als Privater Nutzer die dynamische ISP IP oder gar CGNAT IP.
Liebe Grüße
Üba3ba
In meinem Testsetup hat der Tunnel auch funktioniert, mir geht's nur primär um die Weiterleitungen. Werde da wahrscheinlich mit iptables arbeiten müssen.
Richtig! Das kannst du mit iptables lösen. Habe ich auch so gemacht.
Ich habe einen openvpn Server installiert und eingerichtet. Wird aber mit Wireguard auch funktionieren.
Ich kann dir meine iptables rules mal geben:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.16.20.5:443
-A PREROUTING -i eth0 -p tcp -m tcp --dport 993 -j DNAT --to-destination 172.16.20.6:993
-A PREROUTING -i eth0 -p tcp -m tcp --dport 587 -j DNAT --to-destination 172.16.20.6:587
#-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.20.6:80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 172.16.20.6:25
-A POSTROUTING -o eth0 -j MASQUERADE
Wichtig ist hierbei folgende Zeile:
-A POSTROUTING -o eth0 -j MASQUERADE
Sie sorgt dafür dass nur Verkehr der über das eth0 rausgeht, mit der public ip des vservers maskiert wird. Verkehr der über das vpn interface geht, wollen wir nicht maskieren, da wir ja die public ip's am Mailcow Server sehen wollen, die sich mit diesem verbinden.
Das war mir wichtig, da ich alles aktiv monitore.
Port 25 muss auch weitergeleitet werden. Für die Mail Server zu Mail Server Kommunikation
Viel Spaß bei der Umsetzung.
Das sieht super aus und spart dann den zweiten Mailserver.
IMO sind die regeln in Zeile 16-17 aber überflüssig, weil sie Clients betreffen. Interne Clients connecten direkt mit dem Mailserver, können also die Umleitung gar nicht verwenden. Externe Clients verwenden sie auch nicht, denn sie kommen ja von extern und müssen von dort auf den heimischen Server zugreifen können. Dafür müssen die Ports für IMAP und Submission natürlich geöffnet und zum heimischen Server weitergeleitet werden, damit sie connecten können.
Viele Grüße, commodity
IMO sind die regeln in Zeile 16-17 aber überflüssig, weil sie Clients betreffen. Interne Clients connecten direkt mit dem Mailserver, können also die Umleitung gar nicht verwenden. Externe Clients verwenden sie auch nicht, denn sie kommen ja von extern und müssen von dort auf den heimischen Server zugreifen können. Dafür müssen die Ports für IMAP und Submission natürlich geöffnet und zum heimischen Server weitergeleitet werden, damit sie connecten können.
Viele Grüße, commodity
Also, zwei Aspekte:
1. es macht Sinn, wenn du als Roadwarrior ohne VPN-Aufbau auf deinen heimischen IMAP zugreifen können willst. Dann kannst du z.B. auf dem Hetzner-Ding einen Webmailer installieren, fertig. Portweiterleitung würde ich ungeschützt nicht machen.
2. wenn es um Mailversand geht, ist das Problem ja häufig, dass Dialup-IPs auf vielen RBLS sind. Man kriegt also kaum was los.
Ein VPN kann hier eine mögliche Lösung dafür sein. Eine andere ganz einfach auf dem Hetzner-System einen kleinen Postfix laufen lassen, und diesen im Homeserver als Smarthost eintragen, fertig. Das geht dann auch ohne VPN.
Für eingehende Mails gilt dasselbe: man könnte auf dem Hetzner ein Store+Forward-Postfach einrichten, dein Homeserver holt regelmäßig die Sache ab, fertig. Das geht dann völlig ohne VPN.
Wenn aber natürlich beide Server miteinander sprechen sollen, dann VPN.
1. es macht Sinn, wenn du als Roadwarrior ohne VPN-Aufbau auf deinen heimischen IMAP zugreifen können willst. Dann kannst du z.B. auf dem Hetzner-Ding einen Webmailer installieren, fertig. Portweiterleitung würde ich ungeschützt nicht machen.
2. wenn es um Mailversand geht, ist das Problem ja häufig, dass Dialup-IPs auf vielen RBLS sind. Man kriegt also kaum was los.
Ein VPN kann hier eine mögliche Lösung dafür sein. Eine andere ganz einfach auf dem Hetzner-System einen kleinen Postfix laufen lassen, und diesen im Homeserver als Smarthost eintragen, fertig. Das geht dann auch ohne VPN.
Für eingehende Mails gilt dasselbe: man könnte auf dem Hetzner ein Store+Forward-Postfach einrichten, dein Homeserver holt regelmäßig die Sache ab, fertig. Das geht dann völlig ohne VPN.
Wenn aber natürlich beide Server miteinander sprechen sollen, dann VPN.
Um Clients die sich aus dem LAN auf den Mailserver zugreifen wollen, habe ich splitt DNS eingerichtet.
Vergessen zu erwähnen.
@Gentooist
Du hast recht mit der Sicherheit. Ohne Firewall ist das nicht zu empfehlen.
Den Rest finde ich zu umständlich.
Wenn alles richtig eingerichtet ist, DNS, DKIM, SPF und Reverse DNS, dann kann der Server auch zuverlässig Mails versenden. Ist bei mir zumindest der Fall.
Ach ja. Falls dein vServer auch bei Hetzner ist, musst die mit einem Ticket beantragen das Port 25 geöffnet werden soll. Sonst bleibt dieser geschlossen.
@commodity
Was meinst du genau bitte? Das verwirrt mich jetzt.
Kannst du das näher erläutern?
Vergessen zu erwähnen.
@Gentooist
Du hast recht mit der Sicherheit. Ohne Firewall ist das nicht zu empfehlen.
Den Rest finde ich zu umständlich.
Wenn alles richtig eingerichtet ist, DNS, DKIM, SPF und Reverse DNS, dann kann der Server auch zuverlässig Mails versenden. Ist bei mir zumindest der Fall.
Ach ja. Falls dein vServer auch bei Hetzner ist, musst die mit einem Ticket beantragen das Port 25 geöffnet werden soll. Sonst bleibt dieser geschlossen.
@commodity
Was meinst du genau bitte? Das verwirrt mich jetzt.
Kannst du das näher erläutern?
@commodity
Die Weiterleitung sind ganz sicher nötig. Klar, in der Hetzner Firewall müssen die Ports für IMAP,SMTP und HTTP geöffnet werden. Dann werde diese Ports über den Tunnel zum Server im LAN weitergeleitet mit iptables.
SOmit können externe Clients sich auf dem Mailserver verbinden und MAils via IMAP abrufen und über SMTP versenden. Der Webmailer und die Mailcow Admin UI sind auch erreichbar über HTTPS.
Interne Clients können sich auch auf den Mailserver verbinden, wenn in den Clients die Ip's korrekt eingetragen werden oder man ein splitt DNS Setup fährt.
Splitt DNS ist meiner Meinung nach zu bevorzugen.
MO sind die regeln in Zeile 16-17 aber überflüssig, weil sie Clients betreffen. Interne Clients connecten direkt mit dem Mailserver, können also die Umleitung gar nicht verwenden. Externe Clients verwenden sie auch nicht, denn sie kommen ja von extern und müssen von dort auf den heimischen Server zugreifen können. Dafür müssen die Ports für IMAP und Submission natürlich geöffnet und zum heimischen Server weitergeleitet werden, damit sie connecten können.
Die Weiterleitung sind ganz sicher nötig. Klar, in der Hetzner Firewall müssen die Ports für IMAP,SMTP und HTTP geöffnet werden. Dann werde diese Ports über den Tunnel zum Server im LAN weitergeleitet mit iptables.
SOmit können externe Clients sich auf dem Mailserver verbinden und MAils via IMAP abrufen und über SMTP versenden. Der Webmailer und die Mailcow Admin UI sind auch erreichbar über HTTPS.
Interne Clients können sich auch auf den Mailserver verbinden, wenn in den Clients die Ip's korrekt eingetragen werden oder man ein splitt DNS Setup fährt.
Splitt DNS ist meiner Meinung nach zu bevorzugen.
Vielleicht verstehe ich Deinen Aufbau falsch, aber an sich "versenden" Clients keine Mails. Das macht der Mailserver. Die Clients übergeben ihm diese und der schickt sie ins Netz (zum Zielserver). Diesese Kommunikation findet allein über Port 25 statt.
Wenn sich interne oder externe Clients per IMAP bzw. SMTP-Submission verbinden, verbinden sie sich auf Port 143,465,587,993. In Deinem Fall also auf Port 993 und 587 Deines Homeservers. Von dort werden die Mails dann über Port 25 ins Netz geschickt (s.o.). Wozu also solle das in Zeile 16/17 stehende DST-NAT für Port 587,993 zum Hetzner-Server dienen? Da wird nie ein Bit drüberlaufen.
Edit: Wahrscheinlich nutzt Du die IP des Hetzner auch eingehend (was nicht nötig wäre)? Dann brauchst Du natürlich Weiterleitungen von dort auf Deinen internen Server. Ich bin davon ausgegangen, dass die o.b. Konfiguration aber die Deiner heimischen Firewall ist.
Viele Grüße, commodity
Wenn sich interne oder externe Clients per IMAP bzw. SMTP-Submission verbinden, verbinden sie sich auf Port 143,465,587,993. In Deinem Fall also auf Port 993 und 587 Deines Homeservers. Von dort werden die Mails dann über Port 25 ins Netz geschickt (s.o.). Wozu also solle das in Zeile 16/17 stehende DST-NAT für Port 587,993 zum Hetzner-Server dienen? Da wird nie ein Bit drüberlaufen.
Edit: Wahrscheinlich nutzt Du die IP des Hetzner auch eingehend (was nicht nötig wäre)? Dann brauchst Du natürlich Weiterleitungen von dort auf Deinen internen Server. Ich bin davon ausgegangen, dass die o.b. Konfiguration aber die Deiner heimischen Firewall ist.
Viele Grüße, commodity
@fabichan
Habe etwas vergessen. Wenn du auf dem vServer mit iptables Ports weiterleiten möchtest, musst du auch das ip forwarding aktivieren.
Füge oder ändere die folgende Zeile:
Lade die Konfiguration neu:
Habe etwas vergessen. Wenn du auf dem vServer mit iptables Ports weiterleiten möchtest, musst du auch das ip forwarding aktivieren.
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
Lade die Konfiguration neu:
sudo sysctl -p
Zitat von @Ueba3ba:
Mein vServer ist die zentralle Anlaufstelle für alle eingehenden Verbindungen.
A und MX Records zeigen auf die public ip des vServers.
Mein vServer ist die zentralle Anlaufstelle für alle eingehenden Verbindungen.
A und MX Records zeigen auf die public ip des vServers.
Ah, dann ist das oben Deine Firewall-Config für den Hetzner-Server. Dann brauchst Du die Weiterleitungen natürlich. Ich bin davon ausgegangen, dass es die Config für die Weiterleitung des Home-Servers ist (darum ging es dem TO ja eigentlich). Geklärt.
Dann ist das aber nur die halbe Miete, denn der Homeserver braucht ja auch noch ein DST-NAT für P25 zum Hetzner-Server, um versenden zu können.
Viele Grüße, commodity
Dann ist das aber nur die halbe Miete, denn der Homeserver braucht ja auch noch ein DST-NAT für P25 zum Hetzner-Server, um versenden zu können.
Hab ich. Der Mailcow geht über die VPN ins Internet, über den VPS.
@fabichan
Hast du bei Hetzner eine Firewall angelegt und die entsprechenden Ports dort geöffnet?
Du kannst deshalb nicht ansprechen, da du in deinem Hetzner Portal keine Firewall erstellt hast . Du musst eine erstellen, Ports öffnen und die Firewall deinem VPS zuweisen.
Hetzner Firewall
Hetzner Firewall
Es fehlt die Route vom RZ Server zu deinem Heimserver.
Hast du auf dem RZ Server auch ip forwarding aktiviert?
Das ist natürlich völliger Quatsch. Kommt davon wenn ich während meiner Arbeit noch im Forum helfe. Sorry.
Es muss natürlich dort stehen
oder nur für den Host
Hast du auf dem RZ Server auch ip forwarding aktiviert?
AllowedIPs = 10.0.0.1/32, 192.168.178.251/24
Das ist natürlich völliger Quatsch. Kommt davon wenn ich während meiner Arbeit noch im Forum helfe. Sorry.
Es muss natürlich
192.168.178.0/24
oder nur für den Host
192.168.178.251/32
Kommt jetzt n fehler, dass die route bereits existiert am heimserver
Sicher, dass die route nicht irgendwie am RZ Server muss?
Sicher, dass die route nicht irgendwie am RZ Server muss?
Ich habe noch nie einen WG Tunnel gebaut. Immer nur oVPN.
Du hast natürlich recht, die Route zu deinem Heimserver muss im RZ Server definiert werden. Füge einmal der WG Config auf dem RZ Server in der Peer Section die ip deines Heim Servers hinzu. Bei AloowedIPs. WG setzt Routen automatisch für IP's die in AllowedIPs stehen.
Entferne also in der WG Config deines Heimservers die ip wieder(192.168.178.251/23)
10.0.0.2 zu pingen klappt aber
Ping auf 192.168.178.251 muss funktionieren
Gut, das klappt jetzt. Ich kann vom RZ Server 192.168.178.251 pingen und es kommt eine Antwort.
Freut mich das es funktioniert.Jetzt sollte doch auch das Port forwarding klappen
Richtig, jetzt sollte es funktionieren.Willst du nur Verbindungen zu port 25 über den Tunnel nach drau0en schicken, oder soll alles über den Tunnel gehen?
Dann musst du Policy-Based Routing auf deinem Heim-Server einrichten.
Willst du IMAP und SMTP Verbindungen an deinem Heim-Server oder am RZ Server entgegennehmen?
Wenn es nur um den Mailversand geht(Port25), dann musst du nur sicherstellen das alle Verbindungen an Port 25 über den Tunnel gesendet werden und mit MASQUERADE
mit einer deiner beiden public ips maskiert wird. SNAT.
Willst du IMAP und SMTP Verbindungen an deinem Heim-Server oder am RZ Server entgegennehmen?
Wenn es nur um den Mailversand geht(Port25), dann musst du nur sicherstellen das alle Verbindungen an Port 25 über den Tunnel gesendet werden und mit MASQUERADE
mit einer deiner beiden public ips maskiert wird. SNAT.
OK. IP Forwarding ist aktiv.
Hast du mit beiden public ips des RZ Servers versucht eine SSh Verbindung aufzubauen?
Hast du iptables neu gestartet nach dem du die Regel hinzugefügt hast?
Und installiere noch
um deine iptables Config speichern zu können
Lass mal ein tcpdump auf dem RZ Server laufen wenn du die SSH Verbindung aufbaust.
und poste ein paar Zeilen der Ausgabe
Hast du mit beiden public ips des RZ Servers versucht eine SSh Verbindung aufzubauen?
Hast du iptables neu gestartet nach dem du die Regel hinzugefügt hast?
systemctl restart iptables
Und installiere noch
apt install iptables-persistent
Lass mal ein tcpdump auf dem RZ Server laufen wenn du die SSH Verbindung aufbaust.
tcpdump -i any port 2222
und poste ein paar Zeilen der Ausgabe
Ping vom RZ Server zur Ip des Heim-Servers funktioniert?
Roten auf beiden Servern stimmen? Bitte noch mal posten.
Ping auf die WG Interfaces funktionieren?
Die iptables Rules sind korrekt eingerichet?
Zeig mal die Ausgabe von
auf dem RZ Server und entferne folgende Einträge:
in der WG Server Config.
Roten auf beiden Servern stimmen? Bitte noch mal posten.
Ping auf die WG Interfaces funktionieren?
Die iptables Rules sind korrekt eingerichet?
Zeig mal die Ausgabe von
iptables -t nat -vnL
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp5s0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o enp5s0 -j MASQUERADE
in der WG Server Config.
Entferne die beiden Rules aus der iptables ipv4.conf
und poste dann noch mal bitte die ausgabe von
und starte iptables und wg neu
106 6240 DNAT 6 -- enp5s0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 to:10.0.0.2:22
0 0 DNAT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 to:192.168.178.251:22
und poste dann noch mal bitte die ausgabe von
iptables -t nat -vnL --line-number
und starte iptables und wg neu
Entferne bitte mit
die Rule für Port 2222 und füge diese neu hinzu mit
und starte iptables neu. Dann versuche bitte eine SSH Verbindung an Port 2222 aufzubauen.
Und dann bitte noch mal die Ausgabe von
iptables -t nat -D PREROUTING 1
die Rule für Port 2222 und füge diese neu hinzu mit
iptables -t nat -A PREROUTING -i deinInterface -p tcp --dport 2222 -j DNAT --to-destination 192.168.178.251:22
Und dann bitte noch mal die Ausgabe von
iptables -t nat -vnL --line-numbers
Und nebenbei tut mir leid, dass das so aufhaltend ist
Passt schon, ist eine nette Abwechslung und ich kann dem Forum auch mal etwas zurück geben.
Moin.
Wundert mich nicht das das so nicht funktioniert. Der Grund liegt darin das die Pakete mit einer öffentlichen SRC IP am Mailserver ankommen und dieser die Antwort nicht zurück über den Tunnel schickt sondern wie gewohnt bei solchen IPs über sein Default-GW! Es kommt also zu asymmetrischem Routing und damit auch zu keiner Verbindung.
Um das zu umgehen gibt es drei Möglichkeiten:
Die erste besteht darin den Traffic auf dem Server des Rechenzentrums der in den Tunnel weitergeleitet wird ausgehend zum Mailserver zu Masqueraden so das für den Mailserver der Traffic von der Wireguard-Tunnel-IP des Servers im Rechenzentrum kommt:
Der Nachteil bei dieser Methode besteht darin das der Mailserver immer nur die Tunnel-IP als Absender sieht und niciht die externe IP des anderern Mailservers.
Außerdem ist das Masquerading mehr Arbeit für den Server im Rechenzentrum und macht dass ganze langsamer.
Die zweite besteht darin am Mailserver eingehenden Traffic in der Firewall mit einer Maskierung zu versehen (Firewall-Mark) und dann per Routing-Rule und einer separaten Routing-Tabelle den Traffic über den Wireguard Tunnel zu schicken. Alternativ kann man sich die Markierung auch sparen wenn man die Routing-Rule anhand der Ports definiert so dass sämtlicher Traffic von diesen Ports per Default über den Tunnel geschickt werden.
Die Variante mit der Routing-Rule ist die bevorzugte da der Mailserver dann auch die externe IP des anderen Mailservers sehen kann und das performance fressende NAT über den Tunnel entfällt.
Bsp. on the fly auf dem Mailserver (hier nur als bsp. Port 25), dauerhafte Config kommt auf deinen genutzten Network Manager an.
Die dritte ist das man am Mailserver einen Gateway Redirect macht so das dessen sämtlicher Traffic ausschließlich über den Tunnel geht. Das erreicht man indem man den AllowedIPs 0.0.0.0/0 hinzufügt. Dann entfallen sämtliches NAT im Tunnel oder Routing-Marks.
Bitte beachten das man bei der zweiten Variante in der Wireguard-Client-Config in den AllowediPs 0.0.0.0/0 setzen muss und das Erstellen der Routen mittels Table = off deaktivieren muss. Sonst werden Pakete mit Public IPs durch das Cryptokey-Routing blockiert.
Gruß goldcap
Wundert mich nicht das das so nicht funktioniert. Der Grund liegt darin das die Pakete mit einer öffentlichen SRC IP am Mailserver ankommen und dieser die Antwort nicht zurück über den Tunnel schickt sondern wie gewohnt bei solchen IPs über sein Default-GW! Es kommt also zu asymmetrischem Routing und damit auch zu keiner Verbindung.
Um das zu umgehen gibt es drei Möglichkeiten:
Die erste besteht darin den Traffic auf dem Server des Rechenzentrums der in den Tunnel weitergeleitet wird ausgehend zum Mailserver zu Masqueraden so das für den Mailserver der Traffic von der Wireguard-Tunnel-IP des Servers im Rechenzentrum kommt:
iptables -t nat -A POSTROUTING -o mailconnect -d 10.0.0.2 -j MASQUERADE
Außerdem ist das Masquerading mehr Arbeit für den Server im Rechenzentrum und macht dass ganze langsamer.
Die zweite besteht darin am Mailserver eingehenden Traffic in der Firewall mit einer Maskierung zu versehen (Firewall-Mark) und dann per Routing-Rule und einer separaten Routing-Tabelle den Traffic über den Wireguard Tunnel zu schicken. Alternativ kann man sich die Markierung auch sparen wenn man die Routing-Rule anhand der Ports definiert so dass sämtlicher Traffic von diesen Ports per Default über den Tunnel geschickt werden.
Die Variante mit der Routing-Rule ist die bevorzugte da der Mailserver dann auch die externe IP des anderen Mailservers sehen kann und das performance fressende NAT über den Tunnel entfällt.
Bsp. on the fly auf dem Mailserver (hier nur als bsp. Port 25), dauerhafte Config kommt auf deinen genutzten Network Manager an.
echo 200 to_wireguard >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 table 200
ip rule add ipproto tcp from 10.0.0.2 sport 25 lookup 200
Die dritte ist das man am Mailserver einen Gateway Redirect macht so das dessen sämtlicher Traffic ausschließlich über den Tunnel geht. Das erreicht man indem man den AllowedIPs 0.0.0.0/0 hinzufügt. Dann entfallen sämtliches NAT im Tunnel oder Routing-Marks.
Bitte beachten das man bei der zweiten Variante in der Wireguard-Client-Config in den AllowediPs 0.0.0.0/0 setzen muss und das Erstellen der Routen mittels Table = off deaktivieren muss. Sonst werden Pakete mit Public IPs durch das Cryptokey-Routing blockiert.
Gruß goldcap
Hmm, es gibt keine möglichkeit unter debian die iptables neuzustarten.. wird das nicht direkt angewendet?
Doch, die gibt es
systemctl restart iptables
@Goldcap
Danke. Da war ich wohl total auf dem Holzweg. Hatte ich komplett übersehen.
Google mal policy routing linux ...z.B.
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-poli ...
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-poli ...
Zeig mal die Ausgabe von
und gib mal ein
dann solltest du mit iptables neu starten können
Heißt also:
Auf deinem Heim-Server Routing Tabelle anlegen:
Dann fügst du eine Regel hinzu, die besagt: "Jeder Traffic, der über Port 22 läuft, soll über den WireGuard-Tunnel gesendet werden."
Masquerading/NAT auf dem Hetzner-Server einrichten
Nun muss sichergestellt werden, dass ausgehender Traffic nach draußen mit der öffentlichen IP des Hetzner-Servers maskiert wird:
systemctl status iptables
und gib mal
systemctl enable iptables.service
dann solltest du mit
systemctl restart iptables
Heißt also:
Auf deinem Heim-Server Routing Tabelle anlegen:
echo "200 wireguard" >> /etc/iproute2/rt_tables
Dann fügst du eine Regel hinzu, die besagt: "Jeder Traffic, der über Port 22 läuft, soll über den WireGuard-Tunnel gesendet werden."
ip rule add ipproto tcp dport 22 table wireguard
ip route add default via <WireGuard-Gateway> dev wg0(dein wg interface name) table wireguard
Masquerading/NAT auf dem Hetzner-Server einrichten
Nun muss sichergestellt werden, dass ausgehender Traffic nach draußen mit der öffentlichen IP des Hetzner-Servers maskiert wird:
iptables -t nat -A POSTROUTING -o enp5s0 -p tcp --dport 22 -j SNAT --to-source 1.2.3.4(einer deiner beiden public ips)
Gut.
Also weiter.
Auf dem Heim-Server:
Routing Tabelle anlegen
Die 200 ist einfach eine ID für eine benutzerdefinierte Routing-Tabelle
Rule anlegen
Wenn Pakete von Port 22 kommen, sollen sie die Tabelle wireguard nutzen.
Neue default Route anlegen
In dieser Tabelle leiten wir alles über WireGuard (wg0). Passe wg0 an dein Interface Namen des WG an.
Am RZ Server:
Also weiter.
Auf dem Heim-Server:
Routing Tabelle anlegen
echo "200 wireguard" >> /etc/iproute2/rt_tables
Rule anlegen
ip rule add ipproto tcp dport 22 table wireguard
Neue default Route anlegen
ip route add default via 10.0.0.1 dev wg0(dein wg interface name) table wireguard
Am RZ Server:
iptables -t nat -A POSTROUTING -o enp5s0 -p tcp --dport 22 -j SNAT --to-source 1.2.3.4(einer deiner beiden public ips)
Ach ja noch als wichtige Ergänzung, du musst in der Wireguard Config noch in der AllowedIPs 0.0.0.0/0 ergänzen sonst nimmt der Pakete mit öffentlichen IPs durch das Cryptokey-Routing gar nicht erst an!
Zusätzlich das Erstellen der Routen abschalten, damit nicht sämtlicher Traffic über den Tunnel geht (Table=off).
Die Client-Config sollte also so aussehen
Zum Thema
Zusätzlich das Erstellen der Routen abschalten, damit nicht sämtlicher Traffic über den Tunnel geht (Table=off).
Die Client-Config sollte also so aussehen
[Interface]
Address = 10.0.0.2/24
PrivateKey = key
Table = off
[Peer]
PublicKey = key
Endpoint = 46.4.xxx.xxx:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Zum Thema
Als erstes solltest du den Rat von em-pi befolgen.
Damit wir iptables als service neu starten und den status prüfen können.
Und gib mir mal 1-2 Tage. Dann würde ich dein Setup einmal in meinem Lab nachstellen.
Die iptables gibt es unter Debian/ Ubuntu nicht.
Es handelt sich um eine Komponente, die im Kernel verankert ist (eigentlich beteiligter, iptables ist nur das Frontend). Das OS hat keinen Dienst dafür implementiert.
Sucht mal nach dem Fehler oben, da wird man fündig
Es handelt sich um eine Komponente, die im Kernel verankert ist (eigentlich beteiligter, iptables ist nur das Frontend). Das OS hat keinen Dienst dafür implementiert.
Sucht mal nach dem Fehler oben, da wird man fündig
Damit wir iptables als service neu starten und den status prüfen können.
Und gib mir mal 1-2 Tage. Dann würde ich dein Setup einmal in meinem Lab nachstellen.
Dann eben mal wieder zu Fuß.
Das das Forwarding aktiviert ist, gehe ich mal von aus, das ist ja sowieso mandatory.
Daten innerhalb von "<>" bitte durch eigene Werte ersetzen.
Klappt hier im TestLab wie erwartet einwandfrei.
Alternativ zur letzten Routing Rule arbeitet man mit Firewall-Marks, da hat man mehr Kontrolle als mit einfachen Routing Rules
Für das obige Beispiel sähe das Marking auf dem Server daheim so aus
und die passende Routing-Rule dafür dann so
Achtung, ausgeführte Routing Table entry und routing rule und iptables Befehle sind natürlich non persistent, sind also nach einem Neustart wieder weg! Für eine persistente Config natürlich die Regeln auf deinem bei dir verwendeten Network Manager übertragen.
Happy networking!
Das das Forwarding aktiviert ist, gehe ich mal von aus, das ist ja sowieso mandatory.
Daten innerhalb von "<>" bitte durch eigene Werte ersetzen.
Server im Rechenzentrum:
SRCNAT am WAN
iptables -t nat -A POSTROUTING -o <WANINTERFACE> -j MASQUERADE
DSTNAT Portweiterleitung WAN :2222 > Tunnel > Server :22
iptables -t nat -A PREROUTING -p tcp --dport 2222 -i <WANINTERFACE> -d <WAN-IP> -j DNAT --to-destination 10.0.0.2:22
Firewall Forwarding der DSTNAT Weiterleitung akzeptieren
iptables -I FORWARD -i <WAN-INTERFACE> -o <WIREGUARD-INTERFACE> -d 10.0.0.2 -p tcp --dport 22 -j ACCEPT
Wireguard Config am Server
[Interface]
Address = 10.0.0.1/24
PrivateKey = <PrivateKey Server>
[Peer]
PublicKey = <Public Key Client>
AllowedIPs = 10.0.0.2/32
Server daheim
Wireguard Client-Config
[Interface]
Address = 10.0.0.2/24
PrivateKey = <PrivateKey Client>
Table = off
[Peer]
PublicKey = <Public Key Server>
Endpoint = <WAN-IP-SERVER>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Custom Routing Table erstellen
echo 200 wireguard >> /etc/iproute2/rt_tables
Default-Route in Table hinzufügen die über den Tunnel führt
ip route add default via 10.0.0.1 dev <WIREGUARD-INTERFACE> table wireguard
Routing Rule erstellen damit Traffic Ausgehend von Port 22 wieder zurück über den Tunnel geleitet wird
ip rule add ipproto tcp from 10.0.0.2 sport 22 lookup wireguard
Klappt hier im TestLab wie erwartet einwandfrei.
Alternativ zur letzten Routing Rule arbeitet man mit Firewall-Marks, da hat man mehr Kontrolle als mit einfachen Routing Rules
Für das obige Beispiel sähe das Marking auf dem Server daheim so aus
iptables -t mangle -A INPUT -j CONNMARK --restore-mark
iptables -t mangle -A INPUT -m mark --mark 0 -p tcp --dport 22 -i <WIREGUARD-INTERFACE> -j MARK --set-mark 5
iptables -t mangle -A INPUT -j CONNMARK --save-mark
ip rule add fwmark 0x5 lookup wireguard
Achtung, ausgeführte Routing Table entry und routing rule und iptables Befehle sind natürlich non persistent, sind also nach einem Neustart wieder weg! Für eine persistente Config natürlich die Regeln auf deinem bei dir verwendeten Network Manager übertragen.
Happy networking!
Danke Goldcap.
Also kann --to-destination auch die Tunnel IP sein. Dachte es müsste auf die LAN IP geforwarded werden. Aber klar, wenn der SSH Server auf 0.0.0.0 /0 lauscht, dann geht das auch mit der Tunnel IP.
Und da er zwei public IP's an seinem Eth Interface anliegen hat, muss noch -d <WANINTERFACE IP> mit angegeben werden. Korrigiere mich wenn ich falsch liege.
Wenn keine any any Regel vorhanden ist, muss er natürlich auch noch den Traffic vom WAN Interface zum WG Interface zur IP x.x.x.x. auf Port 22 erlauben mit
Danke für deine Mühe
iptables -t nat -A PREROUTING -p tcp --dport 2222 -i <WANINTERFACE> -d <WAN-IP> -j DNAT --to-destination 10.0.0.2:22
Also kann --to-destination auch die Tunnel IP sein. Dachte es müsste auf die LAN IP geforwarded werden. Aber klar, wenn der SSH Server auf 0.0.0.0 /0 lauscht, dann geht das auch mit der Tunnel IP.
Und da er zwei public IP's an seinem Eth Interface anliegen hat, muss noch -d <WANINTERFACE IP> mit angegeben werden. Korrigiere mich wenn ich falsch liege.
Wenn keine any any Regel vorhanden ist, muss er natürlich auch noch den Traffic vom WAN Interface zum WG Interface zur IP x.x.x.x. auf Port 22 erlauben mit
iptables -I FORWARD -i <WAN-INTERFACE> -o <WIREGUARD-INTERFACE> -d 10.0.0.2 -p tcp --dport 22 -j ACCEPT
Danke für deine Mühe
Zitat von @Ueba3ba:
Danke Goldcap.
Also kann --to-destination auch die Tunnel IP sein. Dachte es müsste auf die LAN IP geforwarded werden. Aber klar, wenn der SSH Server auf 0.0.0.0 /0 lauscht, dann geht das auch mit der Tunnel IP.
Danke Goldcap.
iptables -t nat -A PREROUTING -p tcp --dport 2222 -i <WANINTERFACE> -d <WAN-IP> -j DNAT --to-destination 10.0.0.2:22
Also kann --to-destination auch die Tunnel IP sein. Dachte es müsste auf die LAN IP geforwarded werden. Aber klar, wenn der SSH Server auf 0.0.0.0 /0 lauscht, dann geht das auch mit der Tunnel IP.
Ja klar. So lange er auch auf dem Wireguard IF lauscht kein Problem.
Und da er zwei public IP's an seinem Eth Interface anliegen hat, muss noch -d <WANINTERFACE IP> mit angegeben werden. Korrigiere mich wenn ich falsch liege.
Wenn du zwei IPs hast und nur eine davon weiterleiten willst, ja korrekt.Wenn keine any any Regel vorhanden ist, muss er natürlich auch noch den Traffic vom WAN Interface zum WG Interface zur IP x.x.x.x. auf Port 22 erlauben mit
iptables -I FORWARD -i <WAN-INTERFACE> -o <WIREGUARD-INTERFACE> -d 10.0.0.2 -p tcp --dport 22 -j ACCEPT
Jepp, aber bitte bitte keine Any To Any in der FORWARD Chain an einem öffentlichen erreichbaren Server! Die gehört per Default dicht gemacht und nur das durchgelassen was man explizit erlaubt! Alles andere ist grob fahrlässig.
Tja ohne jegliche aktuelle Config von dir vorliegen zu haben kann man nur raten, dazu habe ich heute Abend ehrlich gesagt keine Böcke mehr. Da musst du dir auch was mühe geben deine gesamte Config des Firewall-Regelwerks und Wireguard zu posten, nebst Routing Table Ausgaben.
Denn wie gesagt läuft das obige so im Lab.
Und mit dem tcpdump siehst du eigentlich detailliert was wie weit kommt, mehr braucht es nicht.
Denn wie gesagt läuft das obige so im Lab.
Und mit dem tcpdump siehst du eigentlich detailliert was wie weit kommt, mehr braucht es nicht.
Hab das jetzt mal nachgebaut, leider ohne erfolg...
Vielleich nochmal in aller Ruhe das Wireguard Tutorial gewissenhaft lesen und umsetzen. Oder...gleich IPsec (Strongswan) dafür verwenden.
Als internes VPN Netz das 10.0er Banalnetz zu wählen ist keine gute Idee. Siehe hier.
@ Goldcap
Ist jetz bei mir hängengebliben
Auch das ist jetzt hängengebliben
Da ich zum Beispiel nur einen VPS in Betrieb habe, und dieser eh schon durch die FW von Hetzner etwas geschützt ist,
habe ich das bei mir vernachlässigt.
Zu meiner Verteidigung: Ich nutze meinen VPS nur als forwarder, auf diesem werden keine Dienste zur Verfügung gestellt. Abgesehen von ssh. Auf der Gegenseite ist eine UTM in Betrieb.
Mir war auch nicht klar dass es bei dem Dedicated Servern keine FW vom Hoster gab, die noch vorgeschaltet wird.
Diese scheint es nur für VPS zu geben.
@fabichan
Am besten du machst mal Pause bis morgen. Glaub mir...
Kannst du es verkraften den RZ Server neu aufzusetzten? Den Heim Server eventuell auch??
Es scheint dass deine Konfig wirklich, wie schon erwähnt von Goldcap, ziemlich verfummelt ist.
Am besten du fängst von vorne, mit einem sauberen Systen an.
Ich bin mir sicher das du es dann zum fliegen bringst.
Gn8 und liebe Grüße
Ja klar. So lange er auch auf dem Wireguard IF lauscht kein Problem.
Der sshd Dienst scheint standardmässig auf allen Interfaces zu lauschen.sysadmin@docker-vm01:~$ sudo ss -tulnp | grep sshd
[sudo] password for sysadmin:
tcp LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* users:(("sshd",pid=2093172,fd=9))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=958,fd=3))
tcp LISTEN 0 128 [::1]:6010 [::]:* users:(("sshd",pid=2093172,fd=7))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=958,fd=4))
sysadmin@docker-vm01:~$
Ist jetz bei mir hängengebliben
Wenn du zwei IPs hast und nur eine davon weiterleiten willst, ja korrekt.
Hatte ich die ganze Zeit über total übersehen.Auch das ist jetzt hängengebliben
Jepp, aber bitte bitte keine Any To Any in der FORWARD Chain an einem öffentlichen erreichbaren Server! Die gehört per Default dicht gemacht und nur das durchgelassen was man explizit erlaubt! Alles andere ist grob fahrlässig.
Versteht sich eigentlich von selbst.Da ich zum Beispiel nur einen VPS in Betrieb habe, und dieser eh schon durch die FW von Hetzner etwas geschützt ist,
habe ich das bei mir vernachlässigt.
Zu meiner Verteidigung: Ich nutze meinen VPS nur als forwarder, auf diesem werden keine Dienste zur Verfügung gestellt. Abgesehen von ssh. Auf der Gegenseite ist eine UTM in Betrieb.
Mir war auch nicht klar dass es bei dem Dedicated Servern keine FW vom Hoster gab, die noch vorgeschaltet wird.
Diese scheint es nur für VPS zu geben.
Hetzner bietet eine eigene Firewall-Lösung nur für Cloud-Server (VPS) an, nicht für Dedicated Server.
Für Dedicated Server musst du die Firewall selbst verwalten, z. B. mit:
iptables oder nftables unter Linux
pf unter FreeBSD
@fabichan
Am besten du machst mal Pause bis morgen. Glaub mir...
Kannst du es verkraften den RZ Server neu aufzusetzten? Den Heim Server eventuell auch??
Es scheint dass deine Konfig wirklich, wie schon erwähnt von Goldcap, ziemlich verfummelt ist.
Am besten du fängst von vorne, mit einem sauberen Systen an.
Ich bin mir sicher das du es dann zum fliegen bringst.
Gn8 und liebe Grüße