IT-Blog von Sebastian van de Meer

Kategorie: Netzwerke & Protokolle (Seite 4 von 5)

IPv4, IPv6, DNS, DNSSEC, SSH und Netzwerk-Grundlagen — Praxiswissen für Admins und Netzwerker.

SSLv3 ist tot…

Nein, ich habe es nicht überlesen 🙂 SSLv3 ist damit wohl hoffentlich tot!

Es ist ja nicht so als wenn man nicht schon davor gewarnt hätte 😛 Oh was hat diese Meldung bei mir für gute Laune geführt! Wieder mal ein richtiger „Told you so“ Moment für mich.

Oh ja, was zum Lesen gefällig?

http://googleonlinesecurity.blogspot.ru/2014/10/this-poodle-bites-exploiting-ssl-30.htmlhttps://www.openssl.org/~bodo/ssl-poodle.pdf

Bäääähhhhmmmm! Das schreit nach einem GIF!

Auf die schnell böse Dinge deaktivieren…

Postfix:

smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_ciphers=high
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

Dovecot:

ssl_cipher_list = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4
ssl_protocols = !SSLv2 !SSLv3

Apache2:

SSLEngine on
SSLProtocol +ALL -SSLv3 -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4
SSLCompression off
Header always set Strict-Transport-Security "max-age=15552000"

IPv6-Kongress und die aktuelle Verbreitung

Der IPv6 Kongress ist gerade zu Ende und das Thema IPv6 ist mal wieder etwas mehr im Rampenlicht, oder besser gesagt es bekommt durch die viele Presse mal wieder ein klein Wenig mehr Aufmerksamkeit als normal. So ist ebenfalls das Thema Verbreitung noch einmal etwas aufgewärmt worden.

Google hat hier meist eine ganz gute Übersicht: http://www.google.de/ipv6/statistics.html

Eine sicher noch bessere Auflistung findet sich hier: https://www.vyncke.org/ipv6status/detailed.php?country=de

Zusammengefasst kann man sagen, nach über 15 Jahren IPv6 ist die „Umstellung“ noch immer nicht weit genug. Alle Empfehlungen von Experten wurden ignoriert, es gab halt bisher noch keine Nachfrage…. Dumm nur dass inzwischen den ISPs, vor allem den Kabelnetzbetreibern, die IPv4 Adressen ausgehen! Wer in Deutschland einen neuen Internetzugang bei einem Kabelnetzbetreiber bekommt, der bekommt einen Carrier Grade NAT (CGN) Anschluss. Das bedeutet man bekommt nur noch eine private IPv4 Adresse vom ISP und geht bei diesem über einen zentralen Router ins Internet. Dieses versteckt sich oft hinter den Bezeichnungen DS-Lite oder DS64-Lite. Bei einer Lösung bekommt man direkt eine private IPv4 Adresse aus dem Netz des ISP bei der anderen Lösung bekommt man eine über das IPv6 Netz getunnelte private IPv4 Adresse des ISP.

Testen ob man hinter so einem Anschluss sitzt lässt sich schnell über folgenden Link: http://ip.bieringer.de/cgn-test.html

Beide Lösungen helfen zwar dem ISP beim sparen von IPv4 Adressen (im Mobilfunk-Internet wird dieses seit Jahren praktiziert, nur ohne IPv6), es bringt nur leider noch mehr Probleme mit.

Viele Probleme finden sich bei CGN-Anschlüssen im Detail. Als Beispiel: Jede TCP/IP Verbindung verbraucht bei der abgehenden IP-Adresse mindestens einen Port. Ports sind 16-Bit-Zahlen (Portnummern) und reichen von 0 bis 65535. Ports von 0 bis 1023 sind reserviert und werden von der IANA vergeben. Das bedeutet es können maximal 65535-1023=64512 gleichzeitige Verbindungen aufgebaut werden. OK, mal angenommen man nutzt den reservierten Bereich ebenfalls um abgehende Verbindungen zu realisieren ist es etwas mehr, einen höheren Wert als 65535 wird man denn noch nicht überschreiten können. Das ist schon nicht viel, vor allem baut ein User ja schnell mehrere Verbindungen gleichzeitig auf. E-Mails abrufen, Messanger auf, Surfen (aktuelle Browser bauen gleichzeitig mehrere Verbindungen zum Webserver auf um direkt mehrere Teile der Webseite gleichzeitig zu laden!), usw. usw… Da kommt ein User schnell auf 50 und mehr offenen Verbindungen. Jede Verbindung kann zwar sauber geschlossen werden, denn noch kommt es nicht selten vor das Verbindungen nicht sauber geschlossen werden. Das bedeutet die jeweilige Verbindung ist bis zum Ablauf des Timeouts offen. Das kann schon mal ein paar Minuten sein!

Unter Linux lassen sich die offenen Verbindungen schnell anzeigen mit:

$ netstat -tapen

Sind alle möglichen Verbindungen aufgebaut, können keine weiteren mehr aufgebaut werden. Um dieses zu verhindern, könnte man als ISP am Router an den Verbindungen arbeiten… So könnte man bestehende Verbindungen nach 10 Minuten einfach hart zurücksetzten… Dann müsste der jeweilige Client halt eine neue Verbindung aufbauen, wenn sie noch benötigt wird. Was alles passieren kann, wenn bestehende Verbindungen einfach zurückgesetzt werden, kann man sich selbst schnell ausmalen. Ein weiterer Punkt wäre auch die maximale Anzahl gleichzeitiger Verbindungen von einer IP. Jeder der schon einmal einen Web oder Mailserver konfiguriert hat, ist irgendwann sicher an dem Punkt angekommen an welchem er die Zahl der maximal gleichzeitigen Verbindungen von einer IP Adresse beschränken konnte/musste. Lässt man von einer IP Adresse zu viele gleichzeitige Verbindungen zu, kann ein möglicher Angreifer bereits mit sehr wenigen Systemen einen wirkungsvollen DDoS-Angriff auf das eigene System durchführen. Ein einziger Client kann also so schnell einen größeren Teil der vorhandenen Systemressourcen binden. Dieses möchte man als Diensteanbieter nicht, daher beschränkt man oft die Anzahl der gleichzeitigen Verbindungen von einer IP. Schiebt ein ISP seine Kunden über CGN ins Internet. Kommen zwangsläufig mehrere Verbindungen von ein und der selben IPv4 Adresse. Es könnte also passieren das Dienste einfach nicht mehr erreichbar sind. Das ist doof! Dabei darf man jetzt auf keinen Fall mit dem Finger auf den ISP zeigen!!! Der Schuldige sitzt nämlich an anderer Stelle…

So jammert zum Beispiel der VoIP-Anbieter Sipgate das seine Kunden hinter CGN-Anschlüssen sich bei ihm (also Sipgate) beschweren dass ihre Sipgate-Anschlüsse nicht sauber arbeiten. Schaut mal hier: http://www.sipgateblog.de/sipgate-am-ipv6-kabelanschluss/ Oh, die Kommentare sind zum Teil lesenswert! Zurück zum Thema…. Man muss sich nun also auf der Zunge zergehen lassen was hier gerade abläuft:

Sipgate „beschwert“ sich darüber das Unitymedia CGN nicht ganz ~korrekt~ implementiert hätten und hoffen nun darauf das sich jemand von Unitymedia bei ihnen meldet, damit man zusammen das Problem analysieren könnte. Na habt ihr es schon? Nein… Ok, dann noch mal anders!

Unitymedia hat für Diensteanbieter, welche es 2014 trotz vieler Warnungen und jahrelanger Vorlaufzeit, noch immer nicht geschafft haben ihre Dienste IPv6 fähig zu machen, einen Workaround eingerichtet, damit deren Dienste überhaupt noch irgendwie erreichbar sind. Unitymedia (sowie viele andere ISPs auch) haben nun also auf eigene Kosten (klingt dramatischer als es ist) eine Sonderlösung geschaffen. Dann kommt so ein Sipgate und sagt. Toll was du da gemacht hast, es klappt mit unserem System nur leider nicht ganz perfekt. Kannst du da bitte noch mal etwas nachstellen?

LEUTE…. Kommt aus den Puschen und macht eure Dienste IPv6 fähig. Da schieben die Jungs von Sipgate den schwarzen Peter weiter an den ISP und machen ein Fass auf, nur weil sie es noch immer nicht geschafft haben ihre Dienste fähig für die Realität zu machen. Dann rennen die Jungs da im Kreis und blubbern was von keiner Nachfrage?!?!? Aaaarrrrrggghhhhh.

Wenn ihr also gerade hinter einem CGN-Internetanschluss sitzt und dadurch Probleme mit einigen Diensten oder dem Internet generell haben (told you so) dann lasst bitte euren ISP in ruhe sondern geht dem jeweiligen Diensteanbieter auf die Nervern mit der Frage: „IPv6, was da los?“

Das für heute!

Exchange Online, Lync Online und Office 365: DNS-Einträge für eine BIND-Zone einrichten

Bei mir ist gerade die Frage aufgeschlagen was man denn bitte in seine DNS Zone vom Bind schreiben muss, wenn man eines oder mehrere dieser wunderbaren Microsoft Lync, Office 365 oder Exchange benutzen möchte.
Während des Registrierungsprozesses kommt man an die Stelle an welcher man einen TXT RECORD in der Zone veröffentlichen soll um den besitzt der Domain/Zone zu bestätigen. Etwas später müssen dann für die einzelnen Dienste ebenfalls Records gesetzt werden, damit am Ende das Outlook Autodiscover, Lyncdiscover sowie die  Lync Federation funktionieren. Nutzt man Exchange Online muss natürlich noch der MX RECORD geändert werden, damit die E-Mails alle bei Microsoft „einlaufen“.

Nun ist es für ungeübte nicht immer direkt zu durchschauen was gemacht werden muss, daher hier ein kleines Beispiel an der Domain: kernel-error.com
Die zu setzenden RECORDS werden einem dann auf der Webseite von Microsoft wie im Beispiel unten Angezeigt.

Exchange Online

TypPrioritätHostnameVerweist auf die AdresseGültigkeitsdauer
MX 0 @ kernel-error-com0i.mail.protection.outlook.com 1 Stunde 
CNAME – autodiscover autodiscover.outlook.com 1 Stunde 
     
TypTXT-NameTXT-WertGültigkeitsdauer 
 TXT @ v=spf1 include:spf.protection.outlook.com -all 1 Stunde 
     
 Alias oder Hostname  Ziel Gültigkeitsdauer   
 kernel-error.com MS=ms12345678  1 Stunde
  

Lync Online

TypDienstProtokollPortStärkePrioritätGültigkeitsdauerNameZiel
SRV _sip _tls44311001 Stundekernel-error.comsipdir.online.lync.com
SRV _sipfederationtls _tcp506111001 Stundekernel-error.comsipfed.online.lync.com
         
 Typ Hostname Verweist auf die Adresse Gültigkeitsdauer     
 CNAME sip.kernel-error.com sipdir.online.lync.com 1 Stunde     
 CNAME lyncdiscover.kernel-error.com webdir.online.lync.com 1 Stunde     

Zusätzliche Office 365-Einträge

TypHostnameVerweist auf die AdresseGültigkeitsdauer
CNAMEmsoid.kernel-error.comclientconfig.microsoftonline-p.net1 Stunde

Ich LIEBE es ja, immer wenn Microsoft solche Dinge ins Deutsche übersetzten tongue-out Im Folgenden nun als kleines Beispiel das Zonenfile vom Bind für kernel-error.com mit den gesetzten Records.

$ORIGIN .
$TTL 86400      ; 1 day
kernel-error.com             IN SOA ns1.kernel-error.de. root.kernel-error.de. (
                                2014010101 ; serial
                                15000      ; refresh
                                1800       ; retry (30 minutes)
                                604800     ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.kernel-error.de.
                        NS      ns2.kernel-error.org.

$TTL 1H
						IN TXT "MS=ms12345678"
						IN TXT "v=spf1 include:spf.protection.outlook.com -all"
						
						IN MX	0 kernel-error-com0i.mail.protection.outlook.com.
						
_sip._tls.kernel-error.com.			IN SRV   1 100 443	sipdir.online.lync.com.
_sipfederationtls._tcp.kernel-error.com.	IN SRV   1 100 5061	sipfed.online.lync.com.


$ORIGIN kernel-error.com

$TTL 1H
autodiscover		IN CNAME	autodiscover.outlook.com.
sip			IN CNAME	sipdir.online.lync.com.
lyncdiscover		IN CNAME	webdir.online.lync.com.
msoid			IN CNAME	clientconfig.microsoftonline-p.net.

Prüfen lassen sich alle gesetzten DNS-RECORDS natürlich wie immer schnell mit dig!

TXT     @     v=spf1 include:spf.protection.outlook.com -all     1 Stunde

$ dig +nocmd +noall +answer kernel-error.com IN TXT @ns1.kernel-error.de
kernel-error.com.            3600    IN      TXT     "MS=ms12345678"
kernel-error.com.            3600    IN      TXT     "v=spf1 include:spf.protection.outlook.com -all"

MX     0     @     kernel-error-com01.mail.protection.outlook.com     1 Stunde

$ dig +nocmd +noall +answer kernel-error.com IN MX @ns1.kernel-error.de
kernel-error.com.            3600    IN      MX      0 kernel-error-com0i.mail.protection.outlook.com.

SRV     _sip     _tls     443     1     100     1 Stunde     kernel-error.com     sipdir.online.lync.com

$ dig +nocmd +noall +answer _sip._tls.kernel-error.com. IN SRV @ns1.kernel-error.de
_sip._tls.kernel-error.com.  3600    IN      SRV     1 100 443 sipdir.online.lync.com.

SRV     _sipfederationtls     _tcp     5061     1     100     1 Stunde     kernel-error.com     sipfed.online.lync.com

$ dig +nocmd +noall +answer _sipfederationtls._tcp.kernel-error.com. IN SRV @ns1.kernel-error.de
_sipfederationtls._tcp.kernel-error.com. 3600 IN SRV 1 100 5061 sipfed.online.lync.com.

CNAME     –     autodiscover     autodiscover.outlook.com     1 Stunde

$ dig +nocmd +noall +answer autodiscover.kernel-error.com IN A @ns1.kernel-error.de
autodiscover.kernel-error.com. 3600  IN      CNAME   autodiscover.outlook.com.

CNAME     sip.kernel-error.com     sipdir.online.lync.com     1 Stunde

$ dig +nocmd +noall +answer sip.kernel-error.com IN A @ns1.kernel-error.de
sip.kernel-error.com.        3600    IN      CNAME   sipdir.online.lync.com.

CNAME     lyncdiscover.kernel-error.com     webdir.online.lync.com     1 Stunde

$ dig +nocmd +noall +answer lyncdiscover.kernel-error.com IN A @ns1.kernel-error.de
lyncdiscover.kernel-error.com. 3600  IN      CNAME   webdir.online.lync.com.

CNAME     msoid.kernel-error.com     clientconfig.microsoftonline-p.net     1 Stunde

$ dig +nocmd +noall +answer msoid.kernel-error.com IN A @ns1.kernel-error.de
msoid.kernel-error.com.      3600    IN      CNAME   clientconfig.microsoftonline-p.net.

Noch Fragen? Dann fragen 🙂 Sonst wünsche ich noch „viel Spaß“ mit dem neuen Microsoft Online Produkten….

Ping6 funktioniert nicht auf fe80-Adresse: Fehlerbehebung

Ja, die liebe fe80 Adressen! Wer schon mal ganz unbedarft folgendes in seine Konsole hämmert:

$ ping6 fe80::20c:42ff:fe72:2ba6
connect: Invalid argument

Wundert sich sicher im ersten Moment über die freche Antwort: „connect: Invalid argument“. ABER das ist absolut richtig. Denn wenn man mehrere Netzwerkkarten in seinem Rechner verbastelt hat, dann hat man ebenfalls mehrere fe80 link local Adressen. Nämlich mindestens eine pro Netzwerkkarte. Damit sollte es jetzt schon klingeln, hm? Noch nicht? Na woher soll das Paket den bitte wissen über welche der Netzwerkkarten es denn den Weg zur angepingten Adresse nehmen soll?!?!? Genau überhaupt nicht! Daher muss das Interface welches als „Ausgang“ genutzt werden soll immer mit angegeben werden.

$ ping6 fe80::20c:42ff:fe72:2ba6%eth0
PING fe80::20c:42ff:fe72:2ba6%eth0(fe80::20c:42ff:fe72:2ba6) 56 data bytes
64 bytes from fe80::20c:42ff:fe72:2ba6: icmp_seq=1 ttl=64 time=0.323 ms
--- fe80::20c:42ff:fe72:2ba6%eth0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.323/0.323/0.323/0.000 ms

Unter Linux gibt man einfach %NIC-Name an und unter Windows einfach %NIC-ID:

C:\>ping -6 fe80::20c:42ff:fe72:2ba6%3

Ping wird ausgeführt für fe80::20c:42ff:fe72:2ba6%3 mit 32 Bytes Daten:
Antwort von fe80::20c:42ff:fe72:2ba6%3: Zeit<1ms
Antwort von fe80::20c:42ff:fe72:2ba6%3: Zeit<1ms

Ping-Statistik für fe80::20c:42ff:fe72:2ba6%3:
Pakete: Gesendet = 2, Empfangen = 2, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

C:\>

Wobei ich die Meldung eines Microsoft Windows doch schnell etwas verwirrend finde. Denn hier gibt es nur die Rückmeldung dass das Zielnetz nicht erreichbar ist. Was ja im Grunde korrekt ist, nur grenzt es leider den Fehler nicht so schön ein!

C:\>ping -6 fe80::20c:42ff:fe72:2ba6

Ping wird ausgeführt für fe80::20c:42ff:fe72:2ba6 mit 32 Bytes Daten:

Zielnetz nicht erreichbar.
Zielnetz nicht erreichbar.
Zielnetz nicht erreichbar.
Zielnetz nicht erreichbar.

Ping-Statistik für fe80::20c:42ff:fe72:2ba6:
Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust),

C:\>

Japp, so einfach kann es sein 😀

IPv6 ICMP Redirect erklärt: „rt6_redirect: source isn’t a valid nexthop“

Man stolpert irgendwann über diese Meldung im Kernel-Log:

rt6_redirect: source isn't a valid nexthop for redirect target
Illustration eines IPv6-Netzwerks mit Kernel-Logmeldung „rt6_redirect: source isn't a valid nexthop for redirect target“. Ein ICMPv6-Redirect verweist fälschlich von einer Link-Local-Adresse auf eine globale IPv6-Adresse als Next Hop, was vom System abgelehnt wird.

Gerne im Zusammenhang mit IPv6, gerne dann, wenn man glaubt, eigentlich alles richtig gemacht zu haben. Routing stimmt. Neighbors sehen gut aus. Und trotzdem meckert der Kernel.

Die Kurzfassung: Der Linux-Kernel hat ein ICMPv6 Redirect bekommen und lehnt es ab, weil der vorgeschlagene Next Hop aus seiner Sicht kein gültiger First Hop ist.

Worum geht es überhaupt?

ICMPv6 Redirects (Typ 137) sind Teil von Neighbor Discovery. Ein Router sagt damit zu einem Host sinngemäß:

„Für dieses Ziel gibt es einen besseren ersten Hop als mich.“

Wichtig: erster Hop. Nicht irgendein Router irgendwo, sondern ein direkt erreichbarer Nachbar auf dem Link.

Ein Redirect enthält deshalb zwei zentrale Informationen:

  • das Target (Zieladresse, für die das Redirect gilt)
  • den Better Next Hop

Und jetzt kommt der Teil, den viele Implementierungen (und Admins) gerne unterschätzen:
Der Host muss diesem Vorschlag nicht glauben.

Was Linux hier tatsächlich prüft

Linux ist bei Redirects ziemlich streng. Zu Recht. Redirects sind ein beliebtes Einfallstor für Unsinn und Angriffe.

Bevor der Kernel ein Redirect akzeptiert, prüft er u. a.:

  • stammt das Redirect von einem Router, den ich bereits als Router kenne?
  • liegt der vorgeschlagene Next Hop auf demselben Link?
  • ist dieser Next Hop als Neighbor bekannt bzw. grundsätzlich auflösbar?
  • passt das Ganze zur bestehenden Routing-Entscheidung?

Und genau hier schlägt diese Logmeldung zu.

Der Kernel schaut auf den Better Next Hop im Redirect und stellt fest:

„Diese Adresse kann für dieses Ziel kein gültiger Next Hop sein.“

Dann wird das Redirect verworfen. Keine neue Route. Kein Update. Nur diese Meldung.

Der Klassiker: Global statt Link-Local

In der Praxis sieht man das oft in Setups, in denen Router ihre Default-Route oder interne Routen nicht sauber über Link-Local-Adressen aufbauen.

Beispiel (vereinfacht):

default via 2001:db8:1::1 dev eth0

Sieht harmlos aus. Funktioniert auch meistens. Aber:
IPv6 erwartet, dass Router auf einem Link über ihre Link-Local-Adresse angesprochen werden.

Korrekt wäre also eher:

default via fe80::1 dev eth0

Was passiert nun?

Der Router verschickt ein Redirect und trägt als „Better Next Hop“ seine globale Adresse ein (z. B. 2001:db8:1::1).
Der Host bekommt das Redirect, prüft es – und sagt:

„Moment. Dieser Next Hop ist kein gültiger direkt erreichbarer Neighbor für dieses Ziel.“

Und genau dann landet diese Meldung im Log.

Wichtig:
Das Problem ist nicht primär, dass die Adresse global ist.
Das Problem ist, dass der Kernel den vorgeschlagenen Next Hop nicht als legitimen First Hop auf diesem Link akzeptiert.

Link-Local ist der Normalfall. Alles andere muss extrem gut begründet sein – und ist es fast nie.

Ein Blick auf die Nachbartabelle hilft

Wenn man wissen will, warum der Kernel das Redirect ablehnt, lohnt sich ein Blick in die Neighbor-Daten:

ip -6 neigh show

Oder gezielter:

ip -6 route get 2001:db8:dead:beef::1

Wenn der vorgeschlagene Next Hop dort nicht als sinnvoller Neighbor auftaucht, ist die Sache im Prinzip entschieden.
Kein Neighbor → kein gültiger Next Hop → Redirect wird verworfen.

Warum das kein Bug ist

Die Meldung klingt erstmal nach kaputtem Routing. Ist es aber meistens nicht.

Im Gegenteil:
Der Kernel verhält sich exakt so, wie es das Protokoll vorsieht. Redirects sind Hinweise, keine Befehle. Und Linux nimmt diese Hinweise nur an, wenn sie sauber in das bestehende Neighbor- und Routing-Modell passen.

Das schützt unter anderem vor:

  • falschen Router-Konfigurationen
  • kaputten RA-Setups
  • Bridge-/VM-Konstrukten mit „kreativem“ IPv6
  • trivialen Redirect-Spoofing-Angriffen

Fazit

Die Meldung

rt6_redirect: source isn't a valid nexthop for redirect target

bedeutet nicht „IPv6 kaputt“.
Sie bedeutet: Ein Router hat ein Redirect geschickt, das aus Sicht des Hosts keinen gültigen Next Hop beschreibt.

In der Praxis ist das fast immer ein Hinweis auf:

  • Default- oder interne Routen ohne Link-Local-Next-Hop
  • Router, die globale Adressen in Redirects verwenden
  • Setups, in denen Neighbor Discovery und Routing nicht sauber zusammenpassen

Oder anders gesagt:
Der Kernel ist hier nicht pingelig. Er ist vorsichtig. Und das ist gut so.

Prefix Delegation in IPv6: Einrichtung und Konfiguration

Prefix delegation per DHCPv6 ist ja nichts neues. Das eine FritzBox dieses bietet war mir aber neu. Vielleicht „unterschätze“ ich das Teil? Nein… 😛

Ich bekomme ein /48 zugeteilt, die FirtzBox bietet die (nicht weiter konfigurierbare) Möglichkeit ein /62 per Prefix delegation an einen weiteren Router im Netzwerk weiter zu geben.

Ich habe also mal meinen Mikrotik über den DHCPv6 Client mit einem Prefix füttern lassen. Der Mikrotik arbeitet als Hotspot und Trenner fürs Wlan usw.. Nun schiebt dieser das per Prefix delegation zugewiesene IPv6 /64 auch ins Wlan durch 🙂

Damit ist im Wlan nun über die FritzBox und über den Mikrotik auch IPv6 angekommen. Leider lässt sich an der FirtzBox kaum etwas hinsichtlich Netzwerk konfigurieren. Ist halt alles Zielgruppengerecht. Ich muss zugeben, hier hat mich die Kiste von AVM überrascht. Vielleicht schreibe ich sogar noch ein kleines HowTo zusammen… Vielleicht… 😛

IPv6 / Default Route / DNS /DHCP

Nun arbeite ich schon seit einigen Jahren, privat wie im Berufsleben, mit IPv6. Was mir bei vielen Schulungen, Einführungen, Netzumstellungen usw… auffällt ist dass es vielen Admins schwer fällt zu verstehen wie der Client nun an seine Netzwerkkonfiguration kommt. Da in der letzten Zeit immer mehr Fragen zu dem Thema bei mir landen (scheinbar müssen viele jetzt noch „auf den letzten Drücker“ IPv6 lernen), versuche ich es hier mal grob aufzuschlüsseln.

Im Grunde ist es ganz einfach:
–    Bei IPv6 verteilt der DHCPv6 Server keine Default Route, das macht der Router!
–    Der DHCPv6 kann DNS Server, NTP-Server usw. verteilen und für eine automatische Eintragung des Clients am DNS Server sorgen. Er kann natürlich auch zusätzliche IPv6 Adressen verteilen.
–    Der Router verteilt sein Präfix per RA (Router Advertisment).
      o    Der Client kümmert sich um die Generierung einer IP-Adresse.
      o    Im RA kann der Client aufgefordert werden einen DHCPv6 Server nach weiteren Informationen zu fragen.
      o    Im RA kann ein DNS Server an den Client übergeben werden (RDNSS)

Erst einmal ist also für eine vollständige Autokonfiguration des Clients kein DHCPv6 Server mehr nötig. Denn der Client hat immer und direkt eine IPv6 Adresse vom scope link (fe80:….). Diese Adresse hat der Client sobald er einen Netzwerklink hat und wird aus der eigenen MAC-Adresse per EUI (Extended Unique Identifier) erstellt. Nun sendet der Client im einfachsten Fall ein RS (Router Solicitation) an die Multicast Adresse, auf welche ALLE Router hören, ins Netzwerk (ff02::2). Der Router antwortet dann mit einem RA und übermittelt dem Client das IPv6-Präfix. Der Client baut dann aus diesem Präfix und EUI wieder eine Adresse vom scope global. Sowie bei aktivierten Privacy Extensions eine gewürfelte Adresse. Der Client hat nun mindestens zwei IPv6 Adressen bei aktivierten Privacy Extensions sogar bereits drei IPv6 Adressen, sowie eine Default Route über den Router welcher uns den RA verpasst hat.

Ist am Router die Option RDNSS gesetzt wird dem Client zum Präfix auch noch ein DNS Server übergeben. Dieses ~verstehen~ leider noch nicht alle Clients. Damit wäre der Client schon in der Lage vollständig am „Internetleben“ teil zu nehmen.
Ist am Router das Other Config Flag gesetzt, wird der Client angewiesen einen DHCPv6 Server nach weiteren Einstellungen/Informationen zu fragen.

Nun kommt der DHCPv6 Server ins Spiel. Wird dieser vom Client nach weiteren Einstellungen/Informationen gefragt wird er die gewünschten Informationen an den Client übermitteln. Was nicht bedeutet dass der Client damit eine weitere IPv6 Adresse bekommen muss. Es ist auch möglich nur wins, ntp, dns usw.. an die Client zu übermitteln. Der Client muss dazu über einen DHCPv6-Client verfügen. Dieser ist bisher noch nicht bei allen Clientsystemen per Default vorhanden bzw. aktiviert!

Natürlich kann man seinen DHCPv6 Server auch so konfigurieren dass er zusätzlich noch eine dritte bzw. vierte (oder mehr) IPv6 Adresse an den Client übermittelt. Damit wäre der DHCPv6-Server zusätzlich in der Lage diese IPv6 Adressen einem DNS Server bekannt zu machen.

Wie auch beim Thema NAT bei IPv6 gibt es Vorschläge dem DHCPv6 Server wieder die Option Route zu spendieren, ich denke es ist nicht nötig / sinnvoll… Hier kann man sich streiten!

Die Idee bei IPv6 möglichst viel Arbeit auf den Client zu verlagern ergibt meist erst auf den zweiten Blick Sinn. Bei IPv4 war es bisher so dass der Client als erstes ins Netzwerk herumbrüllt ob den ein DHCP Server da ist, dann gab es einen regen Austausch zwischen diesen Systemen und am Ende hatte der Client alle seine Informationen. Denkt man aber nun daran dass im größten IPv4 Netzausbei maximal (24^2)-2 Hostadressen herausspringen und beim IPv6 im kleinsten Netzausbau minimal (64^2)-2 Hostadressen herausspringen… Ja dann ahnt man schon, wenn sich hier ein Router noch ums Popo abwischen kümmern muss, dann ist nicht mehr viel mit Netzwerk.

Noch Fragen? Dann fragen….

« Ältere Beiträge Neuere Beiträge »

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑