Умный обход блокировок в Украине / Habr
В статье описывается настройка бесплатного сервиса Zaborona.Help для обхода блокировок сайтов в Украине.
Особенность конфигурации в том, что через VPN маршрутизируется трафик только к заблокированным сетям, остальные сайты работают напрямую. Работает на всех основных платформах: Windows, Linux, iOS, MacOS, Android.
VPN не влияет на скорость интернета, не подменяет IP для остальных сайтов и не мешает работе онлайн-игр, голосового трафика и т.д.
Проблемы популярных средств обхода блокировок
- Браузерные плагины — не работают для мобильных приложений, проксируют через свои сервера весь трафик. Имеют доступ к содержимому страницы и угрожают безопасности.
- Обычные VPN — маршрутизируют через свои сервера весь трафик. Влияет на скорость интернета, увеличивают задержки, подменяет IP для всех сайтов.
- Браузеры с прокси — не позволяют обойти блокировку мобильных приложений.
Процесс настройки описан на примере OpenVPN
Настройки на стороне клиента выполняются с помощью одного файла конфигурации и не требуют ручного ввода адресов и паролей.
Выбор сервера
Сервер для VPN должен иметь хорошую связность на сетевом уровне с вашим провайдером, чтобы задержки были минимальными, а также с ресурсами, которые планируется посещать через этот VPN. Датацентры в США, Китае, Японии — не лучший выбор.
Приведу несколько вариантов, которые я выбрал для сервиса Zaborona.help:
Linode.com — крутой и надежный хостинг с хорошими каналами.
Плюсы:
- Гигабитный канал, хорошая связность в Европе
- Маршрутизируемый блок /64 IPv6-адресов. Можно выдавать клиентам VPN реальные IP напрямую.
Минусы:
- Минимальная стоимость $5
- 1TB исходящего трафика на минимальном тарифе
- $20 за каждый терабайт превышения лимита
Scaleway.com — дешевый хостинг с безлимитным трафиком.
Плюсы:
- Минимальная цена за сервер €3
- Безлимитный трафик, 200Mbit/s
- Датацентр в Польше (близко к Украине)
Минусы:
- Один IPv6 адрес на сервер (какая глупость!)
- Не лучшая связность с заблокированными ресурсами
Для надежности используются сразу несколько серверов у обоих провайдеров. Балансировка выполняется примитивно, на уровне DNS.
Служебный домен, к которому подключаются клиенты vpn.zaborona.help, имеет несколько А-записей, направленных на все сервера сразу. Это позволяет равномерно размазать клиентов по серверам. Минимальный TTL записей позволяет быстро убрать проблемный сервер из общего списка и перенаправить клиентов.
Список заблокированных сервисов
Из указа президента Украины №133/2017 известен список компаний, подпадающих под блокировки. Зная этот список, можно составить список всех диапазонов IP, принадлежащих этим компаниям
Вот как выглядят BGP-анонсы Яндекса bgp.he.net/AS13238#_prefixes
Собираем все нужные диапазоны. Соседние сети объединяем в один диапазон, чтобы уменьшить общее число маршрутов на клиенте.
На выходе получаем такой список без учета IPv6-диапазонов:
Cписок сетей, маршрутизируемый через сервера Zaborona VPN# Vkontakte— 87.240.128.0/18
93.186.224.0/20
95.142.192.0/20
95.213.0.0/18
185.29.130.0/24
185.32.248.0/22
2a00:bdc0::/36
2a00:bdc0:e003::/48
2a00:bdc0:e004::/46
2a00:bdc0:e008::/48
2a00:bdc0:f000::/36
# Yandex
— 5.45.192.0/18
5.255.192.0/18
37.9.64.0/18
37.140.128.0/18
77.75.152.0/22
77.75.159.0/24
77.88.0.0/18
84.201.128.0/18
87.250.224.0/19
93.158.128.0/18
95.108.128.0/17
100.43.64.0/19
130.193.32.0/19
141.8.128.0/18
178.154.128.0/17
185.32.185.0/24
185.32.186.0/24
185.71.76.0/22
199.21.96.0/22
199.36.240.0/22
213.180.192.0/19
2001:678:384::/48
2620:10f:d000::/44
2a02:6b8::/32
2a02:5180::/32
# Mail.ru
— 5.61.16.0/21
5.61.232.0/21
79.137.157.0/24
79.137.183.0/24
94.100.176.0/20
95.163.32.0/19
95.163.248.0/21
128.140.168.0/21
178.22.88.0/21
178.237.16.0/20
185.5.136.0/22
185.16.148.0/22
185.16.244.0/22
188.93.56.0/21
194.186.63.0/24
195.211.20.0/22
195.218.168.0/24
217.20.144.0/20
217.69.128.0/20
178.22.91.0/24
178.22.92.0/23
185.16.244.0/23
195.211.128.0/22
208.87.94.0/24
2a00:1148::/32
2a00:b4c0::/32
# Kaspersky Lab
— 77.74.176.0/22
77.74.181.0/24
77.74.183.0/24
93.159.228.0/22
185.54.220.0/23
185.85.12.0/24
185.85.14.0/23
77.74.176.0/21
91.103.64.0/21
93.159.224.0/21
2a03:2480::/33
Этот список меняется крайне редко, поэтому не составит труда его обновить при необходимости.
Настройка OpenVPN
На сервере будет использован OpenVPN 2.4. Рекомендуется использовать именно эту версию. В репозиториях Ubuntu LTS версия OpenVPN 2.3, поэтому нужную версию можно установить подключив официальный репозиторий openvpn.
Выпуск сертификатов
Для генерации сертификатов проще всего использовать утилиту easy-rsa. Данный форк от ValdikSS позволяет генерировать сертификаты, одновременно подходящие и для OpenVPN, и для Ipsec.Генерация ключей с помощью easy-rsa
$ git clone https://github.com/ValdikSS/easy-rsa-ipsec.git
$ cd easy-rsa-ipsec/easyrsa3
$ ./easyrsa init-pki
init-pki complete; you may now create a CA or requests.
$ ./easyrsa build-ca nopass
Generating a 2048 bit RSA private key
…
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Cool VPN Server
…
$ ./easyrsa build-server-full zaborona.help nopass
Generating a 2048 bit RSA private key
…
Write out database with 1 new entries
Data Base Updated
# В данном случае public это имя клиента. Оно может быть любым.
$ ./easyrsa build-client-full public nopass
Generating a 2048 bit RSA private key
…
Write out database with 1 new entries
Data Base Updated
После генерации сертификатов имеем такой список необходимых файлов:
Для сервера:
easyrsa3/pki/ca.crt — корневой сертификат
easyrsa3/pki/issued/zaborona.help.crt — серверный сертификат
easyrsa3/pki/private/zaborona.help.key — ключ от сертификата сервера
Для клиента:
easyrsa3/pki/ca.crt — корневой сертификат
easyrsa3/pki/private/public.key — клиентский ключ
Серверный конфиг
Полученный на предыдущем шаге список сетей добавляем в конфиг сервера. Таким образом при подключении клиенту будут устанавливаться маршруты к заблокированным сетям через VPN сервер. Маршрут по-умолчанию 0.0.0.0 при этом не будет изменен.
Так как многие провайдеры в Украине блокирует DNS запросы к запрещенным сайтам, важно установить клиенту наши резолверы, и сделать так, чтобы доступ к ним был через VPN.
Конфиг сервера OpenVPNmode server proto tcp dev-type tun # Тип драйвера tun, так как нам не нужен L2 уровен dev zaborona # Имя tun интерфейса на сервере topology subnet server 192.168.224.0 255.255.252.0 # Диапазон IP выдаваемых клиентам. Выбираем маску побольше, так как клиентов планируется много server-ipv6 2a01:7e01:e001:77:8000::/65 # Диапазон IPv6 адресов. Удалите, если у вас нет отдельной маршрутизируемой ipv6 сети на сервере push "dhcp-option DNS 8.8.8.8" #Устанавливаем DNS резолверы push "route 8.8.8.8" # Маршрут до этого адреса через VPN push "dhcp-option DNS 74.82.42.42" # HE.net DNS в качестве вторичных push "route 74.82.42.42" # Route to HE.net DNS txqueuelen 250 keepalive 300 900 persist-tun persist-key cipher AES-128-CBC ncp-ciphers AES-128-GCM user nobody duplicate-cn # log logs/openvpn.log #status logs/status.log 30 ca ca.crt cert zaborona.help.crt key zaborona.help.key dh dh3048.pem # Routes # Yandex network push "route 5.45.192.0 255.255.192.0" push "route 5.255.192.0 255.255.192.0" push "route 37.9.64.0 255.255.192.0" push "route 37.140.128.0 255.255.192.0" push "route 77.88.0.0 255.255.192.0" push "route 84.201.128.0 255.255.192.0" push "route 87.250.224.0 255.255.224.0" push "route 93.158.128.0 255.255.192.0" push "route 95.108.128.0 255.255.128.0" push "route 100.43.64.0 255.255.224.0" push "route 130.193.32.0 255.255.224.0" push "route 141.8.128.0 255.255.192.0" push "route 178.154.128.0 255.255.128.0" push "route 199.21.96.0 255.255.252.0" push "route 199.36.240.0 255.255.252.0" push "route 213.180.192.0 255.255.224.0" push "route-ipv6 2620:10f:d000::/44" push "route-ipv6 2a02:6b8::/32" # Mail.ru network push "route 5.61.16.0 255.255.248.0" push "route 5.61.232.0 255.255.248.0" push "route 79.137.157.0 255.255.255.0" push "route 79.137.183.0 255.255.255.0" push "route 94.100.176.0 255.255.240.0" push "route 95.163.32.0 255.255.224.0" push "route 95.163.248.0 255.255.248.0" push "route 128.140.168.0 255.255.248.0" push "route 178.22.88.0 255.255.248.0" push "route 178.237.16.0 255.255.240.0" push "route 185.5.136.0 255.255.252.0" push "route 185.16.148.0 255.255.252.0" push "route 185.16.244.0 255.255.252.0" push "route 188.93.56.0 255.255.248.0" push "route 194.186.63.0 255.255.255.0" push "route 195.211.20.0 255.255.252.0" push "route 195.218.168.0 255.255.255.0" push "route 217.20.144.0 255.255.240.0" push "route 217.69.128.0 255.255.240.0" push "route-ipv6 2a00:1148::/32" push "route-ipv6 2a00:a300::/32" push "route-ipv6 2a00:b4c0::/32" # VK.com network push "route 87.240.128.0 255.255.192.0" push "route 93.186.224.0 255.255.240.0" push "route 95.142.192.0 255.255.240.0" push "route 95.213.0.0 255.255.192.0" push "route 185.32.248.0 255.255.252.0" push "route-ipv6 2a00:bdc0::/36" push "route-ipv6 2a00:bdc0:e006::/48" # Kaspersky network push "route 77.74.176.0 255.255.252.0" push "route 77.74.181.0 255.255.255.0" push "route 77.74.183.0 255.255.255.0" push "route 93.159.228.0 255.255.252.0" push "route 185.54.220.0 255.255.254.0" push "route 185.85.12.0 255.255.255.0" push "route 185.85.14.0 255.255.254.0"
Складываем все файлы на сервере в в папку /etc/openvpn
zaborona.conf — конфиг сервер
ca.crt — корневой сертификат
zaborona.help.crt — сертификат сервера
zaborona.help.key — ключ сервера
Клиентский конфиг
Для настройки подключения на стороне клиента, нужно сгенерировать конфигурационный файл, в котором будут вписаны настройки и ключи аутентификации.
nobind
client
# Адрес сервера. Используем имя домена для балансировки через DNS.
remote vpn.zaborona.help
remote-cert-tls server
cipher AES-128-CBC
setenv opt ncp-ciphers AES-128-GCM
setenv opt block-outside-dns
dev tun
proto tcp
<ca>
содержимое файла easyrsa3/pki/ca.crt
</ca>
<cert>
Содержимое файла easyrsa3/pki/issued/public.crt
</cert>
<key>
содержимое файла easyrsa3/pki/private/public.key
</key>
Подключение
Процесс настройки подключения на клиенте состоит из двух шагов: установить OpenVPN клиент и импортировать файл с настройками.
Мы написали инструкции c картинками для всех популярных операционных систем:
Windows
MacOS
iOS
Android
Исходники всего проекта, в том числе сайта, доступны на Github. Если какая-то информация на сайте отсутствует, буду признателен за pull request-ы.
Тем, кто хочет настроить собственный VPN сервер для обхода блокировок, с удовольствием помогу. Можете задавать любые вопросы здесь, либо в комментариях на сайте.
Как обойти блокировку сайтов используя браузеры и VPN
Блокировка сайтов или приложения, обычно застают врасплох пользователей. В итоге теряется доступ к облачным сервисам, привычной электронной почте или нельзя зайти в любимую социальную сеть.
Для многих потеря доступа к своей почте или социальным сетям, означала потерю важных данных. Ведь остались деловые письма, контактные данные и много другой личной информации. И чтобы обойти все эти запреты, методов придумали много. Даже китайский «Золотой щит», который сумел заблокировать даже «Гугл», можно обойти используя специальные платные сервисы, так называемые VPN.
Как как обойти блокировку сайта используя Opera
Если вам нужно просто зайти на какой-то заблокированный сайт в вашей стране, можно использовать браузер Опера. Это не самый популярный браузер в мире, в среднем его использует 10% пользователей сети Интернет. Во-первых, Вам нужно обновиться или скачать последнюю версию. Далее нажимаем комбинацию клавиш Alt + P и отмечаем галочку включить ВПН. После этого мы видим ярко-синий прямоугольник, около адреса сайта, на которой можно будет кликнуть. Откроется меню «Настроек» и вы выберите подходящую страну, чтобы изменить ваше реальное местоположение. В итоге вы сумеете зайти на свою почту Mail.Ru или посмотреть популярный клип на видеохостинге RuTube.
Минусы этого метода очевидные — невысокая скорость работы, зачастую даже послушать музыку с заблокированных ресурсов не получится. Огромное количество навязчивой рекламы.
Как как как обойти блокировку сайта используя Google Chrome
По умолчанию в этом браузере нет VPN настроек, потребуется установить расширение, чтобы получить доступ к заблокированным ресурсам. Для этого в запущенном Google Chrome заходим в меню «Настройки», кликаем на «Дополнительные инструменты» и выбираем вкладку «Расширения». В самом низу страницы нажимаем на ссылку «Еще расширения» и вот уже в появившемся окне вбиваем название интересующего нас расширения. Устанавливаем это расширение как обычно, кликнув на кнопку установить. После чего, в правом верхнем углу браузера, появится новая иконка, кликнув на которую, мы активируем расширение. В итоге изменим свой реальный IP-адрес и получим возможность заходить на нужные нам заблокированные ресурсы.
Как обойти блокировку сайта на смартфоне
Для этого потребуется зайти на Google Play и в поисковую строку написать VPN. В итоге увидим огромное количество приложений, которые помогают обойти блокировку сайтов. Выбираем понравившееся, по оценкам или выбираем бесплатное приложение, после чего устанавливаем. Запускаем программу, соглашаемся с условиями, внимательно их изучив перед этим, после чего за несколько секунд активируется VPN. Вы будете теперь выходить со смартфона из какой-то «европейской страны». Можно запускать заблокированные приложения в вашей стране или заходить на ранее недоступные сайты. После работы, когда уже не нужен доступ через VPN, отключите его в меню приложения.
Как обойти блокировку сайтов используя VPN
Когда же требуется полностью конфиденциальный доступ к заблокированным ресурсам, выбор становится очевидным это платный VPN-сервис. Ведь только наш сервис RocketVPN гарантирует полную анонимность, так как не ведёт таких логов о посещенных пользователем ресурсов в сети Интернет. Это гарантирует абсолютную безопасность при сёрфинге в Интернете, все передаваемые данные шифруются новейшими методами криптографии.
Преимущества VPN
- весь трафик будет зашифрован;
- скорость передачи данных не меняется;
- можно настроить свой роутер сразу через VPN и получите по-настоящему защищенный доступ к интернету;
- в ручном режиме можно выбрать страну, с которой вы будете выходить в сеть.
Скорость работы наших серверов высокая, так как они установлены во всех крупных странах, а также частях планеты это США, Европа, Китай. В итоге сумеете зайти на заблокированный ресурс в вашей стране без ограничений по скорости.
Кроме этого, RocketVPN выдает так называемый мультилогин, этот логин и пароль можно вводить на 5 ваших устройствах, таким образом, получите максимальную свободу действий на фоне полной конфиденциальности и анонимности.
Не стоит полагаться на бесплатные VPN сервисы, ведь в таком случае можно вполне стать жертвой мошенника. Часто такие бесплатные программы с вирусами и агрессивной рекламой. Поэтому заплатив небольшую сумму, получаете безопасный доступ к интернету.
Как обойти блокировку любого ресурса с помощью VPN
Если у вас, по неизвестным причинам, с помехами работает Facebook, YouTube или другая соцсеть, воспользуйтесь VPN-сервисами. Это самый простой способ сохранить доступ к любимым ресурсам и продолжить использовать их, сообщает lifehacker.ru.
Как это работает
Принцип работы VPN достаточно прост: соединение с нужными интернет-ресурсами происходит не напрямую, а через промежуточный сервер. Все данные при этом передаются в зашифрованном виде, а сам VPN-сервер может находиться в любой стране мира.
За счет последнего как раз и появляется возможность обойти заблокированные в определенном регионе ресурсы. После соединения с VPN-сервером все ваши действия будут осуществляться от его имени, а значит, вы виртуально измените свое местонахождение и сможете подключиться к серверам, несмотря на блокировку.
Как обойти блокировку сайтов
Чтобы попасть на заблокированный по какой-либо причине сайт, проще всего воспользоваться браузерным расширением VPN99 для Chrome или Firefox. Оно устанавливается в один клик и так же просто работает.
Если нужно проводить через VPN трафик со всех приложений, то удобнее настроить VPN прямо на устройстве. Это можно сделать на компьютере, смартфоне, планшете или вообще в роутере. Разберем для примера, как настроить VPN на iOS-устройстве. Вот что потребуется сделать.
1. Регистрируемся в VPN99 и оформляем подписку;
2. Устанавливаем из App Store бесплатное приложение OpenVPN;
3. Открываем в Safari конфигурационный файл VPN99 и жмем «Открыть в программе OpenVPN»;
4. В открывшемся окне программы жмем кнопку «Добавить» и подтверждаем добавление профиля VPN;
5. Вводим в поля User ID и Password логин и пароль, которые использовались при регистрации в VPN99, и включаем тумблер Save, чтобы не вводить данные при каждом включении VPN;
6. Включаем VPN и разрешаем установить соединение;
7. Теперь для активации VPN в следующий раз нужно будет лишь зайти в приложение и включить тумблер в настроенном подключении или воспользоваться меню VPN в настройках iOS.
У VPN99 есть подробные пошаговые инструкции по настройке VPN на любой платформе, включая Windows, macOS, Linux, Android, iOS и другие.
Почему стоит воспользоваться VPN99
Удобство
Удобство работы — одна из главных причин. Сервис настолько прост, насколько это вообще возможно: настройте подключение один раз и дальше все будет просто работать.
С VPN99 можно обходить блокировки различных ресурсов.
И без того простой процесс настройки VPN снабжен детальными пошаговыми инструкциями для каждого из поддерживаемых устройств. А если какие-либо вопросы по настройке или работе сервиса все же возникнут, получить на них оперативные ответы можно у специалистов службы поддержки VPN99.
Безопасность
Даже если VPN вам интересен лишь в качестве инструмента для обхода блокировок, вы автоматически получаете при его использовании другие бонусы.
Благодаря шифрованию данных они недоступны никаким сервисам и хакерам. Вы фактически становитесь невидимкой и получаете полную анонимность. Кроме того, ни провайдеры, ни спецслужбы не могут отследить ваши действия в интернете, а значит, вся переписка будет полностью конфиденциальна.
Выгода
Всего за один доллар вы получите полноценный VPN со всеми его возможностями. Никаких скрытых комиссий, дополнительных покупок и расширенных версий.
У VPN99 один-единственный тариф, в который все включено, так что тратить время на изучение условий и выбор оптимального тарифа не придется.
Фото: lifehacker.ru и из открытых источников
Подписывайтесь на наш канал в Telegram Please enable JavaScript to view the comments powered by Disqus.
Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.Существует два распространенных типа подключения DPI: пассивный и активный.
Пассивный DPI
Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.Выявляем и блокируем пакеты пассивного DPI
Поддельные пакеты, формируемые DPI, легко обнаружить анализатором трафика, например, Wireshark.Пробуем зайти на заблокированный сайт:
Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.
Рассмотрим пакет от DPI подробнее:
HTTP/1.1 302 Found
Connection: close
Location: http://warning.rt.ru/?id=17&st=0&dt=195.82.146.214&rs=http%3A%2F%2Frutracker.org%2F
В ответе DPI не устанавливается флаг «Don’t Fragment», и в поле Identification указано 1. Серверы в интернете обычно устанавливают бит «Don’t Fragment», и пакеты без этого бита встречаются нечасто. Мы можем использовать это в качестве отличительной особенности пакетов от DPI, вместе с тем фактом, что такие пакеты всегда содержат HTTP-перенаправление кодом 302, и написать правило iptables, блокирующее их:
# iptables -A FORWARD -p tcp --sport 80 -m u32 --u32 "0x4=0x10000 && 0x60=0x7761726e && 0x64=0x696e672e && 0x68=0x72742e72" -m comment --comment "Rostelecom HTTP" -j DROP
Что это такое? Модуль u32 iptables позволяет выполнять битовые операции и операции сравнения над 4-байтовыми данными в пакете. По смещению 0x4 хранится 2-байтное поле Indentification, сразу за ним идут 1-байтные поля Flags и Fragment Offset.
Начиная со смещения 0x60 расположен домен перенаправления (HTTP-заголовок Location).
Если Identification = 1, Flags = 0, Fragment Offset = 0, 0x60 = «warn», 0x64 = «ing.», 0x68 = «rt.ru», то отбрасываем пакет, и получаем настоящий ответ от сайта.
В случае с HTTPS-сайтами, DPI присылает TCP Reset-пакет, тоже с Identification = 1 и Flags = 0.
Активный DPI
Активный DPI — DPI, подключенный в сеть провайдера привычным образом, как и любое другое сетевое устройство. Провайдер настраивает маршрутизацию так, чтобы DPI получал трафик от пользователей к заблокированным IP-адресам или доменам, а DPI уже принимает решение о пропуске или блокировке трафика. Активный DPI может проверять как исходящий, так и входящий трафик, однако, если провайдер применяет DPI только для блокирования сайтов из реестра, чаще всего его настраивают на проверку только исходящего трафика.Системы DPI разработаны таким образом, чтобы обрабатывать трафик с максимально возможной скоростью, исследуя только самые популярные и игнорируя нетипичные запросы, даже если они полностью соответствуют стандарту.
Изучаем стандарт HTTP
Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:GET / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF.
Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.
Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).
Each header field consists of a case-insensitive field name followed
by a colon (":"), optional leading whitespace, the field value, and
optional trailing whitespace.
header-field = field-name ":" OWS field-value OWS
field-name = token
field-value = *( field-content / obs-fold )
field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
field-vchar = VCHAR / obs-text
obs-fold = CRLF 1*( SP / HTAB )
; obsolete line folding
OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).
Это значит, что запрос ниже полностью соответствует стандарту, его должны принять многие веб-серверы, придерживающиеся стандарта:
GET / HTTP/1.1
hoSt:habrahabr.ru
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
coNNecTion: keep-alive ← здесь символ табуляции между двоеточием и значением
На деле же, многие веб-серверы не любят символ табуляции в качестве разделителя, хотя подавляющее большинство серверов нормально обрабатывает и отсутствие пробелов между двоеточием в заголовках, и множество пробелов.
Старый стандарт, RFC 2616, рекомендует снисходительно парсить запросы и ответы сломанных веб-северов и клиентов, и корректно обрабатывать произвольное количество пробелов в самой первой строке HTTP-запросов и ответов в тех местах, где требуется только один:
Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required.Этой рекомендации придерживаются далеко не все веб-серверы. Из-за двух пробелов между методом и путем ломаются некоторые сайты.
Спускаемся на уровень TCP
Соединение TCP начинается с SYN-запроса и SYN/ACK-ответа. В запросе клиент, среди прочей информации, указывает размер TCP-окна (TCP Window Size) — количество байт, которые он готов принимать без подтверждения передачи. Сервер тоже указывает это значение. В интернете используется значение MTU 1500, что позволяет отправить до 1460 байтов данных в одном TCP-пакете.Если сервер указывает размер TCP-окна менее 1460, клиент отправит в первом пакете данных столько, сколько указано в этом параметре.
Если сервер пришлет TCP Window Size = 2 в SYN/ACK-пакете (или мы его изменим на это значение на стороне клиента), то браузер отправит HTTP-запрос двумя пакетами:
Пакет 1:
GE
Пакет 2:T / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Используем особенности HTTP и TCP для обхода активного DPI
Многие решения DPI ожидают заголовки только в стандартном виде.Для блокировки сайтов по домену или URI, они ищут строку «Host: » в теле запроса. Стоит заменить заголовок «Host» на «hoSt» или убрать пробел после двоеточия, и перед вами открывается запрошенный сайт.
Не все DPI можно обмануть таким простым трюком. DPI некоторых провайдеров корректно анализируют HTTP-заголовки в соответствии со стандартом, но не умеют собирать TCP-поток из нескольких пакетов. Для таких DPI подойдет «фрагментирование» пакета, путем искусственного уменьшения TCP Window Size.
В настоящий момент, в РФ DPI устанавливают и у конечных провайдеров, и на каналах транзитного трафика. Бывают случаи, когда одним способом можно обойти DPI вашего провайдера, но вы видите заглушку транзитного провайдера. В таких случаях нужно комбинировать все доступные способы.
Программа для обхода DPI
Я написал программу для обхода DPI под Windows: GoodbyeDPI.Она умеет блокировать пакеты с перенаправлением от пассивного DPI, заменять Host на hoSt, удалять пробел между двоеточием и значением хоста в заголовке Host, «фрагментировать» HTTP и HTTPS-пакеты (устанавливать TCP Window Size), и добавлять дополнительный пробел между HTTP-методом и путем.
Преимущество этого метода обхода в том, что он полностью автономный: нет внешних серверов, которые могут заблокировать.
По умолчанию активированы опции, нацеленные на максимальную совместимость с провайдерами, но не на скорость работы. Запустите программу следующим образом:
goodbyedpi.exe -1 -a
Если заблокированные сайты стали открываться, DPI вашего провайдера можно обойти.Попробуйте запустить программу с параметром
-2
и зайти на заблокированный HTTPS-сайт. Если все продолжает работать, попробуйте режим -3
и -4
(наиболее быстрый).Некоторые провайдеры, например, Мегафон и Yota, не пропускают фрагментированные пакеты по HTTP, и сайты перестают открываться вообще. С такими провайдерами используйте опцию
-3 -a
Эффективное проксирование для обхода блокировок по IP
В случае блокировок по IP-адресу, провайдеры фильтруют только исходящие запросы на IP-адреса из реестра, но не входящие пакеты с этих адресов.Программа ReQrypt работает как эффективный прокси-сервер: исходящие от клиента пакеты отправляются на сервер ReQrypt в зашифрованном виде, сервер ReQrypt пересылает их серверу назначения с подменой исходящего IP-адреса на клиентский, сервер назначения отвечает клиенту напрямую, минуя ReQrypt.
Если наш компьютер находится за NAT, мы не можем просто отправить запрос на сервер ReQrypt и ожидать ответа от сайта. Ответ не дойдет, т.к. в таблице NAT не создана запись для этого IP-адреса.
Для «пробива» NAT, ReQrypt отправляет первый пакет в TCP-соединении напрямую сайту, но с TTL = 3. Он добавляет запись в NAT-таблицу роутера, но не доходит до сайта назначения.
Долгое время разработка была заморожена из-за того, что автор не мог найти сервер с возможностью спуфинга. Спуфинг IP-адресов часто используется для амплификации атак через DNS, NNTP и другие протоколы, из-за чего он запрещен у подавляющего большинства провайдеров. Но сервер все-таки был найден, хоть и не самый удачный. Разработка продолжается.
Заключение и TL;DR
GoodbyeDPI — программа под Windows, позволяющая обходить пассивные и активные DPI. Просто скачайте и запустите ее, и заблокированные сайты станут снова доступны.Для Linux есть аналогичная программа — zapret.
Используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.
Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте ReQrypt.
Дополнительная полезная информация есть здесь и здесь.
Openvpn Блокируется провайдером.Как Обойти?
Да, бро. Я знаю. Давай немного поразмышляем.1. Нам нужно подключиться к ssh-серверу.
2. Настроить port-forwarding таким образом, чтобы клиент думал что подключается к локальному vpn.
3. нужна правильная настройка профиля vpn.
Давай пока покажу под Windows, под android мне нужно немного времени чтобы проверить (ибо у меня еще и корп.прокси)
У меня SSH-сервер работает на 443 порту (он пропускается почти всеми провайдерами)
Посмотреть вложение 8160
Далее делаем так:
Посмотреть вложение 8161
Что мы конкретно делаем? Мы создаем туннель на локальный адрес твоего сервера (в моем случае это мой домашний роутер, его ip: 192.168.1.1) на порт 1194 — это стандартный порт VPN.
В качестве локального адреса для Putty мы тоже указываем порт 1194.
Т.о. получается port-forwarding 1194:192.168.1.1:1194
Сама настройка выглядит так:
Посмотреть вложение 8172
Нажимаем add и правило сохраняется.
Теперь OpenVPN.
1. На сервере у тебя должен быть настроен DHCP-пул адресов виртуальной приватной сети для клиентов VPN.
Посмотреть вложение 8164
В моем случае это 10.100.11.10-10.100.11.20
На сервере у тебя должен быть указан local address хоста виртуальной сети: 10.100.11.1
Посмотреть вложение 8163
Это будет нужно для роутинга.
OpenVPN сервер у тебя должен быть настроен примерно так:
Обрати внимание на Mode: должен быть ip. В этом случае будет работать как клиент на Win, так и на Android.
Посмотреть вложение 8171
Про настройку сертификатов писать не буду, это легко.
С сервером всё.
Теперь клиент. Чтобы не разъяснять — вот тебе РАБОЧИЙ конфиг клиента OpenVPN.
Он будет работать и на Win и на Android.
proto tcp-client
remote localhost 1194
dev tun
tls-client
ca ca.crt
cert client.crt
key client.key
ping 10
verb 3
ns-cert-type server
cipher AES-256-CBC
auth SHA1
pull
auth-user-pass auth.cfg
route-method exe
route-delay 2
route 10.100.11.0 255.255.255.0 10.100.11.1
route 192.168.1.0 255.255.255.0
route-gateway 192.168.1.1
Обращаем внимание на то, что выделено жирненьким. remote localhost 1194 и никак иначе, если идем через ssh-туннель.
dev tun — обязательно. Андройд не поддерживает dev tup.
auth-user-pass auth.cfg — это файл с логином паролем для vpn
В андройде он тоже должен присутствовать и до файла должен быть указан путь!! Это обязательно.
Правила route позволяют маршрутизировать пакеты между вирутальной сетью Openvpn и локальной сетью. 10.100.11.1/27 <==> 192.168.1.1/24
И в принципе всё. Соединяемся с ssh-сервером:
Посмотреть вложение 8167
Затем через SSH-туннель, который уже установлен, соединяемся с OpenVPN Server:
Посмотреть вложение 8168
Чуть ждем:
Посмотреть вложение 8169
Бинго!
Посмотреть вложение 8170
Подытожим. На android должна быть правильная конфигурация OpenVPN. Я её выложил. Она 100% рабочая.
На android должен быть установлен SSHTunnel и OpenVPN. На android должен быть root.
В SSHTunnel нужно аналогичным образом настроить port-forwarding, такой же, как под Win.
И на этом всё.