Несмотря на желтый заголовок, дальше будет не желтая статья. Всех нас (я надеюсь именно здесь я наконец-таки смогу сказать от всего сообщества) уже достали действия Роскомнадзора. А так же его постоянное появление в рекомендованном на хабре. Поэтому эта новость вам понравится. Хоть что-то важное. Новость кстати еще от декабря 2018.
Если в двух словах, сейчас основой эффективный способ DPI это проверка поля SNI в пакете. Чтобы не повторяться, я отправлю вас на статью ValdikSS. Не то, чтобы там вся информация, но основные моменты изложены верно. Добавлю только, что теперь оборудование оператора научилось вставлять https TLS 1.2 сертификат, который не проходит валидацию в браузере и имеет общее имя MGTS. (Даже не mgts.ru, ха-ха, то есть это даже не домен, не то, чтобы у них могло получиться создать его, со всеми этими Certificate Transparency, который создал Google.) Кроме того сейчас уже не понятно, заблокирован ли ip полностью. Т.е. все порты, например, как ping.pe/www.7-zip.org. или вам отвечает DPI. Тут решение у сайтов только одно: постоянно менять ip адрес.
Rutracker имеет всего лишь три официальных зеркала (хотя можно создать свое, персональное, нужен лишь свой домен): rutracker.net rutracker.nl и rutrackerripnext.onion. Все они имеют определенное отношение к Cloudflare (авторитативный DNS сервер от cloudflare или tor, а у rutracker.nl и ip от cloudflare bgp.he.net/ip/104.28.16.16):
root@kali:~# dig @8.8.8.8 IN SOA rutracker.nl && dig @8.8.8.8 IN A rutracker.nl
;; ANSWER SECTION:
rutracker.nl. 3599 IN SOA buck.ns.cloudflare.com. dns.cloudflare.com. 2031873434 10000 2400 604800 3600
;; ANSWER SECTION:
rutracker.nl. 231 IN A 104.28.17.16
rutracker.nl. 231 IN A 104.28.16.16
;; Query time: 22 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Sep 23 16:46:24 MSK 2019
;; MSG SIZE rcvd: 73
Тем, кто читал статьи habr.com/ru/post/424857 habr.com/ru/company/globalsign/blog/427563 уже все понятно. Кстати, если у вас предубеждение перед cloudflare… Там вся идея была в том, что 35% все доменов в мире держат зону на авторитативных серверах cloudflare (en. wiki), кроме того какой-то процент еще и хостят там сервера. И если сразу везде активировать eSNI, то это будет существенно… Что и было сделано.
Но для тех, кто не читал: eSNI (encrypted Server Name Indication) по умолчанию работает на Cloudflare
root@kali:~# dig @8.8.8.8 IN TXT _esni.rutracker.nl
; <<>> DiG 9.11.5-P4-5.1+b1-Debian <<>> @8.8.8.8 IN TXT _esni.rutracker.nl
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33017
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_esni.rutracker.nl. IN TXT
;; ANSWER SECTION:
_esni.rutracker.nl. 3599 IN TXT "/wF+a004ACQAHQAgtyygbWc/bwQo5RPSszvuzK+0BIucwJhOLHZ0iCqrCjsAAhMBAQQAAAAAXYTNUAAAAABdjLZQAAA="
;; Query time: 42 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Sep 23 16:54:07 MSK 2019
;; MSG SIZE rcvd: 152
Итак, как заставить его работать? Во-первых, работает eSNI только в Mozilla Firefox. В Chromium (а значит и Chrome) поддержка будет добавлена не скоро, да и работать оно не будет, поскольку Google будет использовать IN ESNI запись, которая будет видимо поддерживаться только Google (ни cloudflare, ни Firefox это не поддерживают). Можете перейти по ссылкам и высказать свое фе гуглу и IETF. Нужен лишь google и/или github аккаунт.
Кратенькая инструкция: в firefox в about:config меняете network.security.esni.enabled на true. Для работы eSNI желательна работа (на самом деле она не нужна, но есть проблема: в windows сложно сделать такой запрос (IN TXT) асинхронно bugzilla.mozilla.org/show_bug.cgi?id=1500289) DNS over HTTPS, так как публичный ключ для шифрования sni берётся с поддомена _esni.example.com IN TXT, так что желателен зашифрованный транспорт dns, чтобы большое око Саурона провайдера не увидело этого. Для этого network.trr.mode выставляете в 2 (или 3, чтобы был только TRR), а network.trr.uri выставляете в mozilla.cloudflare-dns.com/dns-query
Можно еще прописать network.trr.bootstrapAddress, иначе resolve самого mozilla.cloudflare-dns.com будет происходить через системный resolver и лишь дальше установлена DoH сессия с DNS, что вызывает проблемы, если сразу запустить Firefox (Можно поставить 1.0.0.1, 1.1.1.1 2606:4700:4700::1111 или 2606:4700:4700::1001 или что там будет у dig mozilla.cloudflare-dns.com. (А там не обязательно эти адреса, но и любые из динамического облака cloudflare.)) Подробнее про trr resolver: github.com/bagder/TRRprefs
Дальше нужно проверить, что все заработало)) Заходите на cloudflare.com/ssl/encrypted-sni и нажимаете на Check My Browser
Вот после этого заходите, например, на rutracker.nl, заблокированный РКН (2-6-20/ 2019-04-25-699-АИ от 29.05.2019 от налоговой службы). И… все работает! Небольшой бонус: реализация для Android ровно такая же, так что там тоже всё работает. К сожалению нативная работа DNS over TLS в Android 9 не дает насладится eSNI, нужен TRR внутри браузера. Увы и ах. Опять таки высказываем свое фе, не стесняемся. bugzilla.mozilla.org/show_bug.cgi?id=1542754
Будем надеяться, что это уничтожит в ближайшее время DPI и Нумерационному совету (NRO) RIR не придется выносить ноту протеста РФ. Ничего хорошего не будет, если они попробуют отозвать Автономные Системы у крупных операторов РФ, как это недавно обсуждалось.
Также слудует сказать, что отсутствующее поле SNI может заставить некторые DPI сбоить и т.д. Впрочем на МГТС это работает.
Автор: Balling