Eigene Domain auf das lokale Terminal
Die eigene Domain zeigt auf den lokalen Rechner statt auf die App. Hier stehen die fertigen Befehle für den Tunnel, und K.I.T.T. prüft, ob die Adresse wirklich antwortet.
Ablauf in der richtigen Reihenfolge
Wichtig: Die Domain wird nicht mit der App verbunden. Sie gehört zu Cloudflare, denn Cloudflare baut die Verbindung zu deinem Rechner auf. Im Dashboard der App bleibt sie deshalb unverbunden.
- 0Domain angelegtRegistrar (dort gekauft)
Ist erledigt. Die Domain gehört dir, mehr ist hier nicht zu tun.
- 1Domain bei Cloudflare hinzufügenCloudflare (kostenloses Konto)
Auf cloudflare.com anmelden, dort eine Seite hinzufügen, die neu gekaufte Domain eintragen und den kostenlosen Tarif wählen. Cloudflare zeigt daraufhin zwei Nameserver an — die beiden Adressen sind der eigentliche Verbindungspunkt.
- 2Die beiden Nameserver eintragenRegistrar (dort gekauft)
Bei one.com: Kontrollpanel → DNS-Einstellungen → Nameserver → „Auf benutzerdefinierte Nameserver ändern" und dort die zwei von Cloudflare eintragen. Das ist die einzige Stelle, an der die Domain umgehängt wird.
- 3Freigabe der DomainCloudflare
Cloudflare prüft die Umstellung von selbst und schaltet die Domain frei. Keine Bestätigungsmail, kein Antrag, kein Formular — meist dauert es Minuten.
- 4Tunnel anlegen und startenEigener Rechner
Das Gesamtskript ausführen. Dabei meldet sich cloudflared im Browser bei Cloudflare an, legt den Tunnel an und setzt den Eintrag für die eingestellte Domain automatisch. Der DNS-Eintrag muss also nicht von Hand angelegt werden.
- 5PrüfenDiese Seite
Die Knöpfe „Tunnel jetzt prüfen" und „DNS-Lage" zeigen, ob die Adresse antwortet und ob der Eintrag steht.
one.com: Die Nameserver lassen sich dort für die meisten Domains umstellen — nur bei .dk- und .es-Domains läuft das nicht über das Panel (bei .dk über die Registry Punktum dk).
Sonderfall Wix: Wird die Domain von Wix verwaltet (Nameserver ns0/ns1.wixdns.net), lassen sich dort zwar Einträge anlegen, die Nameserver aber nicht umstellen. Dann bleibt nur einer der beiden Wege — die Domain zu einem anderen Registrar umziehen und auf Cloudflare zeigen lassen, oder ohne Cloudflare arbeiten und bei Wix einen CNAME auf den Tunnel-Anbieter setzen. Die DNS-Lage unten sagt, welcher Fall vorliegt.
Einstellung
Erreichbarkeit
Noch nichts hinterlegt — links Domain und Port eintragen und speichern.
Einstellung konnte nicht geladen werden: Request failed with status code 500
Abgleich: Seite · DNS · Tunnel
Prüft in einem Durchgang, ob die GitHub-Seite antwortet, wohin der DNS-Eintrag der Domain zeigt und ob der Tunnel dahinter steht.
Request failed with status code 500
Hilfe: eigene Domain mit GitHub Pages verbinden
Die eigene Domain kann auf zwei Weisen genutzt werden — und sie schließen sich aus: entweder zeigt sie auf GitHub Pages, oder sie zeigt über den Tunnel auf den eigenen Rechner. Beides gleichzeitig geht nicht, weil es nur einen Eintrag je Name gibt. Diese Anleitung beschreibt den Weg zu GitHub Pages.
- 1Domain im Repository hinterlegenGitHub
Im Repository auf Settings → Pages gehen und unter „Custom domain“ die eigene Domain eintragen, dann Save. Das muss zuerst passieren — sonst kann sich jemand anderes die Subdomain sichern.
- 2A-Einträge für die HauptdomainDNS-Verwalter
Vier A-Einträge auf die GitHub-Adressen setzen (Namen: @ bzw. leer). Wer IPv6 will, legt zusätzlich die vier AAAA-Einträge an — A bleibt trotzdem nötig.
- 3CNAME für wwwDNS-Verwalter
Ein CNAME-Eintrag: Name www, Ziel die eigene GitHub-Adresse ohne Repository-Namen. GitHub leitet dann automatisch zwischen Hauptdomain und www um.
- 4Warten und prüfenGitHub
DNS-Änderungen brauchen bis zu 24 Stunden. Danach zeigt GitHub unter Settings → Pages einen grünen Haken neben der Domain. Die Karte „Abgleich“ oben sagt dasselbe in einem Blick.
- 5HTTPS erzwingenGitHub
Sobald die Domain steht, erscheint in den Pages-Einstellungen die Option „Enforce HTTPS“. Erst dann läuft die Seite verschlüsselt.
| Typ | Name | Ziel |
|---|---|---|
| A | @ | 185.199.108.153 |
| A | @ | 185.199.109.153 |
| A | @ | 185.199.110.153 |
| A | @ | 185.199.111.153 |
| AAAA | @ | 2606:50c0:8000::153 |
| AAAA | @ | 2606:50c0:8001::153 |
| AAAA | @ | 2606:50c0:8002::153 |
| AAAA | @ | 2606:50c0:8003::153 |
| CNAME | www | freemonkeyyourlife-lab.github.io |
Falls der DNS-Verwalter eine Liste entgegennimmt. Ziel immer ohne Repository-Namen.
# A (Hauptdomain): 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 # AAAA (optional, IPv6): 2606:50c0:8000::153 2606:50c0:8001::153 2606:50c0:8002::153 2606:50c0:8003::153 # CNAME (www): www CNAME freemonkeyyourlife-lab.github.io
- Ein Wildcard-Eintrag (*) ist hier gefährlich — er öffnet fremden Zugriff auf eigene Subdomains. Besser jeden Namen einzeln anlegen.
- Die Domain liegt bei GitHub Pages auf fremden Servern. Für den Tunnel-Weg gilt das Gegenteil: dort gehört die Domain zu Cloudflare, und der Eintrag entsteht automatisch beim Start des Tunnels.
- Die GitHub-Seite selbst bleibt eine reine Anzeigeseite. Inhalte, die K.I.T.T. verarbeitet, liegen weiter in der Ablage und im News-Center.
Als tunnel-start.sh auf dem eigenen Rechner speichern, dann ausführen. Das Passwort vor dem Start ändern.
#!/usr/bin/env bash # K.I.T.T. — eigene Domain auf das lokale Terminal set -e DOMAIN="kitt.free-monkeys.de" PORT="8002" TUNNEL="kitt-lokal" TERMINAL_PASS="bitte-aendern" # 0) Werkzeuge holen (einmalig) curl -L -o cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod +x cloudflared # Terminal im Browser: sudo apt install ttyd (oder: sudo dnf install ttyd) # 1) Bei Cloudflare anmelden — Konto wählen, dem die Domain gehört ./cloudflared tunnel login # 2) Tunnel anlegen und die Domain darauf zeigen lassen ./cloudflared tunnel create "$TUNNEL" ./cloudflared tunnel route dns "$TUNNEL" "$DOMAIN" # 3) Terminal im Browser starten, mit Passwort geschützt ttyd -p "$PORT" -W -c kitt:"$TERMINAL_PASS" bash & # 4) Tunnel starten — ab jetzt ist die Domain erreichbar ./cloudflared tunnel run --url "http://localhost:$PORT" "$TUNNEL"
Zum Ausprobieren, solange die Domain noch nicht bereit ist. Danach dieselbe Adresse im Browser aufrufen.
cloudflared tunnel --url http://localhost:8002 # Schnell-Tunnel ohne eigene Domain und ohne Konto: # die Adresse (https://<zufall>.trycloudflare.com) steht danach im Terminal # Nachteil: sie wechselt bei jedem Start und ist nur zum Testen gedacht
Diese Datei auf den Rechner neben server.py legen oder bei GitHub Pages als index.html hochladen. Eine Seite, die nur zeigt — die Arbeit bleibt auf dem Rechner.
Eingetragen erscheint auf der Seite ein roter Knopf „Zum Terminal" mit dieser Adresse.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>K.I.T.T. — Zugang</title>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700;900&display=swap" rel="stylesheet">
<style>
:root{--rot:#e20000;--rot-hell:#ff4a3d;--grund:#090909;--rand:#2a2a2a;--text:#f2f2f2;--leise:#9a9a9a}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;background:radial-gradient(120% 90% at 50% -10%,#1c1c1c 0%,#090909 60%);color:var(--text);font-family:Montserrat,Arial,sans-serif;display:flex;align-items:center;justify-content:center;padding:32px}
.karte{width:100%;max-width:620px;border:2px solid #000;border-radius:12px;background:linear-gradient(180deg,#161616,#0c0c0c);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 24px 60px -30px #000}
.kopf{padding:22px 26px;border-bottom:1px solid var(--rand);display:flex;align-items:center;gap:12px}
.lampe{width:10px;height:10px;border-radius:50%;background:var(--rot-hell);box-shadow:0 0 14px var(--rot-hell)}
.marke{font-weight:900;letter-spacing:.22em;font-size:13px}
.scanner{position:relative;height:26px;overflow:hidden;background:linear-gradient(90deg,transparent,rgba(226,0,0,.18),transparent)}
.strahl{position:absolute;top:0;bottom:0;width:26%;background:linear-gradient(90deg,transparent,rgba(255,74,61,.35) 35%,rgba(255,74,61,.95) 50%,rgba(255,74,61,.35) 65%,transparent);animation:lauf 3.4s cubic-bezier(.45,0,.55,1) infinite}
@keyframes lauf{0%{transform:translateX(-30%);opacity:0}12%{opacity:1}88%{opacity:1}100%{transform:translateX(130%);opacity:0}}
.koerper{padding:28px 26px}
h1{margin:0 0 8px;font-size:26px;font-weight:900;letter-spacing:.04em}
p{margin:0 0 18px;color:var(--leise);font-size:14px;line-height:1.7}
ul{margin:0;padding:0;list-style:none;display:grid;gap:10px}
li{display:flex;gap:10px;align-items:flex-start;font-size:13px;color:#dcdcdc}
li b{color:#fff}
.punkt{width:7px;height:7px;margin-top:6px;border-radius:50%;background:var(--rot);box-shadow:0 0 10px var(--rot);flex:0 0 auto}
.taste{display:inline-block;margin:4px 0 20px;padding:13px 26px;border:1px solid #4a0000;border-radius:6px;background:linear-gradient(180deg,#ff4a3d,#e20000 45%,#7d0000);color:#fff;font-weight:700;font-size:13px;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.35),0 8px 18px -8px rgba(226,0,0,.7)}
.taste:hover{background:linear-gradient(180deg,#ff6155,#f00000 45%,#8f0000)}
.fuss{margin-top:24px;padding-top:16px;border-top:1px solid var(--rand);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--leise)}
.stand{display:inline-block;padding:3px 8px;border:1px solid var(--rand);border-radius:6px;margin-right:8px}
</style>
</head>
<body>
<main class="karte">
<div class="kopf"><span class="lampe"></span><span class="marke">K.I.T.T. MASTER ENGINE</span></div>
<div class="scanner"><div class="strahl"></div></div>
<div class="koerper">
<h1>Verbindung steht.</h1>
<p>Diese Seite ist der Zugang. Die Arbeit läuft auf dem eigenen Rechner und ist über den Tunnel erreichbar, geschützt durch Benutzer und Passwort.</p>
<ul>
<li><span class="punkt"></span><span><b>Terminal:</b> Zugang über den Tunnel, geschützt durch Benutzer und Passwort.</span></li>
<li><span class="punkt"></span><span><b>Kern:</b> der lokale K.I.T.T.-Dienst läuft auf 127.0.0.1.</span></li>
<li><span class="punkt"></span><span><b>Ohne Tunnel:</b> keine Antwort — der Rechner muss laufen und der Tunnel-Befehl aktiv sein.</span></li>
</ul>
<div class="fuss"><span class="stand">Status: online</span>K.I.T.T. @ A-Team-Projekt</div>
</div>
</main>
</body>
</html>
Auf dem eigenen Rechner ausführen — das ist das Ziel, das die Domain erreichen soll.
ttyd -p 8002 -W -c kitt:geheim bash # Terminal im Browser auf Port 8002 — das Wort geheim durch ein eigenes Passwort ersetzen
Danach ist die eigene Domain mit dem lokalen Rechner verbunden.
cloudflared tunnel login cloudflared tunnel create kitt-lokal cloudflared tunnel route dns kitt-lokal kitt.free-monkeys.de cloudflared tunnel run --url http://localhost:8002 kitt-lokal
Nur nötig, wenn der Anbieter den Eintrag nicht selbst setzt.
# wird vom Befehl tunnel route dns selbst angelegt: # Typ CNAME · Name kitt.free-monkeys.de · Ziel <tunnel-id>.cfargotunnel.com · Proxy an (orange Wolke)
Direkt im Terminal testen, was K.I.T.T. oben schon gemessen hat.
curl -I https://kitt.free-monkeys.de # 200/302 = Tunnel steht · 502/1033 = Tunnel läuft, lokaler Dienst antwortet nicht
- Die Domain darf nicht gleichzeitig im Dashboard der App als eigene Domain verbunden sein — sie kann entweder auf die App oder auf den lokalen Rechner zeigen, nicht auf beides.
- Ein Tunnel öffnet den Rechner ins Internet. Das Terminal gehört deshalb immer hinter ein Passwort (bei ttyd die Option -c benutzer:passwort), sonst kann jeder mit der Adresse Befehle ausführen.
- Solange der Tunnel-Befehl im Terminal läuft, bleibt die Domain erreichbar. Wird das Fenster geschlossen, bricht die Verbindung ab.
- Ohne eigene Domain geht es sofort: der Schnell-Tunnel oben erzeugt eine zufällige Adresse unter trycloudflare.com. Die wechselt aber bei jedem Start und ist nur zum Testen gedacht — dauerhaft braucht es eine eigene Domain.
- Eine fremde Subdomain (z. B. name.github.io) taugt dafür nicht: dort bestimmst du das DNS nicht und kannst keinen Eintrag auf den Tunnel setzen. Nötig ist eine Domain oder Subdomain, deren Einträge dir gehören.
- Nur der Port, der beim Tunnel angegeben ist, wird veröffentlicht — andere Dienste auf dem Rechner bleiben unberührt.
