Erfahrungen mit IPv6
Die Tage habe ich versucht, meinem Server IPv6 näher zu bringen. Im Prinzip war es recht einfach bis auf ein paar Feinheiten. ;-)
Zuerst stellt man, wie in der Anleitung bei Strato beschrieben, die Unterstützung für IPv6 ein. Danach ging eigentlich schon fast alles, apache und ssh lauschten eh schon auf beiden „Kanälen“.
Java war erfreulich sehr kompatible – ich nutze für meinen DSL-Test die Klasse „java.net.InetAddress“ die, wie sich erfreulicher Weise raus stellte, sehr transparent sowohl IPv4 als auch IPv6 liefert. Ist man interessiert daran welche Adresse man bekommen hat, kann man diese prüfen indem man ermittelt ob man eine Instanz von Inet4Address oder Inet6Address erhalten hat.
Bei postfix sah es anderes aus – das lies sich zwar einfach umstellen:
inet_protocols = all mynetworks = ... wird um [::1]/128 erweitert, wenn noch nicht vorhanden.
Dann kommt schon die erste Baustelle – hatte man zuvor postgrey auf localhost/IPv4 lauschen muss man dieses anpassen und auch in der postfix Konfiguration darauf achten:
aus
check_policy_service inet:127.0.0.1:10023,
wird
check_policy_service inet:::1:10023,
Sowie in den postgrey Optionen „/etc/defaults/postgrey“ wieder auf den Standard zurückgestellt:
aus
POSTGREY_OPTS="--inet=127.0.0.1:10023"
wird
POSTGREY_OPTS="--inet=10023"
Wenn man zuvor nicht alles auf IPv4 abgestimmt hatte, sollte der Wert aber auch noch so da stehen.
Damit lauscht Postgrey wieder auf IPv6 Localhost mit Port 10023 und durch die Anpassung in der main.cf von Postfix wird auch versucht, mit diesem Dienst zu „sprechen“.
Etwas später fiel mir dann auf, dass auch andere Dienste (z.B. mailman) versuchen ihre Kommunikation vorzugsweise mit IPv6 aufzubauen wenn sie sehen, dass es aktiviert ist. Das führte bei mir zu der Meldung im Postfix Log, die ich mir nicht erklären konnte:
postfix/smtpd[16687]: warning: hostname localhost does not resolve to address ::1: No address associated with hostname postfix/smtpd[16687]: connect from unknown[::1]
Was ich sehr komisch fand, denn die selbe Verbindung via localhost IPv4 (also auf 127.0.0.1) brachte diese Meldung nicht.
Nach vielem Suchen im Netz bin ich nur zu einer Erkenntnis gekommen: Postfix zieht wohl die Verbindung von IPv6 der von IPv4 vor. Hmmm… ich habe sogar debugged (postfix hat da einwandfrei die /etc/hosts gelesen aber dennoch keine Auflösung von ::1 bekommen) und habe nicht verstanden was da abgeht. Habe mit Parametern rumgespielt, die die Namensauflösung beeinflusst (smtp_host_lookup = native, dns) was aber auch nichts änderte.
Die erste gangbare Lösung, um die Meldung zu umgehen war es dann, mailman zu „zwingen“ sich über 127.0.0.1 zu verbinden.
/etc/mailman/mm_cfg.py:
SMTPHOST='127.0.0.1'
Das führte zwar dazu, dass die Verbindung jetzt via IPv4 aufgebaut wurde und die Meldung nicht mehr kam, machte mich aber nicht glücklich – es muss doch auch bei Postfix ein annehmbarer Parallelbetrieb möglich sein.
Ein Bekannter (an dieser Stelle ein Danke Nils G.) gab mir den Tipp, einfach mal die Zeilen in der /etc/hosts für „localhost“ zu drehen, so das zuerst die IPv6 und dann die IPv4 Adresse gefunden wird.
Und was soll ich sagen – es funktionierte – meine /etc/hosts sieht jetzt also so aus:
::1 localhost ip6-localhost ip6-loopback 127.0.0.1 localhost fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Nachdem sich ping, ping6, getent hosts, etc. weiter so verhalten haben, wie man es erwartet und Postfix jetzt auch sowohl 127.0.0.1 als auch ::1 richtig auf localhost auflösen kann, habe ich mich entschieden, die Einstellung so zu belassen.
Bis jetzt auch keine negativen Vorkommnisse. :-)
Und da ich schon einmal dabei war, habe ich auf der Basis eines Wiki-Beitrages aus „Django’s Wissensdatenbank“ und meiner bereits zuvor installieren Zertifikate auch die Übertragung etwas besser abgesichert. Da der Beitrag sehr gut beschrieben ist und mir darin auch aufgefallen ist, dass Postfix auch Perfect Forward Secrecy beherrscht, wollte ich Euch diesen hier auch nicht vorenthalten.