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.

Моим обходным путем была настройка 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

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

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

If there are any further questions, contact me.