imageНедавно, понадобилось скачать утилитку, в голове сразу пронеслась мысль скачать её с rutracker.org. Перейдя по url'у из поисковика, увидел сообщение о блокировке данного ресурса Роскомнадзором. Ну да, как я мог забыть, столько шума же было… Ладно, подумал я и отправился искать её на просторах интернета, ту версию которая была нужна мне, так и не удалось найти, но она есть на рутрекере! Благо есть у меня слабенькая заморская VPS'ка и это избавило меня от гугления быстрых способов обхода блокировки РКН. Быстренько поднимаю SSH-тунель до VPS'ки в режиме SOCKS-Proxy, меняю в браузере настройки и я на рутрекере — цель достигнута!

Прошло некоторое время, у меня опять возникла необходимость зайти на одноименный ресурс но уже с другого гаджета, опять та же история, качаю Putty, поднимаю тунель, меняю настройки в браузере, захожу на сайт, после просмотра ресурса закрываю тунель и опять меняю настройки прокси. Не наш это метод! VPN поднимать на клиентах? Нет, не вариант, хотелось бы избавится от лишних действий, да и скорости нормальной(из VPN'а много не выжмешь). И в голову пришла мысль, а не поднять ли мне VPN и завернуть необходимый траффик через VPS'ку? Как говорится «Сказано — сделано!».

И так, что необходимо:

  • Домашний маршрутизатор с прошивкой DD-WRT(в моём случае «DD-WRT v3.0-r28976 std (01/27/16)»)
  • VPS'ка с Linux/FreeBSD (В примере использован CentOS release 6.6 (Final))

Условимся, что:

  • Домашняя подсеть у нас: 192.168.0.0/24
  • Подсеть для VPN: 192.168.10.0/24
  • Локальный IP адрес присваиваемый нашему роутеру: 192.168.10.10

Для начала поднимем pptpd на VPS'ке:

# yum install pptpd -y

После установки, настраиваем конфиги:

/etc/pptpd.conf приводим к такому виду:

option /etc/ppp/options.pptpd
logwtmp
localip 192.168.10.1
remoteip 192.168.10.100-200

/etc/ppp/options.pptpd к такому:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
lock
nobsdcomp 
novj
novjccomp
nologfd

В /etc/ppp/chap-secrets прописываем логин, пароль и IP адрес назначаемый сервером этому клиенту:

ddwrtrouter	*	XHqe9xBky10h3h2WN	192.168.10.10

Еще нам нужно создать скрипт, выполняемый при подключении клиентов:

~# touch /etc/ppp/ip-up.local
~# chmod +x /etc/ppp/ip-up.local

Этот скрипт исполняется каждый раз, когда клиенты подключаются, а так же в него передаются некоторые параметры, где $5 — это IP адрес, присвоенный клиенту, адрес у нас статический (указывали выше). Нам необходимо добавить маршрут к нашей домашней сети 192.168.0.0/24 при подключении нашего роутера.

Содержимое скрипта /etc/ppp/ip-up.local:

#!/bin/bash

case "$5" in
    192.168.10.10)
        /sbin/route add -net 192.168.0.0/24 gw 192.168.10.10 dev ppp0
        ;;
    *)
esac

Теперь нам необходимо разрешить прохождение пакетов между нашими интерфейсами:

~# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
~# sysctl -p

Добавить правила в файервол:

~# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
~# iptables -A INPUT -i eth0 -p gre -j ACCEPT
~# iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
~# iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
~# iptables-save
~# service iptables restart

И запустить pptpd сервер:

~# service pptpd start

На этом настройка VPS'ки закончена, переходим к настройки роутера, открываем Web-GUI DD-WRT 192.168.0.1. Переходим Services > VPN и включаем PPTP Client:

PPTP Client Options: Enable
Server IP or DNS Name: ip_вашего_vpn_сервера
Remote Subnet: 192.168.10.1
Remote Subnet Mask: 255.255.255.0
MPPE Encryption: mppe required,no40,no56,stateless
MTU: 1500
MRU: 1500
NAT: Disable
Username: ddwrtrouter
Password: XHqe9xBky10h3h2WN

Логин и пароль указывали в /etc/ppp/chap-secrets. Переходим в Security > VPN Passthrough. PPTP Passthrough: Enable.

Далее в Administration > Commands в инпут вставляем следующий скрипт:

#!/bin/sh

while [ ! -f /tmp/pptpd_client/ip-up ]
do
sleep 1
done
cd /tmp/pptpd_client
cp ip-up ip-up.old
grep -v 'exit 0' ip-up.old > ip-up
# rutracker.org
echo "/sbin/route add -net 195.82.146.214 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
# 2ip.ru
echo "/sbin/route add -net 178.63.151.224 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
# archive.org
echo "/sbin/route add -net 207.241.224.2 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
echo "/bin/cat /proc/net/ip_conntrack_flush" >> ip-up
echo "exit 0" >> ip-up

Жмем "Save Startup". Только что мы создали скрипт который запускается при старте нашего роутера, в нем мы модифицируем дефолтный скрипт ip-up, который выполняется после подключения PPTP клиента к серверу, здесь мы добавляем маршруты подсетей, которые мы хотим маршрутизировать через наш VPN сервер.

195.82.146.214 — IP адрес веб сервера rutracker.org
178.63.151.224 — IP адрес веб сервера 2ip.ru(добавил для проверки работоспособности)

Можно так же добавлять и подсети, к примеру:

echo "/sbin/route add -net 195.82.146.214 netmask 255.255.254.0 gw 192.168.10.10 dev ppp0" >> ip-up

Переходим Administration > Management и жмем Reboot Router, на этом всё, настройка закончена. После перезагрузки роутера, из домашней сети переходим по адресу 2ip.ru если видим внешний адрес нашего VPN сервера, значит у нас все получилось.

P.S.: после настройки меня все равно перекидывало на страницу провайдерской блокировки, после чистки куки и кеша все заработало, как надо.

Плюсы и минусы такого подхода:

+ Простота в настройке
+ Доступность ресурса с любого хоста в домашней сети
+ Нет необходимости настраивать все хосты в домашней сети
+ Доступность без дополнительных манипуляций
+ Вы точно знаете с какого адреса зайдете на тот или иной ресурс(в отличии от реализации с Tor'ом)

— Обход производится по IP адресу, если у домена сменится IP адрес, придется его обновить на роутере
— Добавление маршрутов руками

UPD:
Спасибо inkvizitor68sl за идею, поправил скрипт для подгрузки всех IP адресов с reestr.rublacklist.net/api/ips, таблица маршрутизации порядка ~11300 записей, полет нормальный, роутер не тормозит…
#!/bin/sh

while [ ! -f /tmp/pptpd_client/ip-up ]
do
sleep 1
done
cd /tmp/pptpd_client
cp ip-up ip-up.old
grep -v 'exit 0' ip-up.old > ip-up
#rutracker.org
echo "/sbin/route add -net 195.82.146.214 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
#2ip.ru
echo "/sbin/route add -net 178.63.151.224 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
#archive.org
echo "/sbin/route add -net 207.241.224.2 netmask 255.255.255.255 gw 192.168.10.10 dev ppp0" >> ip-up
echo "/usr/bin/wget -q -O - http://reestr.rublacklist.net/api/ips | /bin/sed -e 's/\;/\n/g' -e 's/\\\"//g' > /tmp/pptpd_client/rkn.ip" >> ip-up
echo "/bin/cat /tmp/pptpd_client/rkn.ip | /usr/bin/awk '{printf(\"/sbin/route add -host %s gw 192.168.10.10 dev ppp0\n\",\$0) | \"/bin/sh\" }'" >> ip-up
echo "/bin/cat /proc/net/ip_conntrack_flush" >> ip-up
echo "exit 0" >> ip-up


Кстати в этом списке reestr.rublacklist.net/api/ips нет адреса рутрекера…

Комментарии (42)


  1. inkvizitor68sl
    05.02.2016 14:30
    +11

    Лучше openvpn и по крону реестр себе подгружать и в роуты клиентов прямо с сервера пушить.

    А линуксоиды вообще делают одно легкое движение пальцем:

    sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r root@remote_host $(curl http://reestr.rublacklist.net/api/ips  | sed -e 's/\;/\/32 /g' -e 's/\"//g')
    

    И у них всё хорошо.


    1. Evengard
      05.02.2016 15:47
      +2

      Вау спасибо за этот АПИ по доставанию заблоченных ИПшников. Надо будет сделать прозрачный проброс на ВПСку свою


    1. avetrov
      05.02.2016 23:07
      +3

      какие-то третьи источники.
      вот тру вариант

      rkn=`curl -s "https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv" | iconv -f cp1251 | tail -n+2 | idn -u`
      ips=`echo "$rkn" | cut -d ";" -s -f1 | tr -s " | " "\n" | sort | uniq`
      for i in $ips; do ipset add blacklist $i; done
      


  1. kay
    05.02.2016 17:06
    +2

    По мне так лучше запилить собственные домены с https и reverse proxy.


  1. miroslav
    05.02.2016 17:10
    +1

    Ребята, у кого провайдер блокирует по DPI и дома стоит Linux, попробуйте выполнить bash

    exec 3<>/dev/tcp/195.82.146.214/80
    echo -e "GET / HTTP/1.1\r\nHost: rutracker.org\r\n\r\n" >&3
    cat <&3
    exec 3<&-
    exec 3>&-
    


    1. ivan386
      05.02.2016 18:51
      +6

      Расскажите пожалуйста что эта команда делает тем у кого нет Linux?


      1. baldr
        05.02.2016 19:29
        +5

        Рисует ёлочку, скачивает весь архив рутрекера и удаляет папку /usr


      1. ofilin
        05.02.2016 21:28
        +3

        я так понимаю,
        1. открывает сокет на указанный хост: порт и заворачивает в нестандартный поток 3
        2. отправляет данные «GET / HTTP/1.1\r\nHost: rutracker.org\r\n\r\n» в этот поток
        3. выводит то, что сервер прислал в ответ
        4,5 хз
        по мне, так бесполезная манипуляция, то же самое телнетом проще делается, если что то неправильно, поправьте…


        1. ofilin
          05.02.2016 21:35
          +1

          exec 3<&-
          exec 3>&-
          закрывает поток ввода, вывода


          1. miroslav
            05.02.2016 22:03
            +2

            У меня происходит отправка «GET / HTTP/1.1\r\n» первым пакетом, а «Host: rutracker.org\r\n\r\n» вторым пакетом.
            Страница открывается (с 301 на forum/index.php) и сайт работает.

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

            Команда проверяет особенность DPI у провайдера.


            1. miroslav
              05.02.2016 22:13
              +1

              Точно, telnet, совсем про него забыл. Для проверки под windows, копируем в буфер

              GET / HTTP/1.1
              Host: rutracker.org
              
              
              

              выполняем «telnet 195.82.146.214 80» и вставляем буфер обмена (второй перенос в конце важен)



    1. NetBUG
      05.02.2016 21:35
      +1

      try using rutracker.org instead of 195.82.146.214 — правда, без блокировки.


    1. Lol4t0
      06.02.2016 00:23
      +1

      curl -v -H 'Host: rutracker.org' 195.82.146.214 блокирует

      P.S. И где вы берете /dev/tcp/?


      1. ofilin
        06.02.2016 01:13
        +1

        /dev/tcp это псевдо путь hacktux.com/bash/socket


  1. Raegdan
    05.02.2016 22:43
    +6

    Пользуюсь OpenVPN по такой же схеме — с одной стороны домашний гейт и портативные устройства, с другой VPSка — практически с начала работы говнореестра. Хочу обратить внимание, что именно OpenVPN. Единственный плюс PPTP сегодня — это поддержка из коробки на любом тапке, но на этом плюсы заканчиваются. 128-битная криптография, невозможность смены транспортного протокола и порта, необходимость экзотического протокола GRE — это как-то не очень хорошо сочетается с войной против фаерволов, особенно со всякими умными DPI и прочими нанотехнологиями. Да можно и без них: кроме PPTP протокол GRE, насколько знаю, больше никто толком и не использует, следовательно, оператор банхаммера может просто влепить бан по протоколу, и PPTP всё, а больше ничто не пострадает.


    1. ofilin
      06.02.2016 01:18
      +1

      согласен, цель статьи заключалась в простоте, далеко не на всех прошивках DD-WRT по дефолту есть OpenVPN


  1. ValdikSS
    06.02.2016 00:20
    +1

    bitbucket.org/ValdikSS/antizapret

    • Скачивает актуальный спискок заблокированных сайтов
    • Создает PAC-файл для прокси со списком проксируемых IP (пример), список маршрутов для OpenVPN, лист для dnsmasq
    • Добавляет заблокированные IP в iptables или ipset-таблицу


  1. ustasby
    06.02.2016 00:29
    +3

    Один я дурак, скачал какое то расширение к браузеру и все работает.


    1. artyums
      06.02.2016 00:44
      +5

      Все эти расширения — вопрос Вашего доверия к ним. Куда, через какие прокси и т.д. они маршрутизируют трафик, что делают с ним в пути — в общем случае неизвестно. При этом все расширения, насколько я знаю, основаны именно на прокси.

      Со своей VPS такой вопрос почти не стоит, если провайдеру доверяем. Но к провайдеру доверия куда больше, чем к расширению…


      1. Psychosynthesis
        06.02.2016 10:49
        +1

        А какие у меня предпосылки им «недоверять»? Собственно, оно показывает то что мне нужно, а какими путями оно мне это доставляет на экран — мне без разницы. В общем-то, даже если оно угонит мой аккаунт на рутрекере (пфф) — да бога ради.

        Вопрос гипотетический возможности встраивания вредоноса в траффик, я бы попросил не поднимать — ибо ровно то же самое может произойти в тысяче других мест при пользовании компьютером, даже помимо этого несчастного расширения. Обсуждать это бессмысленно.

        Хотя, кого я обманываю, на подобные заявления на хабре тут же слетаются сотни труЪ параноиков, которые в инет ходят исключительно через цепочку соксов…


        1. artyums
          06.02.2016 13:42
          +4

          Это не паранойя, а здравое избегание лишних рисков. Угон аккаунта от рутрекера — это одно, а если расширение погонит через себя более, скажем так, конфиденциальный трафик? Хорошо еще, если сайт за HTTPS, а если нет?


          1. Psychosynthesis
            06.02.2016 14:04
            +1

            Не выходить из комнаты — тоже здравое избегание, ага.

            Расширение отключаемое.


            1. artyums
              06.02.2016 18:27
              +2

              Как раз таки не здравое — аналогом в интернете было бы и на сайты никакие не заходить, кроме какого-нибудь белого списка :)

              Если воли каждый раз включать/отключать расширение хватает — то проблемы, в общем-то нет. Мне проще на старте операционки автоматически VPN подключить :)


              1. Psychosynthesis
                07.02.2016 22:23
                +1

                Ну про комнату это был сарказм.

                Возвращаясь к параное — кто вам дал гарантию что VPN'у можно доверять?


                1. artyums
                  09.02.2016 17:53
                  +1

                  Услуги VPS, на которых разумно развертывать свой VPN, в основном предоставляются более-менее крупными игроками, которым глупо жертвовать своей репутацией и препарировать пользовательский трафик. Да и бизнес не об этом. Во всяком случае мы верим в это!

                  Расширения же поддерживаются куда более неизвестными личностями =) На чьи то деньги) И т.д.


                  1. Psychosynthesis
                    09.02.2016 18:47
                    +1

                    Любого из ваших «более-менее крупных игроков» легко могли взломать и слушать ваш траффик. А выяснится это когда вскроют очередную 0day-уязвимость.

                    Это всего лишь гипотетические допуски, но признайте, в нашем замечательном мире это ровно настолько же возможно, насколько и вредоносные расширения.


    1. ofilin
      06.02.2016 01:26
      +3

      нет, я честно пробовал устанавливать поиграться некие плагины, но добавить больше него, artyums все сказал…


      1. DOLARiON
        06.02.2016 02:12
        +3

        Согласен. Доверия так же не испытываю ни к одному расширению, пожалуй, кроме официального плагина Google «Экономия трафика», недавно вышедшего из беты.
        Юзаю его, полет нормальный. Попробуйте.


        1. ghost404
          07.02.2016 09:38
          +2

          На мобильных устройствах, «Экономия трафика» это самый простой способ обхода блокировок. Ничего ставить и настраивать не надо. Только галочку в настройках хрома поставил и все


  1. J_o_k_e_R
    06.02.2016 03:19
    +4

    Для начала поднимем pptpd на VPS'ке:


    Дальше не читал, статье минус. Какой pptpd? На дворе 2016 год, бросьте гадость и никогда больше не используйте. И тем более никого использовать не призывайте, пожалуйста. pptp дыряв до невозможности.


  1. overmes
    06.02.2016 10:29
    +1

    для рутрекера мне хватило добавление в hosts:
    2a02:4680:22::214 rutracker.org


    1. XolodIT
      06.02.2016 11:29
      +2

      не работает


      1. overmes
        06.02.2016 11:33
        +1

        Вероятно будет работать не у всех. Тут есть свои тонкости.


        1. XolodIT
          06.02.2016 11:36
          +2

          вы не могли бы посвятить в них?


          1. overmes
            06.02.2016 13:06
            +1

            Сам толком не знаю, но наиболее важно поддерживает ли провайдер ipv6(ниже в комментарии указали сайт для проверки) и отфильтровывает ли ipv6 трафик для блокировки.


      1. ofilin
        06.02.2016 11:38
        +2

        проверьте поддержку IPv6 ipv6-test.com


        1. XolodIT
          06.02.2016 13:27
          +2

          озадачился, не поддерживает мой провайдер ipv6, спасибо


          1. ivan386
            07.02.2016 01:23
            +1

            Можно настроить 6to4 если постоянный внешний ip.


  1. Krey
    08.02.2016 19:03
    +1

    VPN тут немного излишне мне кажется. Вас же устраивали ssh-туннели, почему бы не остановиться на них?
    У меня на роутере стоит autossh для надзором за туннелем к VPS. Redsocks для прозрачного заворота трафика в этот туннель и несколько правил iptables, где указывается что туда заворачивать.