Поводом для написания статьи послужило отсутствие упоминаний данного события в Рунете. Виной тому, предположительно, является несоблюдение провайдерами требования РКН, о котором пойдет речь ниже. Мне его удалось обнаружить только в корпоративной сети. Но нет никаких сомнений, что рано или поздно это коснётся всех.
Разбор и детали под катом.
Причины блокировки
4 апреля Мосгорсудом было вынесено решение по делу № 3-0154/2019 о перманентной блокировке ресурсов streamable.com. Однако для надежности РКН заблокировал и его IP-адреса, которые по досадной случайности совпадают с адресами pythonhosted.org.
В итоге в реестре блокировок Роскомнадзора появились следующие записи, относящиеся к решению суда:
- streamable.com
- 151.101.193.63
- 151.101.129.63
- 151.101.1.63
- 151.101.65.63
В их наличии можете убедиться сами.
Последствия
Как я уже упоминал выше IP-адреса pythonhosted.org и заблокированного ресурса совпадают, что легко подтвердить:
> dig pythonhosted.org
; <<>> DiG 9.11.5-P1-1ubuntu2.4-Ubuntu <<>> pythonhosted.org
;; global options: +cmd
;; Got answer: ...
;; ANSWER SECTION:
pythonhosted.org. 10 IN A 151.101.1.63
pythonhosted.org. 10 IN A 151.101.129.63
pythonhosted.org. 10 IN A 151.101.193.63
pythonhosted.org. 10 IN A 151.101.65.63
;; Query time: ...
> dig streamable.com
; <<>> DiG 9.11.5-P1-1ubuntu2.4-Ubuntu <<>> streamable.com
;; global options: +cmd
;; Got answer: ...
;; ANSWER SECTION:
streamable.com. 60 IN A 151.101.65.63
streamable.com. 60 IN A 151.101.193.63
streamable.com. 60 IN A 151.101.129.63
streamable.com. 60 IN A 151.101.1.63
;; Query time: ...
В данной статье нет цели разобрать детали работы pip, следует лишь знать, что индекс пакетов хранится на домене pypi.org, сами файлы на files.pythonhosted.org. Как следствие работа со стандартным пакетным менеджером становится затруднительной или вовсе не возможной.
Для тех, кого уже коснулось
Здесь приведу короткий перечень самых популярных вариантов для использования pip. На энциклопедичную полноту не претендует, для тонких деталей лучше обратиться к официальной документации.
Опции
- Глобальный VPN или прокси
- Индивидуальный прокси для pip
Возможно установить через переменные окруженияHTTP_PROXY
,HTTP_PROXY
, явный аргументpip --proxy $proxy ...
или конфигурационный файл. Все варианты поддерживают формат[user:pass]@host:port
. - Использование альтернативного индекса пакетов
Ключевой опцией являетсяindex-url
, которую также, как и прокси, можно передать вышеописанными способами. - Поднятие корпоративного/домашнего зеркала pypi.org
Самый благородный и самый сложный, да и места на диске требует аж 6 TB (здесь дашборд с информацие по ресурсам, в т.ч. график PyPI Mirror Size). - Использовать IPv6
Есть DNS записи для pythonhosted.org с IPv6 адресами, которые не подверглись блокировке. Но не у каждого провайдер или сеть поддерживает этот протокол.
Заключение
Новость вряд ли вызовет удивление, т.к. такие ситуации происходят, и происходят регулярно. Я не призываю строчить жалобы на Роскомнадзор или подавать в суд за сломанные пайплайны. Но приготовиться заранее стоит.
Автор: Даниил Данилкин