Traefik: Datenverkehr auf einen anderen Server weiterleiten

 

Als Vorbereitung für das Übersiedeln meiner Websites habe ich nach einer Möglichkeit gesucht den kompletten Datenverkehr vom alten Server einfach auf den neuen weiterzuleiten. 

DNS-Eintrag ändern

Bisher habe ich nach dem Übertragen meiner Websites auf einen neuen Server nur den DNS-Eintrag geändert und gewartet bis dieser überall aktiv war. Innerhalb einer gewissen Übergangsphase landeten die Zugriffe dabei teils noch am alten, teils schon am neuen Server. Klar kann vorbereitend die TTL der DNS-Einträge verkleinert und somit die Übergangszeit zumindest für einen Großteil der Zugriffe minimiert werden, dennoch bleibt eine gewisse Zeit, in der die Versionsstände der Server etwas auseinanderdriften. 

ⓘ
Die TTL (Time to Live) ist eine Eigenschaft eines jeden DNS-Eintrags und gibt vor, in welchen Abständen andere DNS-Server diesen auf eine Änderung kontrollieren sollen. Je nach Auslastung der DNS-Server wird der Wert in der Praxis nicht immer eingehalten, speziell, wenn die Zeit auf wenige Minuten gestellt wird. Übliche TTL-Werte sind 86400 Sekunden (24 Stunden) oder 3600 Sekunden (1 Stunde)

Um die Downtime beim Serverwechsel möglichst gering zu halten, habe ich den Datenverkehr vom alten Server dieses Mal einfach auf den neuen weitergeleitet. 

Alle Anfragen vom alten auf den neuen Server weiterleiten

Ich habe alle Docker-Volumes: Traefik Reverse Proxy + Let´s Encrypt inklusive aller Websites mit rsync auf den neuen Server kopiert und dort aktiviert. Damit alle Zugriff am Ziel-Server  landen, habe ich die Traefik-Einstellungen am Quell-Server ersetzt. Mit dem folgenden Setup können über die IP-Adresse des alten Servers, alle Zugriffe auf den neuen Server weitergeleitet werden und somit die Zeit bis die DNS-Änderungen flächendeckend bekannt sind überbrückt werden:

Für das Setup habe ich zwei Dateien angelegt: docker-compose.yml und traefik.yml:

Traefik docker-compose.yml

version: "3.3"
services:
  traefik:
    image: "traefik:v2.8"
    container_name: "traefikforward2"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./traefik.yml:/etc/traefik/traefik.yml"

Traefik sucht in /etc/traefik nach einer traefik.yml-Datei und versucht diese zu laden:

traefik.yml

Die folgende Traefik-Konfiguration leitet http und https-Anfragen komplett auf einen anderen Server. Die IP-Adresse für die Umleitung ist hier mit dem Platzhalter ???.???.???.??? befüllt und muss entsprechend der IP-Adresse des Zielservers angepasst werden. Durch die Option tls: passthrough wird der komplette Datenverkehr verschlüsselt weitergeleitet und somit dem Ziel-Server überlassen. 

[+]
providers:
  file:
    filename: /etc/traefik/traefik.yml

accessLog: {}
log:
  level: DEBUG

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

tcp:
  routers:
    router4web:
      entryPoints:
        - web
      service: web-forward
      rule: "HostSNI(`*`)"
    router4websecure:
      entryPoints:
        - websecure
      service: websecure-forward
      rule: "HostSNI(`*`)"
      tls:
         passthrough: true

  services:
    web-forward:
      loadBalancer:
        servers:
          - address: "???.???.???.???:80"

    websecure-forward:
      loadBalancer:
        servers:
          - address: "???.???.???.???:443"

Durch das Anpassen der Rule "HostSNI(`*`)" eines Routers könnten auch nur bestimmte Websites weitergeleitet werden (* erlaubt alle Domain-Namen). Natürlich können mit dem Setup auch weitere Ports, wie zum Beispiel 25 beim Betrieb eines Mailservers angegeben werden. Ich habe die Traefik-Konfiguration (traefik.yml) absichtlich schlank gehalten, damit diese noch übersichtlich bleibt. Der Inhalt der traefik.yml Datei ist ein einfaches Beispiel und hat mir geholfen die einzelnen Traefik-Services besser zu verstehen:

Die entryPoints legen die Zugriffe, als Beispiel auf bestimmte Ports fest. Ein Zugriff über einen entryPoint kann dann von einem Router verarbeitet und an ein Service übergeben werden.

Forwarder starten

Der Start erfolgt aus dem Ordner mit den zuvor angelegten Dateien mit dem Befehl docker compose up:

docker compose up -d

Zugriffe kontrollieren

In der traefik.yml-Datei habe ich das Loglevel auf "DEBUG" gesetzt um eingehende Zugriffe in der Ausgabe des Docker-Containers beobachten zu können. Die Aufrufe können einfach mit "docker logs" angezeigt werden:

docker logs traefikforward2 -f

Ausgabe:

Siehe auch, Praxisbericht zum Übersiedeln meines Webservers: alle Docker-Container übersiedeln

Weitere Informationen zu meinem Traefik-Setup, siehe auch: sichere https Verbindung: Traefik Reverse Proxy + Let´s Encrypt

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details