[TUTORIAL] DS-Lite - Proxmox - ZeroTier SDN (VPN Alternative) - Zugriff auf das Heimnetzwerk

SpencerOne

Member
Oct 27, 2022
5
2
8
Hallo zusammen,

da es nicht so einfach ist über einen DS-Lite Anschluss von außen das Heimnetz zu erreichen, insbesondere in Bezug auf IPv4, habe ich mich dazu entschieden eine kleine Anleitung zu erstellen.

Vorab:
  • Eigentlich wollte ich einen Docker erstellen, aber im LXC Debian Buster 11 lief der Befehl iptables-restore < /etc/iptables/rules.v4 nicht durch. Das liegt anscheinend daran, dass im Hostsystem gewisse Module nur 'on demand' geladen werden. Dazu habe ich noch keine Lösung gefunden.
  • Zudem habe ich iptables anstatt nftables verwendet, da ich es mit nftables noch nicht hinbekommen habe.

1. VM erstellen und eine Minimalinstallation durchführen, in meinem Fall Debian-11.5.0-amd64-netinst.iso
Eine feste IP vergeben z.B. 192.168.1.123.

2. IP forwarding aktivieren: nano /etc/sysctl.conf und folgende Zeile unkommentieren net.ipv4.ip_forward=1

3. Den Befehl sysctl -p ausführen um ip forwarding zu aktivieren
net.ipv4.ip_forward=1

4. curl pgp iptables und iptables-persistent installieren: apt update && apt install curl pgp iptables iptables-persistent

5. Von nftables auf iptables wechseln
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --config iptables
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode

Press <enter> to keep the current choice[*], or type selection number: 1

6. iptables prüfen: iptables-legacy -V
iptables v1.8.2 (legacy)

7. Zerotier installieren: curl -s https://install.zerotier.com | bash

8. Zerotier Netzwerk beitreten: zerotier-cli join <networkid>

9. Den Client in Zerotier Central akzeptieren und als Bridge definieren

2022-10-28 13_07_58-ZeroTier Central und 7 weitere Seiten - Profil 1 – Microsoft​ Edge.png

10. Eine Route zum lokalen Netzwerk hinzufügen, welches man mit Zerotier erreichen will
In dem Feld "Destination" das lokale Netzwerk angeben, z.B. 192.168.1.0/24
In dem Feld "Via" die IP Adresse der Zerotier VM angeben, z.B 192.168.1.123

2022-10-28 13_10_50-ZeroTier Central und 7 weitere Seiten - Profil 2 – Microsoft​ Edge.png

11. Die IPv4 Adresse des Zerotier Netzwerkes festlegen

2022-10-28 13_11_50-ZeroTier Central und 7 weitere Seiten - Profil 3 – Microsoft​ Edge.png

12. Die iptables Regeln anpassen: nano /etc/iptables/rules.v4

-das Zerotier Netzwerk ist hier 192.168.193.0/24
-die Zerotier VM ist hier 192.168.1.123
-das Netzwerkinterface ist hier eth0

Folgende Zeilen einfügen:
Code:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -s 192.168.193.0/24 -j SNAT --to-source 192.168.1.123
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
-A FORWARD -i zt+ -s 192.168.193.0/24 -d 0.0.0.0/0 -j ACCEPT
-A FORWARD -i eth0 -s 0.0.0.0/0 -d 192.168.193.0/0 -j ACCEPT
:OUTPUT ACCEPT [0:0]
COMMIT

13. iptables aktualisieren: iptables-restore < /etc/iptables/rules.v4

Für meine Heimanwendungen, beispielsweise Smarthome, funktioniert es sehr gut.


Offene Punkte:
  • Das Ganze als LXC umsetzen (iptables Fehler)
  • nftables anstatt iptables verwenden

Viele Grüße
Sven
 
Last edited:
Hallo zusammen,

für diejenigen die es gebrauchen können.
Hier ist die nftables Konfiguration z.B. für den Container:

1. CT erstellen z.B. Debian
2. IP forwarding aktivieren (wie oben beschrieben)
3. nftables konfigureren

nano /etc/nftables.conf

Code:
#!/usr/sbin/nft -f

flush ruleset

# NAT-Tabelle
table ip nat {
    chain prerouting {
        type nat hook prerouting priority 0;
        policy accept;
    }

    chain postrouting {
        type nat hook postrouting priority 100;
        policy accept;

        # SNAT: Zerotier → LAN
        oifname "eth0" ip saddr 192.168.193.0/24 snat to 192.168.1.123
    }
}

# Filter-Tabelle
table inet filter {
    chain input {
        type filter hook input priority 0;
        policy accept;
    }

    chain forward {
        type filter hook forward priority 0;
        policy drop;

        # Zerotier → LAN/Internet
        iifname "ztr2q5mdpt" ip saddr 192.168.193.0/24 accept

        # LAN → Zerotier
        iifname "eth0" ip daddr 192.168.193.0/24 accept
    }

    chain output {
        type filter hook output priority 0;
        policy accept;
    }
}

nft -f /etc/nftables.conf
systemctl enable nftables
systemctl start nftables

Den Rest wie gehabt gemäß oben beschriebener Anleitung zur ZeroTier-Konfiguration ausführen – Schritte 7 bis 11.

Gruß
Sven
 
Last edited:
  • Like
Reactions: jan-t
danke für die Anleitung, aber warum hast du es nicht auf die/eine Firewall gemacht, mein Ansatz ist sowas über die Firewall (pfSense) zu machen
 
Es geht hier um die DS-Lite Problematik. Warum ich dieses Setup erstellt habe:
Viele Internetanschlüsse – besonders bei Vodafone verwenden heute DS-Lite (Dual Stack Lite). Das bedeutet:
  • Du bekommst keine öffentliche IPv4-Adresse mehr.
  • Nur eine öffentliche IPv6-Adresse wird zugewiesen.
  • Der IPv4-Verkehr wird über ein CGNAT-System (Carrier Grade NAT) beim Provider abgewickelt.
Problem: Du kannst nicht mehr direkt per IPv4 auf dein Heimnetz zugreifen (z. B. für Home Assistant, Homematic, NAS, etc.), weil dein Router keine eigene, von außen erreichbare IPv4-Adresse hat.
Das andere Szenario ist, dass man z.B. hinter einer Sophos Firewall die nur IPv4 kann, keine IPv6 Verbindung z.B. mit Wireshark aufbauen kann.

Zerotier umgeht das alles elegant, denn Zerotier baut von innen nach außen eine verschlüsselte Verbindung zu einem globalen Mesh-Netzwerk auf, ähnlich wie bei TeamViewer oder Tailscale. Dadurch:
  • ist keine öffentliche IPv4-Adresse erforderlich,
  • funktioniert alles auch hinter CGNAT / DS-Lite,
  • brauchst du keine Portfreigaben oder komplizierte Firewall-Regeln,
  • kannst du direkt auf dein Heimnetz zugreifen, als wärst du lokal verbunden.
 
Das du es wegen CGNAT umgesetzt hast ist mir schon klar
  • Ich wollte von dir wissen warum du zerotier nicht direkt auf der Firewall laufen lässt?
  • Bei mir läuft alles was VPN ist auf der pfSense
  • Warum ist die Wahl auf zerotier und nicht z. B. Tailscale oder, gab es bestimmte Gründe?
 
Das du es wegen CGNAT umgesetzt hast ist mir schon klar
  • Ich wollte von dir wissen warum du zerotier nicht direkt auf der Firewall laufen lässt?
  • Bei mir läuft alles was VPN ist auf der pfSense
  • Warum ist die Wahl auf zerotier und nicht z. B. Tailscale oder, gab es bestimmte Gründe?
Ich wollte eine möglichst einfache Lösung für ein LAN-Gateway mit minimalem Konfigurationsaufwand. Daher habe ich mich für einen LXC-Container mit Debian entschieden, anstatt direkt auf der Firewall zu arbeiten.

Vielen Dank für den Hinweis auf Tailscale – ich habe es mir angeschaut und mittlerweile umgesetzt. Die Konfiguration als LAN-Gateway ist damit sogar noch einfacher als mit Zerotier, insbesondere da keine zusätzlichen Komponenten wie nftables notwendig sind. Das ist also quasi das LAN-Gateway mit minimalstem Konfigurationsaufwand.