, , , , , , , , , , , , , , , , ,

Home Projekt: Wireguard und DHCPv4 selbst gemacht + Statisches Routing

Posted by

0
(0)

Willkommen!

Herzlich Willkommen zu diesem experimentellen Tutorial 🙂

Heute möchte ich euch etwas von meinem neuen Routing zeigen und auch Umsetzungsmöglichkeiten zeigen wie man auch bei sich das ganze umsetzt.

Natürlich muss man nicht das zwingend Zuhause machen, geht auch genauso Online, KVM etc.

Nun, ich habe im Endeffekt mit Wireguard ein Statisches Routing bis nach Hause erstellt und surfe nun in Frankreich Lyon 🙂

Ich muss sagen sehr interessant und zudem werden wir MAC Adressen Binding erstellen und doppelt sichern sodass keiner mal so unsere Statischen IP-Adressen auf unserem Linux leiht. Denn auch eine Sicherheit für das Netzwerk mit Struktur sollte dringend beachtet werden. Denn wir wollen ja nicht, dass der DHCPv4 Server, irgendwelche DHCP Request wahrlos irgendwelche Adressen gibt. Das wäre nicht gut und wäre auch anders besser umsetzbar das ich euch auch erklären möchte 🙂

Meine Experimentelle Routing Infrastruktur

1. DHCPv4 Server einrichten auf Linux Router

				
					sudo apt-get update
sudo apt-get install isc-dhcp-server

				
			

Wir installieren also unseren DHCP Server 🙂

				
					sudo nano /etc/default/isc-dhcp-server

				
			

Jetzt weisen wir das Interface zu worauf der DHCP Empfangen und Requests beantworten soll.

				
					# /etc/default/isc-dhcp-server
INTERFACESv4="z.B eth0 - Hier eure Haupt Schnittstelle damit der DHCP im Lokalen LAN erreichbar ist"
INTERFACESv6=""
				
			

Das kann z.B eth0 sein oder auch varieren. 

Jedoch gilt immer die Haupt Schnittstelle zu nehmen wo auch die anderen Server untereinander kommunizieren können.

				
					rm /etc/dhcp/dhcpd.conf
nano /etc/dhcp/dhcpd.conf
				
			

Wir löschen zuerst die Standard Konfiguration und erstellen mit nano Editor eine neue Konfiguration mit folgenden Einträgen.

				
					authoritative;
default-lease-time 600;
max-lease-time 7200;

subnet {{Static-Subnetz-von-Extern}} netmask 255.255.255.0 {
    range {{Range-A-IPv4}} {{Range-B-IPv4}};
    option routers {{GW-IPv4-Für-diese-IPs}};
    option domain-name-servers 8.8.8.8, 8.8.4.4;

    host {{Dein-Server-Hostname}} {
        hardware ethernet {{Deine Generierte MAC}};
        fixed-address {{Für IPv4 Öffentliche IP}};
    }
}

				
			
  • {{Static-Subnetz-Extern}} – Wir tragen das passende Subnetz ein mit z.B /24 netmask
  • {{GW-IPV4-Für-diese-IPs}} – Das ist der Simulierte Gateway damit GW und Subnetz nicht verschieden sind. Das GW adden wir später zu der zuvor definierten Schnittstelle manuell.
  • {{Dein-Server-Hostname}} – Der exakte Hostname der auch bei Ziel VM oder Rootserver genutzt wird (hostname unter Linux).
  • {{Deine Generierte MAC}} – Hier kannst du eine Random MAC Adresse Beispielsweise erstellen (Link zu externen MAC Generator).
  • {{Für IPv4 Öffentliche IP}} – Die jetzt Öffentliche IPv4 vom Externen Anbieter via wireguard geroutet eintragen.
				
					# Jetzt den DHCPv4 Server starten
sudo systemctl enable isc-dhcp-server
sudo systemctl start isc-dhcp-server

				
			

2. Wireguard für Statisches Routing nutzen

				
					# Für Tunnel .sh Skript folgende Parameter
./tunnel_wg.sh wg0 10.7.0.1/30 10.7.0.2/30
# wg0, wg1, wg2 etc. => Interface name. 10.7.0.1/30 => Kleines internes Subnetz für Ping tests (GW). 10.7.0.2/30 Die Peer Adresse für Server B.
# Bitte .txt vorher öffnen und bei PUB_IP die Haupt IPv4 Adresse eintragen die für den Aufbau des Tunnels (Endpoint) genutzt wird.
# Im Anschluss befindet sich die Client Config unter: nano /etc/wireguard/client-confs/wg+.conf
				
			
Bei Server A jetzt die Routen setzen – /32 die Öffentlichen IPv4 Adressen eintragen unter AllowedIPs
Bei Server B jetzt die Konfiguration speichern

3. IP Routen setzen

Server A – Bereits dank vorheriger Konfiguration in der Wireguard Config automatisch übernommen.

Damit auch unsere Statische IPv4 Adresse die via Wireguard geroutet wurde, zugriff auf das Lokale gesammte Haupt LAN hat, machen wir jetzt sogenannte IP Routes zu den jeweiligen Schnittstellen und Gateways.

Nun auf Server B – Ziel Homeserver etc. folgendes ausführen

				
					# Auf main table die statische-IPv4 von wireguard geroutet jetzt auf das Lokale LAN routen.
ip route add {{ statische-IPv4 }} dev {{ z.B eth0 }}
# Jetzt weisen wir die IPv4 z.B die Wireguard Table 20 zu sodass diese mit dem Wireguard-GW kommunizieren kann.
ip rule add from {{ statische-IPv4 }} table 20

# Unter Table 20 - Jetzt nochmals die routen setzen
ip route add {{ statische-IPv4 }} dev {{ z.B eth0 }} table 20

# Jetzt die Gateway Simulation durchführen - Nur bei Server B
ip addr add GW_IP_Simulation dev LAN_Netzwerk

# Jetzt alle routen Überpfüfen ob diese gesetzt sind
# Für IP rule
ip rule show

# Für Table 20 einsicht
ip route show table 20

# Für main Table alle routen überprüfen
ip route show
				
			

!! WICHTIG !!

Damit die IPv4 jetzt Global im Internet erreichbar sein kann ist es wichtig auf Server A fogendes ausführen (Temporär nur gesetzt – kann in /etc/network/interfaces – dauerhaft gesetzt werden)

				
					# Auf Server A
# Temporär für Test
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
echo 1 > /proc/sys/net/ipv6/conf/default/proxy_ndp
# Ab hier dauerhafte Kernel Rules
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sudo sysctl -p
				
			
				
					# Wer die ARP Rules dauerhaft setzen möchte macht folgendes in der Konfigurations Datei: /etc/network/interfaces
post-up echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
post-up echo 1 > /proc/sys/net/ipv6/conf/default/proxy_ndp

# Am besten am Ende der Config einfügen und abspeichern
				
			

Wir aktivieren somit das IPv4 und Optional das IPv6 IP Forwarding, um die IP-Adressen für das weiter routen zu erlauben.

				
					# Auf Server B
# Ab hier dauerhafte Kernel Rules
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sudo sysctl -p
				
			

Auch auf Server B das ganze accepten da wir dort den Linux Server wiederrum auch als Router verwenden um mit MAC Bindung und DHCPv4 die IPv4-Adressen auf unsere Heim Router oder andere Netzwerk Systeme dann verteilen.

Hier sehen wir nun auch das die IPv4 vom z.B Heimnetz, statisch per ICMP erreichbar ist.

4. Jetzt die Absicherung für MAC Bindung

Hier werden nun zwei Skripte vorgestellt die Ihr mit dem Copy Button komplett kopieren könnt vom Blog und eine z.B skript1.sh datei mit nano Editor in Linux einfügen könnt. Das Zweite Skript hebt im Endeffekt für Aktualisierungen vorher alles auf und danach kann Skript 1 mit angepasster neuer Konfiguartion wieder ausgeführt wenn man z.B neue MACs generiert für IPv4 Adressen im Netzwerk.

				
					#!/bin/bash

# Liste der erlaubten MAC-Adressen und ihren statischen IPs
declare -A mac_ip_mapping
mac_ip_mapping["MAC-1"]="Die statische IPv4 jeweils für zuweisung (Auch identisch bei der DHCPv4 Config)"
mac_ip_mapping["MAC-2-für-zweites-Netzwerk-Gerät"]="Die statische IPv4 jeweils für zuweisung (Auch identisch bei der DHCPv4 Config)"
# Regelnummer für die MAC-Adressenbindung
mac_rule_number=1

# Löschen aller bestehenden Regeln
iptables -F
iptables -X

# Eingehenden Verkehr standardmäßig ablehnen
iptables -P INPUT DROP

# Erlauben von ausgehendem Verkehr
iptables -P OUTPUT ACCEPT

# Erlauben von Weiterleitung für bereits etablierte Verbindungen
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Regeln für die erlaubten MAC-Adressen hinzufügen
for mac in "${!mac_ip_mapping[@]}"; do
    ip="${mac_ip_mapping[$mac]}"
    iptables -A INPUT -m mac --mac-source "$mac" -j ACCEPT
    iptables -I INPUT "$mac_rule_number" -m mac --mac-source "$mac" -j ACCEPT
    ((mac_rule_number++))
    iptables -A INPUT -s "$ip" -j ACCEPT
done

# Droppen aller anderen eingehenden Pakete
iptables -A INPUT -j DROP

# Ausgabe der aktuellen iptables-Regeln
iptables -L -n

				
			
				
					#!/bin/bash

# Löschen aller bestehenden iptables-Regeln
iptables -F
iptables -X

# Eingehenden Verkehr standardmäßig ablehnen
iptables -P INPUT DROP

# Erlauben von ausgehendem Verkehr
iptables -P OUTPUT ACCEPT

# Erlauben von Weiterleitung für bereits etablierte Verbindungen
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Droppen aller anderen eingehenden Pakete
iptables -A INPUT -j DROP

# Ausgabe der aktuellen iptables-Regeln
iptables -L -n

				
			

Sobald Ihr also Skript 1 ausführt werden im Endeffekt alle Geräte ohne eingetragende MAC abgelehnt und können sich erst gar nicht verbinden. Nur der Gateway selbst teilt MAC und IP zu. Gibt also in der KVM oder LXC immer die zugewiesene MAC ein und macht einfach DHCP an. Danach bekommt die Ziel VM oder Rootserver direkt die Öffentliche IPv4 Adresse und kann wenn wirklich alles zu 100% richtig geroutet ist, surfen.

Achtung: Es ist Statisches Routing – Kein NAT davor! Bitte umgehend nicht benötigte Ports mit einer Firewall blocken um die Sicherheit des Ziel Servers zu verbessern.

Somit haben wir erstmal einen DHCPv4 Linux Router gebastelt 🙂 

Ich hoffe euch hat der Beitrag gefallen und ich freue mich auch auf Feedback weil es kann immer sein das etwas nicht verständlich genug rüber kommt und ich Kritik gerne aufnehme und dann somit den Beitrag aktualisiere mit weiteren verbesserten Möglichkeiten 🙂

Facebook
Twitter
WhatsApp
Telegram
Reddit
Email

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert