GitHub IPv6 Proxy

🇩🇪
🇬🇧
🇷🇺
🇨🇳
+

Kürzlich musste ich ein git Repository auf GitHub über einen nur-IPv6 Server klonen, den ich bei meinem Lieblingshoster Hetzner gemietet habe. Leider musste ich feststellen, dass GitHub IPv6 immer noch nicht unterstützt.

Meine Umgehung war einen WireGuard VPN mit einem meiner dual-stack server einzurichten. Eine Alternative hätte auch sein können Tor zu installieren um anonym herunterzuladen.

Da ich bei weitem nicht der einzige Nutzer von nur-IPv6 Servern bin, der Repositories von GitHub herunterladen möchte, habe ich mich dazu entschieden einen öffentlichen Proxyserver anzubieten, der benutzt werden kann um auf GitHub von IPv6 Netzwerken zuzugreifen, bis GitHub native IPv6 Unterstützung hinzufügt. Dieser Proxy ist nur auf IPv6 verfügbar, um IPv4 Nutzer davon abzuhalten diesen Proxy zu verwenden und unnötig Ressourcen zu verschwenden, da diese bereits direkt von GitHub klonen können.

Hinweis, der https Proxy verwendet ein SSL-Zertifikat ausgestellt für meine Domain, was bedeutet dass ich deinen Verkehr entschlüssle und neu verschlüssle (und potenziell rein-schauen könnte, es aber nicht tue). Dies ist nötig, da du anderenfalls eine ungültiges Zertifikat Warnung bekommen würdest und GitHub dich umleiten würde auf den Standardport, nach Akzeptieren des Zertifikats. Siehe unten für eine bessere permanente Lösung, die Privatsphäre-freundlicher ist.

Also wie funktioniert es? Lass uns annehmen, dass du mein PHP Chat Skript, welches ich unter https://github.com/DanWin/le-chat-php veröffentlicht habe, klonen möchtest. Normalerweise würde das Klonen so funktionieren:
git clone https://github.com/DanWin/le-chat-php
Mit einer IPv6 Verbindung kannst du meinen Proxy-Dienst wie folgt benutzen:
git clone https://danwin1210.de:1443/DanWin/le-chat-php
Und wenn du über ssh klonen wilst, kannst du dies auch wie folgt machen:
git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php

Diejenigen, die den Proxy permanent nutzen möchten, und/oder direkt mit GitHub kommunizieren möchten, ohne dass ich den Verkehr neu verschlüssle, sollten folgendes zu /etc/hosts hinzufügen:

2a01:4f8:c010:d56::2 github.com
2a01:4f8:c010:d56::3 api.github.com
2a01:4f8:c010:d56::4 codeload.github.com
2a01:4f8:c010:d56::5 objects.githubusercontent.com

Einmal hinzugefügt, kannst du normal klonen, ohne irgend welche Änderungen:

git clone https://github.com/DanWin/le-chat-php

All dies ist mit der folgenden nginx Konfiguration auf einem Dual-Stack Server gemacht:

http {
	server {
		listen [::]:1443 fastopen=100 backlog=2048 ipv6only=on ssl http2 default_server;
		location = /robots.txt {
			return 200 'User-agent: *
Disallow:';
		}
		location / {
			proxy_pass https://github.com;
			proxy_set_header Host "github.com";
		}
	}
}
stream {
	server {
		listen [2a01:4f8:c010:d56::2]:22 fastopen=100 ipv6only=on;
		proxy_pass github.com:22;
	}
	server {
		listen [2a01:4f8:c010:d56::2]:443 fastopen=100 ipv6only=on;
		proxy_pass github.com:443;
	}
	server {
		listen [2a01:4f8:c010:d56::3]:443 fastopen=100 ipv6only=on;
		proxy_pass api.github.com:443;
	}
	server {
		listen [2a01:4f8:c010:d56::4]:443 fastopen=100 ipv6only=on;
		proxy_pass codeload.github.com:443;
	}
	server {
		listen [2a01:4f8:c010:d56::5]:443 fastopen=100 ipv6only=on;
		proxy_pass objects.githubusercontent.com:443;
	}
}

Wenn noch weitere Fragen offen sind, schreib mir gerne.