Tagesarchiv für den 23. Januar 2009

IPv6-MySQL-Stolperfalle

Freitag, den 23. Januar 2009

Eben bin ich über eine kleine IPv6-Falle gestolpert.

Für einen Server mit einer MySQL-Datenbank (nennen wir ihn mal “db”) wurde ein AAAA-Record im DNS eingetragen. Im Hintergrund läuft u.a. ein SSH-Tunnel von einem anderen Server aus (”foo”) zu dieser MySQL-Datenbank:

foo:~> ssh -L 3308:db:3306 -C -N -f -g kk@db

Sobald der neue AAAA-Eintrag im DNS aktiv war, klappte keine MySQL-Verbindung mehr von “foo” auf “db”. Die Fehlermeldung auf “foo” lautete:

channel 1: open failed: connect failed: Connection refused

Erst auf den zweiten Blick war klar was passiert ist: der Name “db” wurde ja bisher auf die externe IPv4-Adresse des db-Servers aufgelöst. Nun scheint der Server beim Vorhandensein der IPv6-Adresse standardmäßig eine IPv6-Verbindung am Ende des SSH-Tunnels aufzubauen. Da über die MySQL-Berechtigungstabelle aber nur Zugriffe aus dem lokalen IPv4-Netz erlaubt sind, wurde die Verbindung von MySQL abgelehnt…

Workaround: entweder den SSH-Tunnel explizit zur IPv4-IP des Zielhosts aufbauen (-L 3308:192.168.0.1:3306) oder die IPv6-Adressen in die entsprechenden Tabellen aufnehmen (mysql.hosts / mysql.user).