GitHub IPv6 проксі

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

Нещодавно мені довелося клонувати репозиторій git на GitHub через сервер лише з IPv6, який я орендував у мого улюбленого хостинг-провайдера Hetzner. На жаль, я зрозумів, що GitHub все ще не підтримує IPv6.

Моїм обхідним шляхом було налаштування WireGuard VPN на одному з моїх серверів з подвійним стеком. Альтернативою може бути встановлення Tor для анонімного завантаження.

Оскільки я далеко не єдиний користувач із сервером лише з IPv6, який хоче завантажувати сховища з GitHub, я вирішив надати загальнодоступний проксі-сервер, який можна використовувати для доступу до GitHub у мережі IPv6, поки GitHub не надасть вбудовану підтримку IPv6. Проксі-сервер доступний лише на IPv6, щоб користувачі IPv4 не використовували непотрібні ресурси, оскільки вони вже можуть клонувати безпосередньо з GitHub.

Зверніть увагу, що мій https-проксі обслуговує ssl-сертифікат, виданий для мого домену, що означає, що я розшифровую та повторно шифрую Ваш трафік (і потенційно міг би його переглядати, але я цього не роблю). Це необхідно, оскільки в іншому випадку Ви отримаєте попередження про недійсний ssl-сертифікат + github перенаправить на порт за замовчуванням після його прийняття. Дивіться нижче постійне рішення, більш сприятливе для конфіденційності.

Отже, як це працює? Припустімо, ми хочемо клонувати PHP-скрипт чату, який я розмістив на https://github.com/DanWin/le-chat-php. Зазвичай клонування сховища буде виглядати так:
git clone https://github.com/DanWin/le-chat-php
При IPv6-підключенні Ви можете використовувати мій проксі-сервіс наступним чином:
git clone https://danwin1210.de:1443/DanWin/le-chat-php
І якщо Ви хочете клонувати через ssh, Ви також можете зробити це таким чином:
git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php

Ті, хто хоче використовувати проксі-сервер постійно та/або спілкуватися безпосередньо з GitHub, без того, щоб я повторно шифрував їхній трафік, повинні додати наступне до /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::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.

Після додавання Ви можете клонувати як зазвичай, без будь-яких змін:

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

Все це робиться за допомогою такої конфігурації nginx на сервері з подвійним стеком:

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;
	}
}

Якщо виникнуть ще якісь питання, зв'язатися зі мною.