Proxy GitHub IPv6

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

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.

Minha solução alternativa foi configurar uma VPN WireGuard com um dos meus servidores dual-stack. Uma alternativa poderia ter sido instalar o Tor para baixar anonimamente.

Como não sou de longe o único usuário com um servidor somente IPv6 procurando baixar repositórios do GitHub, decidi fornecer um servidor proxy público que pode ser usado para acessar o GitHub em uma rede IPv6, até que o GitHub forneça suporte IPv6 nativo. O proxy está disponível apenas no IPv6, para evitar que os usuários do IPv4 usem recursos desnecessários, pois eles já podem clonar diretamente do GitHub.

Observe que meu proxy https está servindo a um certificado SSL emitido para meu domínio, o que significa que eu decriptografo e criptografo novamente seu tráfego (e poderia investigá-lo, mas não o faço). É necessário, pois você receberia um aviso de certificado SSL inválido, caso contrário, o github redirecionaria para a porta padrão após aceitá-lo. Veja abaixo uma solução mais permanente, que é mais favorável à privacidade.

Então, como isso funciona? Vamos supor que queremos clonar o script PHP Chat que publiquei em https://github.com/DanWin/le-chat-php. Normalmente a clonagem do repositório ficaria assim:
git clone https://github.com/DanWin/le-chat-php
Em uma conexão IPv6, você pode usar meu serviço de proxy assim:
git clone https://danwin1210.de:1443/DanWin/le-chat-php
E se você quiser clonar via ssh, também pode fazer assim:
git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php

Aqueles que desejam usar o proxy de forma mais permanente e/ou falar diretamente com o GitHub, sem eu criptografar novamente seu tráfego, devem adicionar o seguinte a /etc/hosts:

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

Depois de adicionado, você pode clonar como de costume, sem nenhuma alteração:

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

Tudo isso é feito com a seguinte configuração Nginx em um servidor dual stack:

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.