staging.inyokaproject.org

VPN Server als Relay zum Raspberry (Exitnode)

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

Martin2p

Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: Zähle...

Hallo ☺

Leider habe ich zu meinem Thema nirgends eine Lösung gefunden: Ich beschäftige mich erst seit kurzem mit LinuxServer und Wireguard, denn ich habe folgendes Ziel:

Laptop oder Smartphone verbindet sich mit → VPN [Server A] → Raspberry als Exit Node zum Internet [Server B].

Ich möchte somit Geoblocking umgehen und quasi vom Ausland aus über mein Raspberry zuhause surfen können. Leider unterbindet mein Provider zuhause einen direkten Kontakt - ich besitze keine eigene öffentliche IP Adresse ( "Carrier-Grade NAT" (CGNAT) ) über die ich auf meinen Raspberry zugreifen könnte.

Also soll ein externer VPN Server Abhilfe schaffen mit dem sich mein Raspberry dauerhaft verbindet und somit den Weg frei macht.

Der VPN Server soll den Verkehr komplett an das Raspberry weiterleiten (ausser SSH - bei mir auf Port 49300). Als Firewall nutze ich nftables, was für mich besser zu handhaben ist als iptables. Der Handshake und Ping zwischen den Geräten funktioniert, jedoch bekomme ich es nicht hin, dass der VPN Server den Verkehr an das Raspberry weiterleitet. Auf meinem Router zuhause habe ich Portforwarding für den Wireguardport 51820 UDP für den Raspberry freigeschaltet.

Forwarding selbst ist auch auf dem Server A als auch auf Server B aktiviert in /etc/sysctl.conf und/oder /etc/sysctl.d/99-sysctl.conf:

1
2
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Dass sind die Wireguard-Konfigurationen des Server A:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[Interface]
Address = 10.0.1.1/24
ListenPort = 51820
PrivateKey = .......................

# Laptop
[Peer]
PublicKey  = 4wXUQna8RVJKgryxHs+7HronfEcmnsIJjqNCuhm4wS8=
AllowedIPs = 10.0.1.20/32

# Raspberry
[Peer]
PublicKey  = BFonKc7GXRB07E8dp+aGqhzN6wmM/nB5q7bM04rDbAI=
AllowedIPs = 10.0.1.21/32

#Smartphone
[Peer]
PublicKey  = iUhSJMBnbWPjwnedSMDYV/RDCCFS0yA4CvlmjH8c/VM=
AllowedIPs = 10.0.1.22/32

Konfiguration der NFTables vom Server A:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
flush ruleset

table inet meinefirewall {
        chain input {
                type filter hook input priority 0; policy drop;

        # Lo interface (lokal) immer erlauben
        iif "lo" accept

        # Verbindungstracking: etablierte und verwandte Pakete akzeptieren
        ct state established,related accept

        # SSH erlauben
        tcp dport 49300 accept

        # Wireguard erlauben
        udp dport 51820 accept

        # ICMP (Ping) erlauben
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # Logging und dann Droppen für unerwünschte Pakete, mit Rate-Limiting
        limit rate 5/minute log prefix "NF-INPUT-DROP: " flags all counter drop
    }

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

        # Verbindungstracking: etablierte und verwandte Pakete akzeptieren
        ct state established,related accept

        # Erlaube Forwarding vom WireGuard Interface (z.B. wg0) zum LAN und umgekehrt
        iifname "wg0" accept
        oifname "wg0" accept

        iifname "wg0" oifname "eth0" accept
        iifname "eth0" oifname "wg0" accept
        iifname "wg0" oifname "wg0" accept

        # Logging und Droppen für unerwünschte Forward-Pakete mit Rate-Limiting
        limit rate 5/minute log prefix "NF-FORWARD-DROP: " flags all counter drop
    }

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

    }
}

Hier die Wireguard-Konfiguration vom Raspberry/Server B als Exitnode:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Interface]
PrivateKey = ...................
Address = 10.0.1.21/24
DNS = 1.1.1.1
ListenPort = 51820


# Forwarding aktivieren
PreUp = sysctl -w net.ipv4.ip_forward=1

# VPS Server
[Peer]
PublicKey = RvpRmc6pxNuW5NwxcVGbZd/nmQCXIWfbeHu4ByzSMFw=
AllowedIPs = 0.0.0.0/0
Endpoint = SERVER A IP:51820
PersistentKeepalive = 25

#Smartphone
[Peer]
PublicKey = iUhSJMBnbWPjwnedSMDYV/RDCCFS0yA4CvlmjH8c/VM=
AllowedIPs = 10.0.1.22/32
Endpoint = SERVER A IP:51820
PersistentKeepalive = 25

Und noch NFTables vom Raspberry Server B , mit NAT Regel wegen Exitnode

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
flush ruleset

table inet meinefirewall {
        chain input {
                type filter hook input priority 0; policy drop;

        # Lo interface (lokal) immer erlauben
        iif "lo" accept

        # Verbindungstracking: etablierte und verwandte Pakete akzeptieren
        ct state established,related accept

        # SSH erlauben
        tcp dport 49300 accept

        # Wireguard erlauben
        udp dport 51820 accept

        # ICMP (Ping) erlauben
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # Logging und dann Droppen für unerwünschte Pakete, mit Rate-Limiting
        limit rate 5/minute log prefix "NF-INPUT-DROP: " flags all counter drop
    }

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

        # Verbindungstracking: etablierte und verwandte Pakete akzeptieren
        ct state established,related accept

        # Erlaube Forwarding vom WireGuard Interface (z.B. wg0) zum LAN und umgekehrt
        iifname "wg0" accept
        oifname "wg0" accept

        iifname "wg0" oifname "eth0" accept
        iifname "eth0" oifname "wg0" accept
        iifname "wg0" oifname "wg0" accept

        # Logging und Droppen für unerwünschte Forward-Pakete mit Rate-Limiting
        limit rate 5/minute log prefix "NF-FORWARD-DROP: " flags all counter drop
    }

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

    }
}

table ip nat {
    chain postrouting {
	type nat hook postrouting priority 100;
	oifname "eth0" ip saddr 10.0.1.0/24 masquerade
    }
}

Der Handshake auf Server A:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface: wg0
  public key: RvpRmc6pxNuW5NwxcVGbZd/nmQCXIWfbeHu4ByzSMFw=
  private key: (hidden)
  listening port: 51820

peer: BFonKc7GXRB07E8dp+aGqhzN6wmM/nB5q7bM04rDbAI=
  endpoint: 194.230.161.131:55412
  allowed ips: 10.0.1.21/32
  latest handshake: 30 seconds ago
  transfer: 80.57 KiB received, 66.88 KiB sent
  persistent keepalive: every 25 seconds

peer: iUhSJMBnbWPjwnedSMDYV/RDCCFS0yA4CvlmjH8c/VM=
  endpoint: 178.197.222.32:51820
  allowed ips: 10.0.1.22/32
  latest handshake: 47 minutes, 1 second ago
  transfer: 130.30 KiB received, 80.35 KiB sent
  persistent keepalive: every 25 seconds

peer: 4wXUQna8RVJKgryxHs+7HronfEcmnsIJjqNCuhm4wS8=
  allowed ips: 10.0.1.20/32
  persistent keepalive: every 25 seconds
martin@vmi2680499:~$

Wenn ich NAT auf dem Server A aktiviere funktioniert das surfen mit dessen öffentlicher fixer IP Adresse, was aber nicht mein Ziel ist.

Weiß jemand Rat was noch falsch eingestellt sein könnte? Oder blockt mein Anbieter zuhause eventuell eingehenden UDP Traffic?

Gruß Martin.

adelaar

Anmeldungsdatum:
23. November 2024

Beiträge: 656

Martin2p schrieb:

Bevor ich jetzt weiter auf dein meiner Meinung nach unnötig kompliziertes Konstrukt eingehe, stelle ich dazu mal einige Fragen.

Ich möchte somit Geoblocking umgehen und quasi vom Ausland aus über mein Raspberry zuhause surfen können.

Warum nutzt du dafür nicht den integrierten Wireguard-Server des Routers? Jede Fritzbox mit halbwegs aktuellem OS kann das. Ein Pi wäre daher dafür überflüssig.

Leider unterbindet mein Provider zuhause einen direkten Kontakt

Tut er nicht. Er gibt dir nur keine exklusive IPv4-Adresse. Du hast aber IPv6. Damit geht es.

ich besitze keine eigene öffentliche IP Adresse ( "Carrier-Grade NAT" (CGNAT) ) über die ich auf meinen Raspberry zugreifen könnte.

Bei richtiger Konfiguration hätte dein Pi aber eine öffentlich erreichbare IPv6-Adresse.

Du sagst du willst vom Ausland über dein LAN Zuhause per mobilen Geräten ins Netz gehen. Das mache ich regelmäßig. Der Wireguard-Tunnel wird per IPv6 aufgebaut. Im Tunnel gibt es dann auch IPv4. Dafür ist lediglich erforderlich, dass am Ort im Ausland auch IPv6 vorhanden ist. In Europa ist das in den Mobilfunknetzen nie ein Problem. Ein Problem sind oftmals lediglich falsche APN-Einstellungen fürs Roaming. In den Voreinstellungen der APN-Einstellungen fürs Roaming seitens der Mobilfunk-ISP ist meist nur IPv4 aktiviert. Das kann man aber einfach selbst im mobilen Endgeräte (Tablet, Smartphone) ändern.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

Hallo,

Warum nutzt du dafür nicht den integrierten Wireguard-Server des Routers? Jede Fritzbox mit halbwegs aktuellem OS kann das. Ein Pi wäre daher dafür überflüssig.

Für den Internetzugang zuhause nutze ich einen Router von meinem Provider: "FastMile 5G Gateway 3.2" . Dieser ist durch Branding leider nur bedingt einstellbar und hat keinen integrierten Wireguard Server.

Tut er nicht. Er gibt dir nur keine exklusive IPv4-Adresse. Du hast aber IPv6. Damit geht es.

Leider ist mir meine externe IPv6 Adresse nicht bekannt. Alle Tests wie bspw. der von www.wieistmeineip.de oder ipv6-test.com/ schlagen fehl. Nur Ipv4 wird angezeigt.

adelaar

Anmeldungsdatum:
23. November 2024

Beiträge: 656

Vollständiger Name wäre Nokia FastMile 5G Gateways 3.2

hier das Manual.

Das bedeutet du hast kein Festnetz, also DSL, Fiber oder Cable, sondern nur 5G auch Zuhause

Wegen der APN-Einstellungen. Da gilt was ich zuvor bereits zu den Mobilen Endgeräten schrieb. Lau dem Manual (Link oben) kann man im Nokia FastMile 5G Gateways 3.2 die APN-Einstellungen ändern. Aktiviere dort als ersten Schritt IPv6, damit du IPv6 bekommst.

CG-NAT hast du dann aber mit hoher Wahrscheinlichkeit nicht. CG-NAT ist immer eindeutig an der IPv4-Adresse aus dem Bereich 100.64.0.0/10 erkennbar. Kommt diese aus einem anderen Bereich ist es kein CG-NAT. Siehe: IPv4 Netzbereiche

Weiterer Support dann in einigen Stunden. Bin jetzt erst einmal eine Weile mit dem Rad on the road.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

Hi,

sorry dass ich das Nokia vor dem Fastmile vergessen hatte!

Ja der APN lässt sich anpassen. Ich habe diesen mal auf IPv6 umgestellt - leider bricht dann mein Internet zusammen, die LED oben am Gerät ist dann rot statt grün. Die Einstellungen waren bereits auf Ipv4+IPv6 eingestellt. Somit scheint mein Provider IPv6 nicht zu zulassen.

Viel Spaß beim radeln ☺

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Martin2p schrieb:

Somit scheint mein Provider IPv6 nicht zu zulassen.

Schau mal auf deinem PI (wenn seine default route über deinen Router geht), mit:

host -t a myip.opendns.com 208.67.222.222

nach, welche "externe" IPv4-Adresse dein Router (als border device) hat.
EDIT:

Wenn der PI über einen VPN-Provider ins Internet geht, dann musst Du ein anderes geeignetes Gerät an deinem Router (für die Abfrage der externen IPv4-Adresse vom Router) benutzen.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

Hi,

die Ausgabe ist:

1
2
3
4
5
6
7
 $ host -t a myip.opendns.com 208.67.222.222
Using domain server:
Name: 208.67.222.222
Address: 208.67.222.222#53
Aliases: 

myip.opendns.com has address 194.230.161.131

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Martin2p schrieb:

myip.opendns.com has address 194.230.161.131
:~$ dig -x 194.230.161.131 +short
mob-194-230-161-131.cgn.sunrise.net.

BTW: Das "cgn" könnte für "carrier grade nat" stehen.

EDIT:

Siehe auch: https://community.sunrise.ch/d/6163-cgnat-deaktivieren/2

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 845

Leider verstehe ich deinen Text nicht ganz

Was ist

  • Server A

  • Server B

Warum brauchst du 2 Server?

Ich Persönlich würde das nicht mit Wireguard machen, ich nutze für solche Spielereinen Tailscale, da ist alles sehr einfach zu konfigurieren, ich Setze als Firewall in meinem Netzwerk eine pfSense+ ein auf dem halt Tailscale mit läuft.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

Salü,

BTW: Das "cgn" könnte für "carrier grade nat" stehen.

EDIT:

Siehe auch: https://community.sunrise.ch/d/6163-cgnat-deaktivieren/2

Wenn andere Fehler ausgeschlossen sind was die Konfigurationen anbelangt, würde ich bei Sunrise anrufen und nachfragen ob sie mir das umstellen können 👍

micneu schrieb:

Leider verstehe ich deinen Text nicht ganz

Was ist

  • Server A

  • Server B

Warum brauchst du 2 Server?

Ich Persönlich würde das nicht mit Wireguard machen, ich nutze für solche Spielereinen Tailscale, da ist alles sehr einfach zu konfigurieren, ich Setze als Firewall in meinem Netzwerk eine pfSense+ ein auf dem halt Tailscale mit läuft.

Von Tailscale hab ich durch die ganze Problematik inzwischen auch schon gehört. Aber ich möchte mich intensiver mit Netzwerk und Servern beschäftigen und hab mir eigens dafür einen VPS Server gemietet. Diesen möchte ich universell einsetzen (später noch für für eine Webseite etc.). Als erstes Project habe ich mit VPN begonnen, welches ich in Form von Wireguard auf dem VPS Server mit Ubuntu 22.04. installiert habe.

Ich nutze sonst privat NordVPN, welches aber mittlerweile oftmals auf Netflix geblockt wird.

Der VPS mit seiner fixen IP und dem VPN ist somit mein Server A und soll den Verkehr zum Raspberry (in diesem Fall mein Server B) tunneln, weil dieser als Exitnode dienen soll.

Wenn das alles nicht klappen sollte bleibt mir noch Tailscale ☺

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Martin2p schrieb:

Wenn andere Fehler ausgeschlossen sind was die Konfigurationen anbelangt, würde ich bei Sunrise anrufen und nachfragen ob sie mir das umstellen können

Schlimmer kann es nicht werden. 😉
Es kann entweder natives IPv6 als Ergänzung zum CGN oder DS oder DS-lite oder nur natives IPv4, geben.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 845

Und warum kannst du nicht deinen Server A als Exit Node nutzen, da bist du doch schon in DE oder habe ich da was falsch verstanden? Und wenn du dich mit Netzwerken auseinandersetzen willst, würde ich bei der Firewall beginnen.

Ich habe zu Corona Zeiten für mein Team ein VPN-Gateway gebastelt auf Basis eines RASPI4, seit Kurzem haben wir das Projekt auch auf RASPI5 laufen (entweder Ubuntu oder mit Alpine)

Ich bin deine configs nur überflogen, aber du hast, wenn ich es richtig geshen habe nirgends

AllowedIPs = 0.0.0.0/0, ::/0

Solche Information findet man, wenn man seine Favorisierte Suchmaschine nimmt oder eine KI?

PS: bin auch der Meinung das es sogar in der Offiziellen Doku zu Wireguard steht (da sollte man natürlich zuerst reinschauen)

adelaar

Anmeldungsdatum:
23. November 2024

Beiträge: 656

Da du bei Sunrise bist, einem Anbieter aus CH, kann ich zum ISP nix sagen. Aus deutscher Perspektive ist es extrem ungewöhnlich einen CG-NAT-Anschluss zu haben, bei dem es keine IPv6-Adresse gibt und diese vor allem auch nicht über die APN aktivierbar ist. Die Mobilfunk-ISP in DE vergeben in der Regel keine exklusiven IPv4-Adressen dafür aber IPv6-Adressen, zumindest wenn man das in den APN aktiviert hat.

An deiner Stelle würde ich zunächst versuchen den ISP dazu zu bringen dir entweder eine IPv4-Adresse oder eine IPv6-Adresse zu geben, die aus dem Internet auch erreichbar ist. Sollten die dir IPv6 geben wollen, dann am besten gleich mit IPv6-Prefix-Delegation. Ohne IPv6-Prefix-Delegation bekommen die IPv6-Clients im LAN sonst keine eigene öffentlich erreichbare IPv6-Adresse und es muss auch bei IPv6 NAT genutzt werden. Denn ohne IPv6-Prefix-Delegation hätte ja nur der Router eine IPv6-Adresse bekommen. Wobei es allerdings so zu sein scheint, dass deine Nokia-Kiste gar keine IPv6-Prefix-Delegation beherrscht. Zumindest habe ich beim Überfliegen des Nokia-Manuals dazu nix gefunden. Somit würde dir das auch nix nutzen.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

micneu schrieb:

Und warum kannst du nicht deinen Server A als Exit Node nutzen, da bist du doch schon in DE oder habe ich da was falsch verstanden? Und wenn du dich mit Netzwerken auseinandersetzen willst, würde ich bei der Firewall beginnen.

Ich habe zu Corona Zeiten für mein Team ein VPN-Gateway gebastelt auf Basis eines RASPI4, seit Kurzem haben wir das Projekt auch auf RASPI5 laufen (entweder Ubuntu oder mit Alpine)

Ich bin deine configs nur überflogen, aber du hast, wenn ich es richtig geshen habe nirgends

AllowedIPs = 0.0.0.0/0, ::/0

Solche Information findet man, wenn man seine Favorisierte Suchmaschine nimmt oder eine KI?

PS: bin auch der Meinung das es sogar in der Offiziellen Doku zu Wireguard steht (da sollte man natürlich zuerst reinschauen)

Ich hab meine Wohnung in der Schweiz und von da aus teilweise anderen Netflix-Inhalt als wie wenn ich in Schweden (wo meine 2.Wohnung ist) oder Deutschland bin. Netflix blockiert leider inzwischen die bekannten Exitnods von NordVPN. NordVPN bietet zwar dafür wohl auch dezierte IP-Adressen an (um Sperrlisten etc. zu umgehen) , aber wenn ich die Technik habe und erlernen kann, möchte ich es lieber selbst in die Hand nehmen ☺

1
AllowedIPs = 0.0.0.0/0, ::/0

Dies habe ich in der Konfiguration der wg0.conf auf dem Raspberry unter [Peer] für den VPS Server eingetragen, nur ohne

1
::/0

Auf meinem Smartphone und einem Laptop ist es ebenfalls so eingetragen.

Wenn ich auf dem VPS-Server/Server A dies eintrage bspw. für den Raspberry, dann haut es mich aus dem SSH raus. Ich müsste den SSH Zugang erst noch irgendwie freihalten können, damit dessen Anfragen nicht weitergeleitet werden und ins leere laufen.

Martin2p

(Themenstarter)
Avatar von Martin2p

Anmeldungsdatum:
27. Januar 2023

Beiträge: 24

adelaar schrieb:

Da du bei Sunrise bist, einem Anbieter aus CH, kann ich zum ISP nix sagen. Aus deutscher Perspektive ist es extrem ungewöhnlich einen CG-NAT-Anschluss zu haben, bei dem es keine IPv6-Adresse gibt und diese vor allem auch nicht über die APN aktivierbar ist. Die Mobilfunk-ISP in DE vergeben in der Regel keine exklusiven IPv4-Adressen dafür aber IPv6-Adressen, zumindest wenn man das in den APN aktiviert hat.

An deiner Stelle würde ich zunächst versuchen den ISP dazu zu bringen dir entweder eine IPv4-Adresse oder eine IPv6-Adresse zu geben, die aus dem Internet auch erreichbar ist. Sollten die dir IPv6 geben wollen, dann am besten gleich mit IPv6-Prefix-Delegation. Ohne IPv6-Prefix-Delegation bekommen die IPv6-Clients im LAN sonst keine eigene öffentlich erreichbare IPv6-Adresse und es muss auch bei IPv6 NAT genutzt werden. Denn ohne IPv6-Prefix-Delegation hätte ja nur der Router eine IPv6-Adresse bekommen. Wobei es allerdings so zu sein scheint, dass deine Nokia-Kiste gar keine IPv6-Prefix-Delegation beherrscht. Zumindest habe ich beim Überfliegen des Nokia-Manuals dazu nix gefunden. Somit würde dir das auch nix nutzen.

ChatGPT meint dazu dass in der Schweiz im Gegensatz zu Deutschland noch nicht so oft IPv6 Adressen vergeben werden. Da ich auch nicht direkt Kunde bei Sunrise bin, sondern bei einem Reseller müsste ich das über diesen anstoßen.

Aber zunächste würde mich interessieren ob meine Einstellungen überhaupt so stimmen? 😬

Antworten |