Freetz: Verwendung von Wireguard

Fox.Mulder

Mitglied
Mitglied seit
21 Jan 2007
Beiträge
658
Punkte für Reaktionen
13
Punkte
18
Hallo,
ich möchte Wireguard verwenden, um um die Geolocation Sperre bestimmter Dienste zu überwinden. Dazu habe ich einen VPS, auf dem Wireguard läuft. Das Routing bestimmter Adressbereiche darüber funktioniert. Damit kann ich den VPS über den Tunnel bereits erreichen. Meine Routing Tabelle sieht folgendermaßen aus:
Code:
root@fritz:/etc/init.d# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 dsl
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 wg0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 lan
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 wg0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 dsl
192.168.1.1     0.0.0.0         255.255.255.255 UH        0 0          0 dsl
192.168.180.1   0.0.0.0         255.255.255.255 UH        0 0          0 dsl
192.168.180.2   0.0.0.0         255.255.255.255 UH        0 0          0 dsl
192.168.188.0   0.0.0.0         255.255.255.0   U         0 0          0 lan
192.168.189.0   0.0.0.0         255.255.255.0   U         0 0          0 guest

Nun würde ich gerne den gesamten Traffic über den Tunnel leiten.

Ubuntu: Wireguard-Server-Konfiguration
Code:
[Interface]
PrivateKey = <Server:Private-Key>
ListenPort = 51820
Address = 192.168.0.2/24
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

[Peer]
PublicKey = <Client:Public-Key>
AllowedIPs = 192.168.0.1/32, 192.168.168.0/24
Freetz: Wireguard-Client-Konfiguration
Code:
[Interface]
PrivateKey = <Client:Private-Key>
ListenPort = 51821
DNS = 8.8.8.8

[Peer]
PublicKey = <Server:Public-Key>
Endpoint = <Server:IP>:51820
AllowedIPs = 192.168.0.0/24, 10.0.0.0/24, 0.0.0.0/0
PersistentKeepalive = 21

Freetz: Start Wireguard
Code:
Saving wireguard/wireguard ... done.
Writing 4653 bytes to /var/flash/freetz ... done.
Stopping WireGuard ... done.
Starting WireGuard ... Line unrecognized: `DNS=8.8.8.8'
Configuration parsing error
done.
Der DNS Eintrag in der Konfiguration wird nicht unterstützt. Leider wird auch 0.0.0.0/0 beim Einrichten der Routen ignoriert. Was kann ich tun, um den Traffic komplett über den VPN Tunnel zu leiten?


Viele Grüße.
 
Zuletzt bearbeitet:
Entferne den Check in files/root/etc/init.d/rc.wireguard für 0.0.0.0/0.
 
Wäre das nicht ein Problem, wenn es zwei Default Routen gibt? Ich habe es mit folgendem Anweisungen manuell getestet:

1. Hinzufügen einer Route zum VPN Server über DSL
Code:
ip route add xxx.xxx.xxx.xxx/32 dev dsl
2. Löschen der default Route über DSL und Hinzufügen der default Route über wg0
Code:
ip route del default dev dsl
ip route add default dev wg0
3. Google DNS Server in der Fritz!Box eingetragen: 8.8.8.8, 8.8.4.4

4. Zur Konfiguration von IPTABLES auf dem VPS habe ich die Anweisungen von folgendem Blog verwendet: https://www.ckn.io/blog/2017/11/14/wireguard-vpn-typical-setup/. Die DNS Konfiguration aus dem Blog für den VPS habe ich vorerst ignoriert.

Zum Testen habe ich den Befehl "tcpdump -i wg0" sowohl auf dem VPS als auch auf der Fritz!Box verwendet.

Damit funktioniert es nun über IPv4. IPv6 habe ich explizit deaktivert, da Netflix sonst nur die Deutschen Inhalte liefert. Ich habe auch festgestellt, dass die Verbindung direkt über DSL und nicht über den Tunnel läuft, wenn der DNS-Name zu einer IPv6 Adresse aufgelöst wird. Wie ich auch IPv6 über den Tunnel routen kann, muss ich noch herausfinden.
 
Zuletzt bearbeitet:
Hallo,

ich denke auch der einzige Weg wäre wie von Fox.Mulder beschrieben. Man müsste erst eine Route auf den Tunnel-Endpunkt setzen, ggf auch auf DNS IPs, fasll diese nicht durch den Tunnel gehen sollen und dann könnte man die 0/0 überschreiben.


Gruß
 
Zuletzt bearbeitet:
Ich bin irgendwie noch am überlegen ob es wirklich so gut ist die 0/0 vom DSL zu überschreiben bzw. zu löschen. Das bedeutet dass die Fritzbox ausschließlich mit dem VPN kommunizieren kann. Wie sieht es mit SIP aus? Da gibt es doch bestimmt noch andere Services die nicht mehr funktionieren. Auch wenn man DDNS nutzt und Portfreigaben angelegt hat, funktionieren diese auch nicht mehr.
 
Gibt es irgendeine Möglichkeit, alle Daten eines speziellen Gerätes durch den Tunnel zu leiten?
 
Zuletzt bearbeitet:
ich bin mir leider nicht so sicher in wie fern das mit der FritzBox geht. Das was du willst ist "source routing", also eine routing Entscheidung in der Fritzbox anhand der Source IP.
Die FritzBox bleibt weiterhin GW für dein Gerät im Netz. Eigentlich geht sowas mit "ip rule" aber das scheint auf der FritzBox nicht zu gehen.
Vielleicht haben wir hier im Forum noch ein Experten der dazu ein Idee hat.
 
@albundy118

Danke für den Hinweis.

Source Based Routing funktioniert! Da ich nicht weiß, wo die Routing Tables auf der Fritz!Box definiert sind, verwende ich für die zusätzliche Routing Table die Nummer "2".

In folgendem Beispiel wird der Internet Traffic des Gerätes mit der IP 192.168.1.36 im IP Adressbereich der Fritz!Box (192.168.1.0/24) durch den Wireguard Tunnel geroutet.

1. Wireguard Konfiguration in der Fritz!Box (192.168.0.1: Tunnel IP der Fritz!Box, 192.168.0.2: Tunnel IP des Servers)
Code:
AllowedIPs = 192.168.0.0/24, 0.0.0.0/0

2. Definition der Routing Tabelle für das Gerät mit der IP 192.168.1.36:
Code:
ip rule add prio 200 from 192.168.1.36 table 2

3. Regeln für die Routing Tabelle "2"
Code:
ip ro add default via 192.168.0.1 table 2
ip ro add 192.168.1.0/24 dev lan table 2
EDIT: Ich hatte die Angabe von table 2 unter 3. Regeln für die Routing Tabelle "2" beim Hinzufügen der Routen vergessen. Mit dieser Angabe funktioniert das Source based routing auf einer Fritzbox 7520 freetz-ng 7.25.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: FunkReich
Hey, konntest Du inzwischen eine Lösung finden?

Als Alternative zum source Routing kam mir die Idee, das Gastnetz zu missbrauchen.

Angenommen der wireguard Tunnel steht stabil und man könne die Default Route des Gastnetz über wg0 leiten, würden alle Geräte, die man mit dem Gastnetz verbindet, getunnelt werden. Sodass z.b. den TV der unter geoblocking leidet, einfach mit dem Gastnetz verbindest. Ohne mit ips jonglieren zu müssen und DHCP in der Box könnte ebenfalls aktiv bleiben.

Man bräuchte lediglich eine Route für Zugriffe auf das Internet von Geräten im Gastnetz (IP-Netzwerk 192.168.189.0, Subnetzmaske 255.255.255.0) von der FRITZ!Box über das Tunnelinterface.


Ich nutze freetz, allerdings noch leider ohne das wireguard Modul. Sodass es nicht selbst testen konnte auf die schnelle.


Das Gastnetz wäre nur als workaround. Wäre ebenfalls an solidem source Routing interessiert.
Zb alles über >192.168.178.100 und DHCP Bereich auf 192.168.179.2 bis 192.168.179.99 festlegen.
Dann würden alle Geräte mit statischer festgelegter IP im Bereich 192.168.179.100- 192.168.179.253 sauber aufgeteilt Split Tunneln und wären noch untereinander erreichbar aus dem Lan, was beim gastnetzt nicht ginge.
 
Hallo @FunkReich
ich habe mich nochmal mit dem Source based routing beschäftigt. Beim Testen ist mir aufgefallen, dass ich in #8 unter 3. Regeln für die Routing Tabelle "2" die Angabe von table 2 beim Hinzufügen der Regeln vergessen hatte. Ich habe dies im Beitrag geändert und mit einer Fritzbox 7520 freetz-ng 7.25 getestet. Damit funktioniert das Source based routing.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.