Wireguard Public IP weiterleiten

Einrichtung Loadbalancer

Einrichtung Loadbalancer

Auf Loadbalancer 1 einloggen und folgende Pakete installieren

 

apt install lvs

Nun eine neue Datei mit folgender Config anlegen

nano /etc/keepalived/keepalived.conf 

Inhalt einfügen

global_defs {
     notification_email {
       info@hacker-net.de
     }
     notification_email_from lb001@strange-hosting.com
     smtp_server hacker-net.de
     smtp_connect_timeout 60
  }

  vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 101
      unicast_src_ip 159.69.13.9
      unicast_peer { 49.12.74.225 }
      priority 101
      notify /root/failover.sh
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 775567567ghBysA!asHjk99gf!
      }
      virtual_ipaddress {
          116.202.189.172
      }
      virtual_ipaddress_excluded {
         2a01:4f8:1c0c:8218::1
         }

  }

Nun die failover.sh im root Verzeichnis anlegen

nano /root/failover.sh

Nun Inhalt einfügen

#!/bin/bash

#lb0001 ID : 5605626
#lb0002 ID : 5605974
#floating ip LBS 116.202.189.172 =: 245713
#floating id KC 78.46.239.42 =: 617007
#floatingip6 id 2a01:4f8:1c17:8106::/64 =: 246612
#floating ip  GBL 16126703 =: 78.47.118.115

TYPE=$1
NAME=$2
STATE=$3

case $STATE in
        "MASTER") curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer 5BEoQe1HDjITxzhCPmnp8cJq1Ybv6ehNIgdvrfkiECG0fyASSOQbIlFMj9GF0lsV" -d '{"server": 5605626}' 'https://api.hetzner.cloud/v1/floating_ips/245713/actions/assign'
                  curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer 5BEoQe1HDjITxzhCPmnp8cJq1Ybv6ehNIgdvrfkiECG0fyASSOQbIlFMj9GF0lsV" -d '{"server": 5605626}' 'https://api.hetzner.cloud/v1/floating_ips/246612/actions/assign'
                  curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer 5BEoQe1HDjITxzhCPmnp8cJq1Ybv6ehNIgdvrfkiECG0fyASSOQbIlFMj9GF0lsV" -d '{"server": 5605626}' 'https://api.hetzner.cloud/v1/floating_ips/16126703/actions/assign'
                  curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer 5BEoQe1HDjITxzhCPmnp8cJq1Ybv6ehNIgdvrfkiECG0fyASSOQbIlFMj9GF0lsV" -d '{"server": 5605626}' 'https://api.hetzner.cloud/v1/floating_ips/617007/actions/assign'





                  echo "Master"
                  exit 0
                  ;;
        "BACKUP") echo "backup"
                  exit 0
                  ;;
        "FAULT")  echo "fault"
                  exit 0
                  ;;
        *)        echo "unknown state"
                  exit 1
                  ;;
esac

 

Nun auf Loadblancer zwei einloggen

Folgene pakete installieren

apt install lvs

Nun eine neue Datei mit folgender Config anlegen

nano /etc/keepalived/keepalived.conf 

Inhalt einfügen

nano /root/failover.sh

 

Erstellung Wireguard Server und Client Configs

Auf dem Server:

Erstellung der Server Config, Muss nur einmal gemacht werden.

Schlüsselpaar erstellen.
Sollen mehre IPs erstellt werden empfehle ich für jeden Server + client ein Verzeichnis zu erstellen


Beispiel:
Dazu ein Verzeichnis keys anlegen mit folgenden Unterverzeichnissen je IP (Diese IP Adressen ahbe ich nicht, Beispiel

Bildschirmfoto vom 2022-11-15 09-27-27.png

Nun in das Verzeichnis Server der ersten IP gehen.

wg genkey | tee privatekey | wg pubkey > publickey

Nun haben wir zwei Schlüsseldateien.
Einmal private Key und publickey

Jetzt sieht das ganze so aus

Bildschirmfoto vom 2022-11-15 09-32-37.png


Nun die Config Datei erstellen mit den Schlüsseldateien.
Eine Wireguard Config ist in zwei Teile geteilt.
Einmal Interface das der Lokale Teil für den Computer
(Auch ein Client hat einen lokalen Teil, der Dient dazu das Interface bereitzustellen.

Der zweite Teil sind die Peers, es können auch mehrere Peers eingetragen sein. Aber wir erstellen hier für jede IP einene eigene config. Den Publickey für den Peer haben wir noch nicht.

nano ~/keys/ip_27.44.34.21/server/ip27443421server.conf


[Interface]
Address = 172.16.0.1 # oder irgenein anderes privates Netz from RFC1918 (privates Netz) 10.10.0.x oder 192.168.0.100 oder oder egal. Wichtig, auf einem Computer dürfen die entze nicht gleich sein
PrivateKey = <private_key_vom_server>
ListenPort = 51820 # or jeder andere port der beliebt

[Peer]
PublicKey = <public_key_vom_client_also_der_derdie_ip_bekommen_soll>
AllowedIPs = publicip_v4/32,ipv6 mit subnet # Here tragen wir unsere PUBLIC IPS ein, die auf der PEER Seite zur Verfügung stehen sollen


Ein Beispiel, diese Keys wurden NIE verwendet, also viel Spaß damit
Inhalt Privatekey Server
mJn1lWnRFTze3wojk3a+d5TsPSOolRqt3dfN7ekgukU=
Inhalt Publickey Server
/amP0UXRsKhzW1QsLvQ/7UjchU1oFfkWYZbZj/mWtxA=




[Interface]
Address = 192.168.100.1
PrivateKey = mJn1lWnRFTze3wojk3a+d5TsPSOolRqt3dfN7ekgukU=
ListenPort = 51820

[Peer]
PublicKey = <haben_wir_noch_nicht_leer_lassen>
AllowedIPs = 27.44.34.21/32, 3a01:4d8:xxxx:8106::/64


Nun die Client Schlüssel erstellen konfig erstellen
Dazu ins client Verzeichnis gehen und wieder

wg genkey | tee privatekey | wg pubkey > publickey

Nun haben wir auch dort im Verzeichnis Client auch zwei Schlüssel

Bildschirmfoto vom 2022-11-15 09-39-52.png

Unserer Privatekey
0Is0rjpsSpzBPDoT+Quv/3GWGe1nPKrNfXJa80wUY0E=

Unserer Public Key
2gWEqeQxoGa9hI94UvV4trVVdiG1G7sq0iLr6W5ymUE=


Nun in der Serverconfig den Public key nachtragen unter Peers

nano ~/keys/ip_27.44.34.21/server/ip27443421server.conf

Nun im peer bereich public key "haben wir noch nicht erstezen" Platzhalter mit dem öffentlichem Schlüssel vom Client ersetzten

....
[Peer]
PublicKey = 2gWEqeQxoGa9hI94UvV4trVVdiG1G7sq0iLr6W5ymUE=
AllowedIPs = 27.44.34.21/32, 3a01:4d8:xxxx:8106::/64

Nun die Client Config erstellen

nano ~/keys/ip_27.44.34.21/client/ip27443421client.conf
[Interface]
Address = publicip_v4/32,ipv6 OHNE subnet
PrivateKey = <private_key_vom_client>
ListenPort = 51820 # irgendeiner darf nur auf dem client nicht doppelt sein. Denn dieser Port wird ja nie benutzt. Denn wir verbinden uns ja zum Server und nicht umgekehrt

[Peer]
PublicKey = <public_key_vom_server_also_der_derdie_ip_bekommen_soll>
Endpoint: ip_adresse_vom_server(Die die der Server fest hat) und den Listen Port aus der Server conf
AllowedIPs = 0.0.0.0/0,::/0    Der erste Wert heißt als standard Gateway für ipv4, der zweite standard gateway für ipv6. Spricht route alles

Beispiel:

[Interface]
Address = 27.44.34.21
PrivateKey = 0Is0rjpsSpzBPDoT+Quv/3GWGe1nPKrNfXJa80wUY0E=
ListenPort = 51820
[Peer]
PublicKey = /amP0UXRsKhzW1QsLvQ/7UjchU1oFfkWYZbZj/mWtxA=
Endpoint: 27.44.34.20:51820
AllowedIPs = 0.0.0.0/0,::/0

Nun sind die Configs fertig und können ausgerollt werden.
Dazu die Server config nach /etc/wireguard kopieren

cp  ~/keys/ip_27.44.34.21/server/ip27443421server.conf /etc/wireguard

Nun den Tunnel beim start aktiv schalten

systemctl enable wg-quick@ip27443421server
systemctl start wg-quick@ip27443421server

Wenn ein Loadbalancer im einsatz ist, die Schlüssel und configs auch auf dem Slaveloadbalancer kopieren.
Dort im /etc/wireguard die config auch reinkopieren und auch dort mit systemctl enable den Dienst in die Autostart packen und danach starten

Nun die Client config auf den Client kopieren, entweder den text per Copy und paste übermitteln in eine neue Datei auf den client oder per scp.
Diese muss dann auch in

/etc/wireguard/ip27443421client.conf

Nun diese auch beim starten ausführen

systemctl enable wg-quick@ip27443421client
systemctl start wg-quick@ip27443421client

Fertig.


Einrichtung Client unter OPNSense

In OPNSense einloggen dann unter -> System -> Firmware -> Packages ->

Bildschirmfoto vom 2022-11-15 08-27-16.png

Wireguard auswählen und installieren

Bildschirmfoto vom 2022-11-15 08-29-48.png
Dann F5 drücken damit die Seite aktualisert.
Nun unter VPN Wireguard gehen.
Dort den Haken bei Wireguard rein.

Bildschirmfoto vom 2022-11-15 11-12-30.png

Nun auf den Registerreiter Local und dort auf das kleine + drücken

Bildschirmfoto vom 2022-11-15 11-13-17.png

Nun folgendes Ausfüllen:
Die Daten können per Copy and paste aus der vorher herstellten conf Datei gezogen werden.
Leider unterstützt OPNSense kein import von Conf Dateien

Name : ipadressse ohne punkte dient zur besseren Übersicht
Private Key : den Privaten Key vom Client
Listen Port : irgeneiner hauptsache auf dem Client nicht schon vergeben : 5555
Tunnel Address : die ipdresse mit 32 Netz
alles andere so lassen
Dann Save

Bildschirmfoto vom 2022-11-15 11-16-38.png
Nun auf den Registerreiter Endpoints und dort auf das kleine Plus klicken

Bildschirmfoto vom 2022-11-15 11-21-25.png

Nun folgendes ausfüllen

Name PUBIP : PUPIP und dahinter die IP ohne punkte
Den Public Key vom Server nicht Client
Allowed IP alle
Endpoint Adresse : Die Adresse wo der VPN Server Erreichbar ist.
dann auf Save.

Bildschirmfoto vom 2022-11-15 11-25-27.png

Nun wieder zurück auf den Registerreiter Local da den Eintrag editieren.
Nun im Dropdownmenü peers, den Endpunkt auswählen und Speichern.
Bildschirmfoto vom 2022-11-15 11-32-37.png

Danach im Im Registerreiter General,

den Haken wieder raus. Apply klicken,

Dann haken wieder rein. Apply klicken.

Bildschirmfoto vom 2022-11-15 12-00-20.png
Nun Unterinterfaces -> Assignments -> In der Beschreibung WG1 IP_eintragen. Und dann auf + drücken

Bildschirmfoto vom 2022-11-15 11-46-01.png

Danach auf Save klicken

Bildschirmfoto vom 2022-11-15 11-46-19.png

Nun in Interfaces , dann auf neu erstelle Interface

Bildschirmfoto vom 2022-11-15 12-14-38.png

Nun folgende Einstellungen vornehmen