Skip to content

Rolle | Routing für die VMs

Beschreibung

  • einer der drei VMs soll als Gateway (IP+DNS) für die anderen 2 fungieren
  • VPN aufspannen, welches innerhalb der VMs eine Stern-Topologie hat und von außen nutzbar ist

Quelle

zu 2025-04-18 von @kai :

Du könntest eine Rolle suchen/erstellen, die Routing unserer 3 VMs macht, also dass alle ausser einer VM nur intern routen und über diese VM rausgehen, sowohl IP als auch DNS und sowas.

Dazu passend eine VPN Rolle suchen/erstellen (oder nafnlaus nachfragen, ob wir die modifizierte benutzen können), die nen VPN macht wo wir von aussen ins interne Netz mit unseren und anderen Clients (und sonstigen VMs) kommen, sowie die VMs im internen Netz nochmal auch miteinander verbunden sind (Stern)

Bestehendes zum Teile copy&pasten

Variablen benötigt

pro Host in den hosts.yaml:

wireguard_address: "…" # ipv4

host_vars/vpn-server.yaml:

wireguard_override:
    endpoint: "{{ hostvars['servername'].ansible_address }}:51820"
    additional_clients:
    - name: laptop-1
      address: <vpn-address-1> # ipv4
      public_key: "AAA..=="
    - name: laptop-2
      address: <vpn-address-2> # ipv4
      public_key: "AAA..=="
    # […]

roles/wireguard/defaults/main.yml:

wireguard_override: {}
wireguard_defaults:
    endpoint: ""
    additional_clients:
    # […]
    

additional_clients werden dann bei jeder Iteration aufm Server deployed, heißt aufm Admin-Endgerät:

  1. legt man secret_key an
  2. erstellt die eigene config (holt sich den pubkey des Servers einmalig selbst)
  3. trägt seine address+pubkey im inventory ein

Playbook-Plan

  • eine Rolle, jeweils mit wireguard_role: [server|client]. Die Rolle wird auf VPN-Server und VPN-Client gleichzeitig ausgeführt
  • Server erzeugt Schlüsselpaar
  • public key wird in facts hinterlegt
  • für jeden festen Client
    • server public key aus facts lesen
    • Schlüsselpaar erzeugen
    • client public key als fact speichern
    • Server ergänzt Konfiguration mit client public key
  • Server flechtet Liste von zusätzlichen Clients (public_key + ip_adresse) ein

Ausblick

  • web-interface zum Einsehen/Anlegen/Löschen von Clients
Edited by christian.frass