Ich habe neulich die Domain morsecode-api.de bei Domain Offensive erworben und wollte nun diese Domain mit meiner Heroku App für Morsecode As A Service nutzen. Allerdings bietet Heroku nicht die Möglichkeit an, A Resource Records oder AAAA Resource Records (für IPv6) zu benutzen. Stattdessen empfehlen sie einen CNAME Record. Nun ist es von der IETF aber nicht empfohlen bzw. gegen den Standard CNAME Records für root Domain Namen zu verwenden und viele Hoster unterstützen dies auch nicht. Wie der Name schon andeutet sind diese Einträge für weitere anerkannte Namen der selben Domain gedacht (z.B. .net und .com für denselben Namen).
Der Workaround funktioniert bei do.de also folgendermaßen:
- In den do.de Domaineinstellungen wird eine Weiterleitung eingerichtet auf www.example.com/
- Nach einer Weile ist es möglich unter DNS (Zonen Details), die A bzw. AAAA Resource Records für *.example.com zu entfernen
- Außerdem muss man einen CNAME Eintrag für www.example.com anlegen, der auf example.herokuapp.com zeigt.
Der Ablauf ist dann folgender:
- Eine DNS Anfrage auf example.com wird gestellt
- Der DNS Server liefert einen A bzw. AAAA Resource Record für einen lighttpd Server von Domain Offensive zurück
- Dieser liefert dem Client eine HTTP Redirect 301 Message auf www.example.com/ zurück (s. 1. weiter oben)
- Eine DNS Anfrage auf www.example.com gestellt
- Auf diese antwortet ebenfalls do.de mit einem CNAME Eintrag auf example.herokuapp.com
- Die HTTP Anfrage wird an example.herokuapp.com gestellt.
Löscht man auch die A bzw. AAAA Resource Records, funktioniert die Domain nur über die Subdomain www.example.com.
Dies funktioniert nur für Webservices unter Port 80 via HTTP. Für andere Bereiche bleibt wohl nur übrig, auch die A bzw. AAAA Records auf example.com zu löschen und in den Anfragen nur die Subdomain www.example.com zu benutzen.
Ausprobieren kann man das nach ein bisschen Wartezeit mit z.B. cURL:
$ curl -vL example.com
$ curl -vL www.example.com
Bei meinem Beispiel sieht das wie folgt aus:
$ curl -vL morsecode-api.de/encode/A * Hostname was NOT found in DNS cache * Trying 78.47.59.169... * Connected to morsecode-api.de (78.47.59.169) port 80 (#0) > GET /encode/A HTTP/1.1 > User-Agent: curl/7.35.0 > Host: morsecode-api.de > Accept: */* > < HTTP/1.1 301 Moved Permanently < Location: http://www.morsecode-api.de/encode/A < Content-Length: 0 < Date: Sat, 24 Jan 2015 20:09:09 GMT * Server lighttpd/1.4.28 is not blacklisted < Server: lighttpd/1.4.28 < * Connection #0 to host morsecode-api.de left intact * Issue another request to this URL: 'http://www.morsecode-api.de/encode/A' * Hostname was NOT found in DNS cache * Trying 23.21.123.184... * Connected to www.morsecode-api.de (23.21.123.184) port 80 (#1) > GET /encode/A HTTP/1.1 > User-Agent: curl/7.35.0 > Host: www.morsecode-api.de > Accept: */* > < HTTP/1.1 200 OK * Server Cowboy is not blacklisted < Server: Cowboy < Connection: keep-alive < Content-Type: application/json < Content-Length: 34 < Date: Sat, 24 Jan 2015 20:09:09 GMT < Via: 1.1 vegur < * Connection #1 to host www.morsecode-api.de left intact {"plaintext":"A","morsecode":".-"}