GL.iNet Travel Router mag keine Sonderzeichen in SSIDs

Heute Nachmittag sind wir nach einer Odyssee durch das verschneite Schweizerische Mittelland im Elsass angekommen.

Spannendes Problem, welches ich mit etwas IT-MacGyvern gelöst habe: Die SSID des Hotels lautet L'Hotel et Spa Ribeauvillé. Wenn ich meinem GL.iNet Travel Router (dem Vorgängermodel des GL-MT300N-V2) sage, sich mit diesem WiFi zu verbinden, speichert die Router-Software die SSID als L, und die Verbindung schlägt – logischerweise – fehl.

Für Profis ist rasch klar, was das Problem ist: Das Apostroph in der SSID signalisiert der Router-Software, dass der SSID-Name hier aufhört. Alles dahinter wird abgeschnitten. Ein klassisches Sonderzeichen Escape-Problem. Und seit mindestens 2018 bekannt (könnte aber sein, dass ich mal die Firmware aktualisieren sollte — mein Router fährt mit Version 2.264): Bug + Security Issue: Special Characters Remote SSID Name

Hinzu kommt noch das Accent Aigu. Eigentlich fehlen nur noch Emojis in der SSID, dann wäre die Party komplett.

Der GL.iNet basiert auf OpenWRT. Auf Grund meiner Erfahrung mit anderen solchen Routern (primär dem Turris Omnia) weiss ich, dass die WiFi-Konfiguration in einer Textdatei unter /etc/config/wireless abgelegt ist.

Mein Plan: Da das GUI die SSID nicht sauber abspeichern kann, trage ich sie halt per SSH und mit vim über die Kommandozeile ein.

Nächstes Problem: Tippe ich das Accent Aigu in vim ein, erscheinen stattdessen zwei Doppelpunkte. Mist. In ash, dem Shell des Routers, wird das Accent Aigu aber sauber angezeigt, wenn man es tippt. Hilft mir aber nicht weiter (ausser ich befasse mich vielleicht mit sed und Inline Suchen-und-Ersetzen). Schlussendlich kopiere ich den Inhalt der Datei aus dem Terminal und füge es in Atom-Dokument auf meinem MacBook ein.

Ich versuche nun, die SSID in der Textdatei zu komplettieren. Um das Apostroph in der SSID verwenden zu können, umschliesse ich den Variablenwert in doppelten Anführungszeichen (OpenWRT verwendet standardmässig einfache Anführungszeichen):

config network 'sta0'
option channel '11'
option device 'radio0'
option ssid "L'Hotel et Spa Ribeauvillé"
option encryption 'psk2'
option key 'password'

Ich speichere die Datei, und schreibe sie mittels scp root@192.168.1.1:/tmp/wireless auf den Router zurück. Dort eingeloggt kopiere ich die Datei und überschreibe das Ziel, /etc/config/wireless.

Leider funktioniert es nach einem Reboot damit noch nicht.

Mit etwas greppen dann die Erkenntnis: Unter /etc/wireless/ssids ist das WiFi ebenfalls eingetragen. Somit führe ich den oben beschriebenen Prozess noch einmal durch, dieses Mal aber für diese Datei. Rüberkopiert, den Travelrouter neu gestart — und tada, jetzt poppt auf meinem MacBook das Authentifizierungsportal des Hotel WiFis auf.

Yiha!