OpenVPN oder Wireguard mit IPv4 und IPv6
Hallo Admins,
stehe gerade vor der Option meine RaspberryPis mit Site2Site auf Wireguard von OpenVPN zu wechseln, da es von außen nur für IPv4 eingerichtet ist. Die OpenVPN Anleitung und Support von @aqui haben mir damals sehr geholfen und im Prinzip bin ich mit OpenVPN recht zufrieden.
Ich informiere mich gerade, welcher Aufwand größer ist: OpenVPN IPv4 mit IPv6 zu ergänzen oder Wireguard aufzusetzen. Da ich mich noch gut an die Leiden erinnern kann, die das OpenVPN Setup mit sich gebracht hat (Wahl der richtigen Verschlüsselung und Herausfinden der Kombinationsmöglichkeiten bis hin zu route, iroute und schließlich der iptables Konfiguration), denke ich nun zweimal drüber nach. Habt ihr hier einen allgemeinen Rat?
Habe mir dazu auch schon mal diese Anleitung durchgelesen: Merkzettel: VPN Installation mit Wireguard
Speziell zu Wireguard: Vor ein paar Monaten bin ich auf nftables umgestiegen. Ich könnte also die iptables Befehle postup/postdown nicht 1:1 nutzen. Den Nat-Teil sollte man nach der Anleitung sogar weglassen. Würde es dann reichen, wenn ich so vorgehe:
postup = add rule ip my_filter_table my_forward_chain iifname "wg0" accept
postdown = delete rule ip my_filter_table my_forward_chain iifname "wg0" accept
- Alternativ könnte man den postup Befehl auch direkt in nftables dauerhaft platzieren, korrekt? Dann wäre der Tunnel halt immer offen.
- Wieso wird der Port für Wireguard nicht ebenfalls bei postup geöffnet, sondern müsste über die Firewall gemacht werden? Beispiel: add rule ip my_filter_table my_input_chain iifname "eth0" ct state new udp dport 999999 counter accept
Wireguard / OpenVPN mit IPv6:
- Müsste ich in nftables in <family> jeweils "ip6" ergänzen bzw. durch "inet" pauschal ersetzen oder sollte man hier vorsichtig sein?
- Gäbe es daneben noch weitere Anpassungen, die man in nftables durchführen müsste, damit Wireguard oder OpenVPN mit IPv6 laufen oder könnte ich meine Firewall im Prinzip so belassen?
- IPv6 Seiten gehen ja aktuell an meiner VPN vorbei. Liegt das daran, dass ich über IPv4 mit dem Server verbunden bin oder würde der Traffic darüber laufen, wenn ich es in nftables "ip" durch "inet" ersetze? Ich vermute ersteres.
- Wie verhält es sich aber in meinem IPv6-Setup in Zukunft bei Seiten, die noch und nur IPv4 nutzen?
Ich hoffe, das waren jetzt nicht zu viele Basic-Fragen.
stehe gerade vor der Option meine RaspberryPis mit Site2Site auf Wireguard von OpenVPN zu wechseln, da es von außen nur für IPv4 eingerichtet ist. Die OpenVPN Anleitung und Support von @aqui haben mir damals sehr geholfen und im Prinzip bin ich mit OpenVPN recht zufrieden.
Ich informiere mich gerade, welcher Aufwand größer ist: OpenVPN IPv4 mit IPv6 zu ergänzen oder Wireguard aufzusetzen. Da ich mich noch gut an die Leiden erinnern kann, die das OpenVPN Setup mit sich gebracht hat (Wahl der richtigen Verschlüsselung und Herausfinden der Kombinationsmöglichkeiten bis hin zu route, iroute und schließlich der iptables Konfiguration), denke ich nun zweimal drüber nach. Habt ihr hier einen allgemeinen Rat?
Habe mir dazu auch schon mal diese Anleitung durchgelesen: Merkzettel: VPN Installation mit Wireguard
Speziell zu Wireguard: Vor ein paar Monaten bin ich auf nftables umgestiegen. Ich könnte also die iptables Befehle postup/postdown nicht 1:1 nutzen. Den Nat-Teil sollte man nach der Anleitung sogar weglassen. Würde es dann reichen, wenn ich so vorgehe:
postup = add rule ip my_filter_table my_forward_chain iifname "wg0" accept
postdown = delete rule ip my_filter_table my_forward_chain iifname "wg0" accept
- Alternativ könnte man den postup Befehl auch direkt in nftables dauerhaft platzieren, korrekt? Dann wäre der Tunnel halt immer offen.
- Wieso wird der Port für Wireguard nicht ebenfalls bei postup geöffnet, sondern müsste über die Firewall gemacht werden? Beispiel: add rule ip my_filter_table my_input_chain iifname "eth0" ct state new udp dport 999999 counter accept
Wireguard / OpenVPN mit IPv6:
- Müsste ich in nftables in <family> jeweils "ip6" ergänzen bzw. durch "inet" pauschal ersetzen oder sollte man hier vorsichtig sein?
- Gäbe es daneben noch weitere Anpassungen, die man in nftables durchführen müsste, damit Wireguard oder OpenVPN mit IPv6 laufen oder könnte ich meine Firewall im Prinzip so belassen?
- IPv6 Seiten gehen ja aktuell an meiner VPN vorbei. Liegt das daran, dass ich über IPv4 mit dem Server verbunden bin oder würde der Traffic darüber laufen, wenn ich es in nftables "ip" durch "inet" ersetze? Ich vermute ersteres.
- Wie verhält es sich aber in meinem IPv6-Setup in Zukunft bei Seiten, die noch und nur IPv4 nutzen?
Ich hoffe, das waren jetzt nicht zu viele Basic-Fragen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 11789002786
Url: https://administrator.de/contentid/11789002786
Ausgedruckt am: 19.11.2024 um 07:11 Uhr
16 Kommentare
Neuester Kommentar
Moin,
ufw am besten vorher schon aktivieren, dann erkennt pivpn das ufw aktiv ist und ergänzt gleich die Regeln für die Ports.
Lernen tut man bei den Anleitungen von @aqui aber natürlich deutlich mehr.
Gruß Thomas
Zitat von @meltinsands:
Da ich mich noch gut an die Leiden erinnern kann, die das OpenVPN Setup mit sich gebracht hat (Wahl der richtigen Verschlüsselung und Herausfinden der Kombinationsmöglichkeiten bis hin zu route, iroute und schließlich der iptables Konfiguration), denke ich nun zweimal drüber nach. Habt ihr hier einen allgemeinen Rat?
dieses Leiden kann man sich ersparen, sowohl für OpenVPN, als auch für Wireguard -> https://pivpn.ioDa ich mich noch gut an die Leiden erinnern kann, die das OpenVPN Setup mit sich gebracht hat (Wahl der richtigen Verschlüsselung und Herausfinden der Kombinationsmöglichkeiten bis hin zu route, iroute und schließlich der iptables Konfiguration), denke ich nun zweimal drüber nach. Habt ihr hier einen allgemeinen Rat?
ufw am besten vorher schon aktivieren, dann erkennt pivpn das ufw aktiv ist und ergänzt gleich die Regeln für die Ports.
Lernen tut man bei den Anleitungen von @aqui aber natürlich deutlich mehr.
Gruß Thomas
Danke für die 💐 ! 😊
So sähe das beispielhaft mit einer /etc/nftables.conf aus:
(Das Beispiel lässt IPsec passieren weil der Server parallel zu Wireguard noch als IPsec VPN Server arbeitet ohne den Zwang mit externer VPN Client Software rumfrickeln zu müssen. Bei reinem Wireguard kannst du das weglassen.)
Du kannst sehen das z.B. "iifname $wg_iface tcp dport http accept" rein nur HTTP Traffic im Tunnel zulassen würde. Du kannst hier also sehr fein und vor allem zentral definieren was in den Tunnel soll und was nicht.
Alternativ könnte man den postup Befehl auch direkt in nftables dauerhaft platzieren, korrekt?
Wäre die deutlich bessere Lösung.So sähe das beispielhaft mit einer /etc/nftables.conf aus:
#!/usr/sbin/nft -f
flush ruleset
define pub_iface = "eth0"
define wg_port = 56821
define wg_iface = wg0
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# accept any localhost traffic
iif lo accept
# accept any wireguard traffic
# iifname $wg_iface tcp dport http accept
iifname $wg_iface accept
# accept traffic originated from us
ct state established,related accept
# accepted ICMP types
# ip protocol icmp icmp type {echo-request, echo-reply, time-exceeded, parameter-problem, destination-unreachable } accept
ip protocol icmp icmp type {time-exceeded, parameter-problem, destination-unreachable } accept
# accept common local TCP services on public interface
# tcp dport { ssh, http, https } ct state new accept
iif $pub_iface tcp dport { ssh } ct state new accept
# accepted UDP ports on public interface
iif $pub_iface udp dport { isakmp, ipsec-nat-t, $wg_port } accept
iif $pub_iface ip protocol esp accept
# allow IPsec VPN networks
meta ipsec exists accept
# accept neighbour discovery otherwise IPv6 connectivity breaks.
ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
# log and count dropped traffic
# log prefix "[nftables]Denied: " counter drop
# only count dropped traffic
counter drop
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
Du kannst sehen das z.B. "iifname $wg_iface tcp dport http accept" rein nur HTTP Traffic im Tunnel zulassen würde. Du kannst hier also sehr fein und vor allem zentral definieren was in den Tunnel soll und was nicht.
Müsste ich in nftables in <family> jeweils "ip6" ergänzen
Nein, das Ruleset arbeitet parallel für v4 und v6 wenn du inet als Family angibst. Siehe HIER. (Doku lesen hilft wirklich! 😉)Gäbe es daneben noch weitere Anpassungen, die man in nftables durchführen müsste
Nein, sofern du die relevanten Ports passieren lässt.IPv6 Seiten gehen ja aktuell an meiner VPN vorbei
Das liegt dann an deiner fehlerhaften Konfig?!Wie verhält es sich aber in meinem IPv6-Setup in Zukunft bei Seiten...
Wenn du rein nur v6 machst werden die schlicht nicht angezeigt. Üblicherweise macht man deshalb ja Dual Stack Betrieb.
Wie sieht denn deine Wireguard Konfig aus? Hast du denn IPv6 only oder als Dual Stack konfiguriert?
https://www.hardill.me.uk/wordpress/2021/04/20/setting-up-wireguard-ipv6 ...
https://www.hardill.me.uk/wordpress/2021/04/20/setting-up-wireguard-ipv6 ...
Lesenswert zu der Thematik:
https://www.heise.de/select/ct/2018/13/1529374309620058
https://www.heise.de/select/ct/2018/13/1529374309620058
War noch nie ein großer c't Fan.
Das ist traurig und man fragt sich Warum? Liest du lieber Computer Blöd?Aber mal ehrlich: Wenn du an dem Niveau schon scheiterst and wird das obige eine echte Herausforderung für dich. Der ct' Artikel beschreibt zumindestens für OpenVPN eine saubere und gute Lösung. Aber egal...
Es ist wohl weniger ein Problem OpenVPN mit IPv6 auszustatten, als dass man IPv6 erstmal versteht.
Das ist natürlich richtig aber kann man ja sehr leicht und auch noch kostenfrei schnell ändern:https://danrl.com/ipv6/
Durchlesen und dann hast du IPv6 durchschaut!! 😉
Meine Fritz!Box spannt im Heimnetz ein fd00 Netz auf, was ähnlich sind zu den 192er IPv4 Adressen ist.
Das ist aber falsch und ziemlich kontraproduktiv Unique Local Unicasts zu verwenden wenn du einen Provider Anschluss mit IPv6 im Dual Stack oder als DS-Lite hast!!! Das solltest du dann dringenst wieder entfernen!Zudem gibt es noch die globale Adressen wie 2a02.
Richtig, denn IPv6 hat immer mehrere Adressen auf dem Interface wenn man Global Unicasts im Netz hat, also ein öffentliches IPv6 Netz zugewiesen bekommen hat vom Provider. Bei einem reinen IPv4 Netz hast du lediglich Link Local Unicasts mit fe80::/10Siehe https://de.wikipedia.org/wiki/IPv6
Wie "bestimme" ich es und müsste bei server-ipv6 stehen?
Da du kein öffentliches v6 Netz hast muss es ein ULA sein aus dem Bereich fc00::/7 wo derzeit meist nur der Präfix fd verwendet wird.Zudem erlaubt die IANA auch 2001:DB8::/32 für Dokumentationen zu verwenden. Das erklärt dann auch gleich deine "Subnetz" Frage von oben! Siehe RFC3849
die mit "push redirect…" und "push DHCP…" beginnen.
Das ist das Entfernen des Gateway Redirects und Umschalten auf Split Tunneling. Siehe hier.
Deine Fragen sind doch alle beantwortet?! 🤔
Fehlte noch was?
Wie "bestimme" ich es und müsste bei server-ipv6 stehen?
server-ipv6 fd00:dead:beef:affe::/64 tun-ipv6
push tun-ipv6
ifconfig-ipv6 fd00:dead:beef:affe::1 fd00:dead:beef:affe::2
push "route-ipv6 fd00:dead:beef:cafe:: ::2/64"
IPv6 Netzwerk = Präfix des Client (Server) Netzwerks (lokales fd00 oder globales 2a02?)
Hier bist du gezwungen ein fd00 zu nehmen wie z.B. fd00:dead:beef:cafe::, denn dein öffentliches v6 Netz im internen LAN wechselt ja alle naslang da du zyklisch per PD immer andere Netze vom Provider bekommst. Die kann man also nicht nehmen, denn bei jedem PD Wechel wäre dein VPN tot. Es sei denn du hast bei deinem Provider ein festes v6 Präfix gebucht?! Insofern brauchts du doch ein 3tes Netz.Fehlte noch was?
Ein paar Anmerkungen:
Client spezifische Push Kommandos in der CCD sind NICHT erforderlich! Es sei denn du willst den Clients unbedingt feste IPs vergeben was i.d.R. nicht erforderlich ist. Die reinen Clients lernen das über die normalen Push Kommandos der Server Konfig. Die CCD spezifischen sind nur relevant bei einer Site-to-Site Vernetzung. Siehe auch hier und bei Site-to-Site hier.
Der rest ist soweit OK.
Du musst bei IPv6 immer das Source Interface mitgeben. die ::1 ist das Server Interface.
Client spezifische Push Kommandos in der CCD sind NICHT erforderlich! Es sei denn du willst den Clients unbedingt feste IPs vergeben was i.d.R. nicht erforderlich ist. Die reinen Clients lernen das über die normalen Push Kommandos der Server Konfig. Die CCD spezifischen sind nur relevant bei einer Site-to-Site Vernetzung. Siehe auch hier und bei Site-to-Site hier.
Der rest ist soweit OK.
wenn der Raspberry seine IPv6 nicht aus der Mac Adresse ermittelt. Hilft es daher die IPv6 aus der Mac Adresse abzuleiten und die dhcpcd.conf anzupassen:
Das ist gehupft wie gesprungen ob EUI-64 oder nicht, relevant ist das der RasPi einen feste IP hat, da er ein Router ist. Die Mac Adresse wird ja so oder so immer per NDP ermittelt. Ob die dynamisch ist (Privacy Extension) oder SLAAC sollte egal sein. Da der RasPi aber auch ein Router ist macht es ggf. Sinn die Adresse auf EUI-64 zu belassen, da sie dann immer fest ist.Trägt man im DynDNS Service
An einem DynDNS Service trägt man nie eine Adresse ein sondern immer einen Hostnamen. Die Adresse lernt, wie der Name es schon sagt, der Service immer automatisch. nslookup oder dig (dnsutils) sind hier, wie immer deine besten Freunde! Wieso schreibt man das so:
Hier hilft immer die OpenVPN Kommando Reference!! Dort ist das unter "--ifconfig-ipv6 args" explizit erklärt.Du musst bei IPv6 immer das Source Interface mitgeben. die ::1 ist das Server Interface.
und IPv6 ergänzen mit push "redirect-gateway ipv6 def1 bypass-dhcp".
Steht dann aber im Widerspruch zu deiner Split Tunneling Konfiguration mit dem dedizierten Routing! So ein Mixmax ist kontraproduktiv, da nicht supportet. Wie das Tutorial schon sagt: ...entweder, oder!wieso #push "dhcp-option DNS 10.8.0.1"
Das erzwingt bei IPv4 einen neuen primären DNS Server. Kannst du mit ipconfig -all (Winblows) dann auch sehen bei aktivem Tunnel. Das erzwingt dann das alle DNS Requests immer über den Tunnel gehen. Meist keine gute Idee und sollte man besser weglassen dann wird immer der lokale DNS gefragt. Einzige Ausnahme: Man betreibt einen internen DNS Server und muss auch lokale IP Adressen auflösen, was in Heimnetzen meist nie der Fall ist es sei denn man betreibt einen Adguard oder PiHole DNS Filter um frei von Werbe- und Malware zu sein.Wo findest du die Info mit Split Tunneling?
Merkzettel: VPN Installation mit OpenVPNMerkzettel: VPN Installation mit Wireguard
Gilt generell für alle VPN Protokolle.
Wenn es das denn nun war bitte deinen Thread hier dann auch als erledigt schliessen!