GitHub IPv6 proxy

🇨🇿
🇩🇪
🇬🇧
🇧🇷
🇷🇺
🇹🇷
🇺🇦
🇨🇳
+

Recently I had to clone a git repository on GitHub via an IPv6 only server that I rented at my favourite hosting provider Hetzner. Unfortunately I realized that GitHub still does not support IPv6.

Mým řešením bylo nastavení WireGuard VPN s jedním z mých dvou-stackových serverů. Alternativou by mohla být instalace Tor pro anonymní stahování.

Protože nejsem zdaleka jediný uživatel se serverem pouze pro IPv6, který chce stahovat úložiště z GitHubu, rozhodl jsem se poskytnout veřejný proxy server, který lze použít k přístupu na GitHub v síti IPv6, dokud GitHub nebude poskytovat nativní podporu IPv6. Proxy je k dispozici pouze na IPv6, aby uživatelé IPv4 nepoužívali zbytečné zdroje, protože již mohou klonovat přímo z GitHubu.

Všimněte si, že můj https proxy poskytuje ssl certifikát vydaný pro mou doménu, což znamená, že dešifruji a znovu zašifruji váš provoz (a mohl bych se na to potenciálně podívat, ale nedělám to). Je to nutné, protože byste dostali upozornění na neplatný certifikát ssl, jinak by se + github po jeho přijetí přesměroval na výchozí port. Níže naleznete trvalejší řešení, které je šetrnější k soukromí.

Jak to tedy funguje? Předpokládejme, že chceme naklonovat skript PHP Chat, který jsem zveřejnil na https://github.com/DanWin/le-chat-php. Normálně by klonování úložiště vypadalo takto:
git clone https://github.com/DanWin/le-chat-php
Na připojení IPv6 můžete moji službu proxy používat takto:
git clone https://danwin1210.de:1443/DanWin/le-chat-php
A pokud byste chtěli klonovat přes ssh, můžete to udělat také takto:
git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php

Ti, kteří chtějí používat proxy trvaleji a/nebo mluvit přímo s GitHub, aniž bych znovu šifroval váš provoz, by měli do /etc/hosts přidat následující:

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::6 ghcr.io
2a01:4f8:c010:d56::7 pkg.github.com npm.pkg.github.com maven.pkg.github.com nuget.pkg.github.com rubygems.pkg.github.com
2a01:4f8:c010:d56::8 uploads.github.com
2606:50c0:8000::133 objects.githubusercontent.com www.objects.githubusercontent.com release-assets.githubusercontent.com gist.githubusercontent.com repository-images.githubusercontent.com camo.githubusercontent.com private-user-images.githubusercontent.com avatars0.githubusercontent.com avatars1.githubusercontent.com avatars2.githubusercontent.com avatars3.githubusercontent.com cloud.githubusercontent.com desktop.githubusercontent.com support.github.com
2606:50c0:8000::154 support-assets.githubassets.com github.githubassets.com opengraph.githubassets.com github-registry-files.githubusercontent.com github-cloud.githubusercontent.com

Thanks to DeLegacy IPv6 RPZ some of above addresses are now served from official GitHub IPv6 addresses, which aren't published in their DNS zone yet.

Po přidání můžete klonovat jako obvykle, bez jakýchkoli změn:

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

To vše se provádí pomocí následující konfigurace nginx na serveru se dvěma zásobníky:

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::6]:443 fastopen=100 ipv6only=on;
		proxy_pass ghcr.io:443;
	}
	server {
		listen [2a01:4f8:c010:d56::7]:443 fastopen=100 ipv6only=on;
		proxy_pass pkg.github.com:443;
	}
	server {
		listen [2a01:4f8:c010:d56::8]:443 fastopen=100 ipv6only=on;
		proxy_pass uploads.github.com:443;
	}
}

If there are any further questions, contact me.