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::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
2a01:4f8:c010:d56::8 uploads.github.com

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

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

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