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::5 objects.githubusercontent.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

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::5]:443 fastopen=100 ipv6only=on;
		proxy_pass objects.githubusercontent.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;
	}
}

If there are any further questions, contact me.