Нещодавно мені довелося клонувати репозиторій 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
Після додавання Ви можете клонувати як зазвичай, без будь-яких змін:
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; } }
Якщо виникнуть ще якісь питання, зв'язатися зі мною.