DNSMasq, FritzBox, IPv6 und VLAN Routing über Raspberry PI
Ich könnte Hilfe gebrauchen, komme hier mit der Konfiguration nicht weiter:
Ich möchte IPv6 mittels eines Raspberry PI auf verschiedene VLAN mittels RA verteilen:
mein Provider stellt mir dafür leider nur eine /62 bereit:
IPv6-Präfix: 2a02:b98:4731:d174::/62, Gültigkeit: 56680/56680s
auf meinem Raspberry PI habe ich DNSMasq installiert und verschiedene VLAN eingerichtet:
eth0 für FritzBox und Server
eth0.2(vlan2) für Computer
eth0.3(vlan3) für Kinder
eth0.4(vlan4) für SmartHome
eth0.5(vlan5) für Gäste
was mit IPv4 problemlos funktioniert, will mit ipv6 überhaupt nicht.ipv6 bei eth0 läuft, bei den vlan nicht:
da ich nur ein /62 habe, muss ich irgendwie den constructor anpassen, es stehen mir also nur 4 netzwerke zur verfügung. habe das schon versucht:
dnsmasq.conf:
das gibt aber die fehlermeldung, dass der constructor nicht verbunden werden kann:
kann mir jemand sagen, wie ich das konfigure, dass der construktor +x verwendet wird?
Ich möchte IPv6 mittels eines Raspberry PI auf verschiedene VLAN mittels RA verteilen:
mein Provider stellt mir dafür leider nur eine /62 bereit:
IPv6-Präfix: 2a02:b98:4731:d174::/62, Gültigkeit: 56680/56680s
auf meinem Raspberry PI habe ich DNSMasq installiert und verschiedene VLAN eingerichtet:
eth0 für FritzBox und Server
eth0.2(vlan2) für Computer
eth0.3(vlan3) für Kinder
eth0.4(vlan4) für SmartHome
eth0.5(vlan5) für Gäste
was mit IPv4 problemlos funktioniert, will mit ipv6 überhaupt nicht.ipv6 bei eth0 läuft, bei den vlan nicht:
da ich nur ein /62 habe, muss ich irgendwie den constructor anpassen, es stehen mir also nur 4 netzwerke zur verfügung. habe das schon versucht:
dnsmasq.conf:
dhcp-range=::100,::200,constructor:eth0,slaac,64,24h
dhcp-range=tag:eth0.2,2a02:b98:4731:d175::100,2a02:b98:4731:d175::100,constructor:eth0.2,ra-stateless,slaac
dhcp-range=tag:eth0.3,2a02:b98:4731:d176::100,2a02:b98:4731:d176::200,constructor:eth0.3,ra-stateless,slaac
dhcp-range=tag:eth0.4,2a02:b98:4731:d177::100,2a02:b98:4731:d177::300,constructor:eth0.4,ra-stateless,slaac
das gibt aber die fehlermeldung, dass der constructor nicht verbunden werden kann:
FATAL ERROR in dnsmasq core: prefix must be zero with "constructor:" argument at line 20 of /etc/dn>
kann mir jemand sagen, wie ich das konfigure, dass der construktor +x verwendet wird?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7592149590
Url: https://administrator.de/forum/dnsmasq-fritzbox-ipv6-und-vlan-routing-ueber-raspberry-pi-7592149590.html
Ausgedruckt am: 25.12.2024 um 19:12 Uhr
31 Kommentare
Neuester Kommentar
Ich mach das persönlich immer über dhcpcd und radvd, Geschmackssache:
dhcpcd.conf
und radvd.conf
Zeppel
dhcpcd.conf
# ...
# first generaly disable router solicitations
noipv6rs
# following config is for eth0
interface eth0
# enable router solicitation on uplink
ipv6rs
# request prefix and assign to interfaces
ia_pd 1 eth0.2/0/64/1 eth0.3/1/64/1 eth0.4/2/64/1 eth0.5/3/64/1
interface eth0.2 {
AdvSendAdvert on;
MinRtrAdvInterval 10;
MaxRtrAdvInterval 30;
AdvDefaultPreference medium;
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
AdvValidLifetime 604800;
AdvPreferredLifetime 86400;
};
};
interface eth0.3 {
AdvSendAdvert on;
MinRtrAdvInterval 10;
MaxRtrAdvInterval 30;
AdvDefaultPreference medium;
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
AdvValidLifetime 604800;
AdvPreferredLifetime 86400;
};
};
# usw.
Zeppel
Deshalb meckert auch dnsmasq über die falsche Pool Syntax der Subinterfaces...
Lesetip zum Thema v6 Routing auf dem RasPi: https://danrl.com/ipv6/
dhcp-range=tag:eth0.2,::100,::200,constructor:eth0.2,ra-stateless,slaac
dhcp-range=tag:eth0.3,::100,::200,constructor:eth0.3,ra-stateless,slaac
dhcp-range=tag:eth0.4,::100,::200,constructor:eth0.4,ra-stateless,slaac
Lesetip zum Thema v6 Routing auf dem RasPi: https://danrl.com/ipv6/
Zitat von @aqui:
Deshalb meckert auch dnsmasq über die falsche Pool Syntax der Subinterfaces...
Deshalb meckert auch dnsmasq über die falsche Pool Syntax der Subinterfaces...
dhcp-range=tag:eth0.2,::100,::200,constructor:eth0.2,ra-stateless,slaac
dhcp-range=tag:eth0.3,::100,::200,constructor:eth0.3,ra-stateless,slaac
dhcp-range=tag:eth0.4,::100,::200,constructor:eth0.4,ra-stateless,slaac
Und die Range-Angabe VON-BIS ist bei Stateless SLAAC auch überflüssig und lässt sich durch ein "::" ersetzen.
dhcp-range=tag:eth0.2,::,constructor:eth0.2,ra-stateless,slaac
# ...
# ..
danke für die Info. aber ich habe festgestellt, dass meine config noch gar keine internen ip aus dem präfix für die vlan herleitet. ohne die dürfte das nicht gehen. wie bekommen denn die vlan ihre ipv6 zugewiesen?
Wie oben schon in meiner Config mit dhcpcd geschrieben, dhcpcd holt dir einen Prefix vom vorgelagerten Router und weist es den Interfaces zu. Für die RA-Advertisements nutze ich dann statt dnsmasq , radvd das ist der einizge Unterschied, ist aber Jacke wie Hose welches du von beiden nutzt.DNSMASQ nutzt dann diese Adresse um auf dem Interface den jeweiligen Prefix per Multicast auf dem Interface zu advertisen.
DNSMASQ ist kein DHCP-Client sondern ein Server und ein Server bekommt kein Prefix von einem anderen Router, dafür brauchst du einen DHCP-Client .
Du musst dich entscheiden was du als Network-Manager bzw- Addresszuweisung benutzt entweder die inferfaces.d oder dhcpcd nicht beides gleichzeitig. DHCPCD in der Config nur für die Interfaces aktivieren die man auch mit Funktionen von dhcpcd versehen möchte.
Siehe Manual unter denyinterfaces oder allowinterfaces
Und ipv6only / noipv4 um auf dem Interface bspw. nur IPv6 Config anzupassen ohne bestehende IPv4 zu verändern.
https://www.daemon-systems.org/man/dhcpcd.conf.5.html
Siehe Manual unter denyinterfaces oder allowinterfaces
Und ipv6only / noipv4 um auf dem Interface bspw. nur IPv6 Config anzupassen ohne bestehende IPv4 zu verändern.
https://www.daemon-systems.org/man/dhcpcd.conf.5.html
eigentlich wollte ich aber ra und kein slaac, dann funktioniert es aber nicht mehr...
Du sprichst in Rätseln, ra ist ein RouterAdvertisement und SLAAC nur eine Methode die auf RouterAdvertisements aufbaut.kann man das noch schöner machen?
In welcher Hinsicht?? Erläutere doch bitte den Kontext.aber sollte ich die IPv4 im dhcpcd.conf für die vlan eintragen, bekommt diese keine ipv6.
Ist ja auch kein Wunder wenn du ihnen erst gar keine v6 Adress gibst?!# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private
# slaac hwaddr
# Example static IP configuration:
interface eth0
static ip_address=172.16.12.1/24
static ip6_address=2100:ba8:8404:00aa:bade:affe:cafe:1/64
static routers=172.16.12.254
static domain_name_servers=172.16.12.1 2100:ba8:8404:1::35
ich dachte slaac ist ein serverless protocol
Ist es auch aber der Router muss ja ne feste v6 IP haben. (S.o. dhcpcd.conf) Wo sollen sonst SLAAC Infos und RAs herkommen?!da ich die konfig jetzt verteilt habe in /etc/init.d/networking und in der dhcpcd.conf.
Sinnigerweise nutzt man nur eins.Das o.a. Workshop Buch lesen und verstehen hilft wirklich! 😉
P.S.: Korrekte Rechschreibung (5) hilft allen hier beim Lesen des Threads!
Zitat von @Sonie69:
scheinbar habe ich doch größere verständnisprobleme. ich dachte slaac ist ein serverless protocol, bei welchem sich zwei systeme auf eine mögliche ip einigen, während bei RA vom router der range vorgegeben wird.
Bei SLAAC weist sich der Client anhand des Router Advertisements mit dem Prefix und seiner MAC oder dem Privacy Algorithmus selbst eine zu und schreit nur ins Netz um zu prüfen ob sie schon genutzt wird.scheinbar habe ich doch größere verständnisprobleme. ich dachte slaac ist ein serverless protocol, bei welchem sich zwei systeme auf eine mögliche ip einigen, während bei RA vom router der range vorgegeben wird.
Bei Statefull-Configuration und DHCPv6 kannst du einen Range angeben.
ich denke, die beste lösung wäre, diesen configteil nach systemd zu portieren, da dies sowieso die zukünftige konfiguration für raspberry sein soll. hat da jemand zufällig ein beispiel wie ich diese zeile von dhcpcd nach systemd "konviertiere" also nachbaue?
ia_pd 1 eth0.2/0/64/1 eth0.3/1/64/1 eth0.4/2/64/1 eth0.5/3/64/1
Dann eben systemd-networkd auch kein Problem, sieheia_pd 1 eth0.2/0/64/1 eth0.3/1/64/1 eth0.4/2/64/1 eth0.5/3/64/1
https://man.archlinux.org/man/systemd.network.5.de
Unten auf der Seite stehen die Beispiele zur Prefix Delegation.
Beispiel 3. IPv6-Präfix-Delegierung (DHCPv6 PD)
# /etc/systemd/network/55-dhcpv6-pd-upstream.network
[Match]
Name=eth0
[Network]
DHCP=ipv6
# Die nachfolgende Einstellung ist optional, um auch einem delegierten Präfx der
# übergeordneten Schnittstelle eine Adresse zuzuweisen. Falls nicht notwendig,
# kommentieren Sie die nachfolgende Zeile und den Abschnitt [DHCPPrefixDelegation] aus.
DHCPPrefixDelegation=yes
# Falls das übergeordnete Netzwerk Router Advertisement mit gesetztem Bit »Managed«
# bereitstellt, dann kommentieren Sie die nachfolgende Zeile und die Einstellung
# WithoutRA= im Abschnitt [DHCPv6] aus.
IPv6AcceptRA=no
[DHCPv6]
WithoutRA=solicit
[DHCPPrefixDelegation]
UplinkInterface=:self
SubnetId=0
Announce=no
# /etc/systemd/network/55-dhcpv6-pd-downstream.network
[Match]
Name=eth0.2
[Network]
DHCPPrefixDelegation=yes
IPv6SendRA=yes
# Es wird erwartet, dass der Rechner als Router agiert. Daher ist es normalerweise
# nicht notwendig, Router Advertisement von anderen Rechnern im nachgeordneten Netzwerk zu
# empfangen.
IPv6AcceptRA=no
[DHCPPrefixDelegation]
UplinkInterface=eth0
SubnetId=1
Announce=yes
die Logik entzieht sich mir völlig, als das ich es verstehen könnte.
WELCHE spezifische "Logik" meinst du genau? dhcpcd.conf Syntax?, Subnetting?, RAs?, DHCPv6...?, SLAAC?... 🤔Vielleicht können wir da Licht ins Dunkel bringen?!
Die o.a. dhcpcd Konfig rennt fehlerlos auf dem RasPi wie auch auf jedem anderen Linux Rechner.
Falsche Reihenfolge von noipv6rs schau dir noch mal meine Config der Router Solicitation genau an ... Das gehört vor den Interface Block denn sonst gillt es nur für das im Block genannte Interface !
Denn so deaktivierst du Routersolicitations nicht für andere Interfaces und die können sich von anderen Routern Adressen und Routing Informationen holen.
Und endlich mal RTFM
https://www.daemon-systems.org/man/dhcpcd.conf.5.html
Da steht es haarklein zur ia_pd schön erklärt.
Aber wenn schon die Grundlagen fehlen und was so Begriffe wie Router Solicitation etc. in der Praxis bedeuten ist das wohl vergebene Mühe hier.
Schade das die Jugend heutzutage keine Manuals mehr liest 😐.
Denn so deaktivierst du Routersolicitations nicht für andere Interfaces und die können sich von anderen Routern Adressen und Routing Informationen holen.
dafür habe ich ein neues netz: fd29:c94a:22df:11f6...
Das kommt von der Fritte, das verteilt sie per RA und DHCPv6 wenn sie kein globales Prefix am WAN bekommt.Und endlich mal RTFM
https://www.daemon-systems.org/man/dhcpcd.conf.5.html
Da steht es haarklein zur ia_pd schön erklärt.
Aber wenn schon die Grundlagen fehlen und was so Begriffe wie Router Solicitation etc. in der Praxis bedeuten ist das wohl vergebene Mühe hier.
Schade das die Jugend heutzutage keine Manuals mehr liest 😐.
gibt es bei ipv6 kein nat mehr, daher muss ich eine ip über die fritz box beziehen und diese mit dem präfix weiterleiten, was ja jetzt auch funktioniert.
OK, das ist korrekt, das hattest du aber oben unterschlagen in deiner Beschreibung. Die fd00 Adressierung ist prinzipbedingt unroutebar im Internet, die kannst du also nur lokal im RasPi routen. Sprich nur deine jeweils lokalen v6 Netze können einen Nginx erreichen der darin werkelt.
P.S.: Es wäre sehr hilfreich für alle beim Lesen wenn du Groß- Kleinschreibung beachtest!
Du machst hier mit systemd-networkd einen Mischmasch und würfelst einige Settings durcheinander wieder wohl wegen fehlendem Grundlagenwissen zu IPv6 ... Die Addressierung und Anlegen der Interfaces sollte vollständig auf systemd übertragen werden also auch das der VLAN-Interfaces etc. pp.
Hier ein funktionales Beispiel mit eth0 als Uplink von dem der Prefix bezogen wird und vlan10 auf eth1 als Downstream auf dem ein vlan10 als Client-Netz läuft
Man beachte natürlich die Dateiendungen, denn es gibt hier *.network und *.netdev !
/etc/systemd/network/10-eth0.network
Network-Config vom Uplink (eth0)
/etc/systemd/network/20-eth1-vlan10.netdev
VLAN Interface erstellen (vlan10)
/etc/systemd/network/30-eth1.network
Network-Config vom Downstream-Interface (eth1)
/etc/systemd/network/40-eth1-vlan10.network
Network-Config vom VLAN Interface (vlan10)
Jetzt mit diesem Befehl die systemd Konfiguration neu einlesen und systemd-networkd neustarten
Sicherstellen das Forwarding auf den Interfaces aktiviert ist
ACHTUNG: Wenn eine Firewall im Hintergund aktiv ist bitte bei Tests erst mal abschalten und hinterher die Interfaces korrekt den Zonen zuordnen!
Klappt hier dann problemlos und ohne irgendwelchen Verzögerungen die du hier nennst ... Works as designed!
Im out now. Happy networking.
Zeppel
Hier ein funktionales Beispiel mit eth0 als Uplink von dem der Prefix bezogen wird und vlan10 auf eth1 als Downstream auf dem ein vlan10 als Client-Netz läuft
Man beachte natürlich die Dateiendungen, denn es gibt hier *.network und *.netdev !
/etc/systemd/network/10-eth0.network
Network-Config vom Uplink (eth0)
[Match]
Name=eth0
[Network]
DHCP=yes
IPv6AcceptRA=yes
[DHCPv6]
WithoutRA=solicit
/etc/systemd/network/20-eth1-vlan10.netdev
VLAN Interface erstellen (vlan10)
[NetDev]
Name=vlan10
Kind=vlan
[VLAN]
Id=10
/etc/systemd/network/30-eth1.network
Network-Config vom Downstream-Interface (eth1)
[Match]
Name=eth1
[Network]
VLAN=vlan10
LinkLocalAddressing=no
LLDP=no
EmitLLDP=no
IPv6AcceptRA=no
IPv6SendRA=no
/etc/systemd/network/40-eth1-vlan10.network
Network-Config vom VLAN Interface (vlan10)
[Match]
Name=vlan10
Type=vlan
[Network]
DHCPPrefixDelegation=yes
IPv6SendRA=yes
IPv6AcceptRA=no
LinkLocalAddressing=yes
[DHCPPrefixDelegation]
UplinkInterface=eth0
SubnetId=0
Announce=yes
Jetzt mit diesem Befehl die systemd Konfiguration neu einlesen und systemd-networkd neustarten
systemctl daemon-reload && systemctl restart systemd-networkd
Sicherstellen das Forwarding auf den Interfaces aktiviert ist
sysctl -w net.ipv6.conf.eth0.forwarding=1
sysctl -w net.ipv6.conf.vlan10.forwarding=1
ACHTUNG: Wenn eine Firewall im Hintergund aktiv ist bitte bei Tests erst mal abschalten und hinterher die Interfaces korrekt den Zonen zuordnen!
Klappt hier dann problemlos und ohne irgendwelchen Verzögerungen die du hier nennst ... Works as designed!
Im out now. Happy networking.
Zeppel
Wieder alles falsch ... 🙄 erstens muss IPv6SendRA im Downstream aktiviert werden also yes lauten, des weitreren IPv6AcceptRA auf no stehen wenn man in diesem vlan keine weiteren Router stehen hat die routen übernehmen sollen.
Des weiteren ist das ebenfall hier unsinnig
Zur Fehlermeldung von systemd, deine systemd Version ist wohl zu alt, oder IPv6 für systemd-networkd deaktiviert worden.
Es bringt hier einfach nichts ohne das die IPv6 Grundlagen vorhanden sind.
Lies dir das von @aqui genannte PDF in Ruhe durch dann erledigt sich das Thema von selbst. Genügend Hilfestellung haben wir ja gegeben, aber wenn das gegenüber die grundlegende Funktionsweise der RAs nicht verinnerlicht hat ist das vergebene Mühe.
Des weiteren ist das ebenfall hier unsinnig
[Route]
Destination=192.168.172.0/24
Eine Host-Route wird automatisch für die in "Address" zugewiesene Subnetz angelegt!Destination=192.168.172.0/24
Zur Fehlermeldung von systemd, deine systemd Version ist wohl zu alt, oder IPv6 für systemd-networkd deaktiviert worden.
Es bringt hier einfach nichts ohne das die IPv6 Grundlagen vorhanden sind.
Lies dir das von @aqui genannte PDF in Ruhe durch dann erledigt sich das Thema von selbst. Genügend Hilfestellung haben wir ja gegeben, aber wenn das gegenüber die grundlegende Funktionsweise der RAs nicht verinnerlicht hat ist das vergebene Mühe.
Zitat von @Sonie69:
#- DHCPPrefixDelegation heißt jetzt DHCPv6PrefixDelegation
- UplinkInterface gibt es nicht mehr
Nö die aktuelle Doku ist hier eindeutig#- DHCPPrefixDelegation heißt jetzt DHCPv6PrefixDelegation
- UplinkInterface gibt es nicht mehr
https://www.freedesktop.org/software/systemd/man/systemd.network.html
Da gibt es kein DHCPv6PrefixDelegation
Und ein aktuelles systemd 253.3-3 bestätigt dies.
Selbst auf der Debian Man-Page von systemd gibt es die Direktive nicht
https://manpages.debian.org/bookworm/manpages-de/systemd.network.5.de.ht ...
Obige Config läuft hier auf nem plain vanilla Archlinux mit aktuellstem Kernel einwandfrei!
also eine seeeeeeeehr alte systemd. .
Stimmt auch nicht, denn es rennt auf einem aktuellen Raspberry OS Bullseye ganz genau so wie oben beschrieben!
https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os- ...
https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os- ...
die /config bearbeitet wie von zeppel vorgegeben:
Tja, glaube du brauchst eine neue Brille.