Обход блокировок провайдера при помощи VPN на Mikrotik. Часть первая.

Скажу сразу что подобных статей в интернете — хоть пруд пруди. Но когда мне понадобилось реализовать подобную задачу, выяснилось что 99% статей это просто перепечатки друг у друга, одними и теми же ошибками. Ни одного работающего мануала я так и не нашел. Поэтому сделаю свой.
Задача не совсем тривиальная и весьма специфическая, но основной материал подойдет и широкому кругу пользователей.
Итак, задача:
Провайдер блокирует доступ к определенным адресам.
Нужно обойти эти блокировки, но с несколькими но — а именно — у нас за роутером, скажем, два десятка абсолютно разных устройств. Как стационарные ПК и ноутбуки, так и телефоны на разных операционных системах. Так вот на эти устройства не должно устанавливаться никакое дополнительное программное обеспечение. Т.е. по факту эти устройства даже не должны заметить что что то поменялось. У них просто не с того, не с сего все должно начать работать.
Теперь более техническое описание задачи -нужно тот трафик который блокирует провайдер «завернуть» на VPN, а остальной пустить через основного провайдера.
Я буду реализовывать это на оборудовании Микротик. (нравится мне эти железки по своей функциональности, да и по соотношению цена/качество).

Шаг первый
Поднимаем VPN на удаленном сервере.
В качестве сервера через который я буду запускать трафик мной был выбран немецкий хостер Hetzner (если зарегистрируетесь по этой ссылке — сразу получите 20 евро на счет, которыми и сможете оплатить арендованный сервер)
Для vpn-сервера нам не нужно мощной машины — это будет только шлюз через который мы будем гонять не такое уж большое количество трафика.
Скажу сразу, на том тарифе который мы выберем хецнер дает 20Тб трафика в месяц, что для обычного пользователя хватит с головой. Но при превышении этого лимита хостер не отрубает трафик а начисляет за превышенный трафик по «конской» цене.
Про это нужно помнить, особенно тогда когда/если вы начнете раздавать/продавать доступ  друзьям, коллегам или чужим людям.
Итак, выбираем сервер 2/2/40 — обойдется вам он 4 евро в месяц (но если вы зарегались по реферальной ссылке, то вам хватит на 5 месяцев бесплатного пользования )
Обход блокировок провайдера при помощи VPN
Вы можете использовать любой приглянувшийся хостинг — тут нет никакой принципиальной разницы. Главное что бы хостер предоставлял нормальное оборудование и, что не маловажно, был хороший внешний канал от хостера во внешний мир.
Как выбирать хостера, оплачивать его, проходить KYC, не входит в рамки этой статьи.
Предположим вы все это сделали и перед вами консоль с черным экраном и белыми буквами. И растерянность какой из vpnов выбрать. Да их существует некоторое количество. У каждого из них есть свои плюсы и минусы. Я бы посоветовал выбирать между двумя OpenVPN и PPTP. OpenVPN мне кажется предпочтительней, но, к сожаленью при работе с Микротиком  у него вылазит слишком много разных но, особенно с версией 6 (в семерке, по слухам, многое поправили, в частности, теперь openvpn клиент умеет коннектится и по udp ), поэтому я буду устанавливать pptp-сервер.
Первое что нам нужно это обновить только что приобретенный сервер
sudo apt update
sudo apt upgrade

И устанавливаем PPTP сервер:
sudo apt install pptpd
Обход блокировок провайдера

Дальше, во множестве мануалов, предлагают править те или иные конфиги, для работы данного сервера.
Я же предлагаю другое — ничего не трогать! Вы не поверите, все будет работать и так. Единственное что нам нужно — это завести пользователя и назначить ему пароль что бы мы смогли подключится к серверу.
sudo nano /etc/ppp/chap-secrets
Обход блокировок провайдера
Где:
user1 — логин или имя пользователя с которым мы будем попадать на сервер
pptpd — имя сервиса — просто пишем как есть
passwd11 — это пароль с которым мы будем попадать на сервер
* — звездочка означает что вам будет назначаться первый свободный ip адрес
Пользователей можно заводить несколько, просто добавляя еще строки ниже, по образу и подобию первой.
Выходим из редактора с сохранением результатов в том же файле.
Для этого нажимаем сочетание клавиш Ctrl+X
В нижней части редактора появится меню уточняющее хотим ли мы сохранить изменения сделанные в файле.
Подтверждаем нажав клавишу «Y»
Далее  нажимаем клавишу «Enter» и выходим с консоль.
на этом настройка VPN-сервера окончена, как не странно это звучит.
C настройкой pptp-сервера мы закончили.
Теперь нам нужно разрешить что бы на нашем сервере пакеты ходили между интерфейсами. (звучит мудрено — если вы не знаете что это такое просто выполните эти три команды)
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.forwarding=1 >> /etc/sysctl.conf
echo net.ipv4.conf.default.forwarding=1 >> /etc/sysctl.conf

и активируем данные команды
sudo sysctl -p /etc/sysctl.conf
Обход блокировок провайдера

Изменим DNS сервера на те которые считаем нужными
echo ms-dns 1.1.1.1 >> /etc/ppp/pptpd-options
echo ms-dns 9.9.9.9 >> /etc/ppp/pptpd-options

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

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(если имя вашего интерфейса не eth0, то замените в строчке выше его на свое)
и запускаем сам PPTP-сервер
service pptpd restart
На этом настройка сервера практически закончена. Почему практически? Потому что если мы перезагрузим сервер то наши настройки «слетят» — чего не очень то бы хотелось. Поэтому еще немного усилий над собой и мы окончательно закончим с настройкой сервера
Добавляем в автозагрузку pptp-сервер
sudo systemctl enable pptpd
Для сохранения правил iptables воспользуемся утилитой iptables-persistent
sudo apt install iptables-persistent
В процессе установки откроется окно конфигурации, в котором система предложит сохранить текущие правила iptables. Так как правила уже настроены, соглашаемся и дважды нажимаем “Yes”. Теперь, после перезагрузки сервера правила будут восстанавливаться автоматически.
Обход блокировок провайдера
Если в последующем мы будем изменять или добавлять правила, то по окончании работ сохраняем результат:
netfilter-persistent save
Ну, и что бы быть на 100% уверенным что все сделали как надо просто перегружаем сервер
shutdown -r now
После того как сервер перегрузится проверяем что pptp сервер поднялся и готов принять наши подключения
netstat -apn | grep :1723
Обход блокировок провайдера
На этом настройку VPN сервера можно считать законченной. Теперь у вас есть собственный, независимый VPN сервер при помощи которого вы можете обойти ограничения вашего интернет провайдера и быть уверенным что ни кто не сольет  «куда надо» то по каким сайтам и в какое время вы ходите.
Для пользователей Windows достаточно настроить vpn соединение и начать пользоваться.
Обход блокировок провайдера

Заполняем строчки значениями с нашего сервера
Обход блокировок провайдера
Нажимаем кнопку «Сохранить»
Ну и собственно подключаемся к нашему vpn
Обход блокировок провайдера
Дожидаемся когда соединение будет установлено и идем на какой ни будь ресурс который покажет ваш ip адрес.
Пусть это будет, например, 2ip.ru или 2ip.ua
И что мы видим? Правильно — мы видим ip адрес нашего сервера
Обход блокировок провайдера

Обход блокировок провайдера
Именно так вы теперь будете «видны» миру. Вы, в принципе, можете использовать любой vpn-клиент, хоть на Win, хоть на Andriod, который позволяет внести свои настройки.
Еще раз напомню, что в этом случае весь ваш трафик пойдет по зашифрованному каналу в туннель на ваш собственный VPN сервер.
Дальше не пользователям Микротиков можно ни читать, поскольку речь пойдет исключительно о настройке данного оборудования.
Сразу скажу, что в Микротиках тоже есть возможность завернуть весь трафик в туннель, но, напомню, наша задача «завернуть» лишь ту часть трафика которая блокируется нашим провайдером, или провайдером нашего провайдера.
Еще немного теории — как мы знаем у каждого доменного имени есть свой ip адрес. К примеру, у данного сайта galayda.com — ip адрес 178.219.200.9
Один домен — один адрес. Так бывает практически у 90% сайтов в интернете. Но! Поисковые сервера, социальные сети имеют, как правило десятки ip адресов на одном домене.
И в этом проблема. Почему? Сейчас попробую объяснить. Вот заблокировал ваш провайдер сайт galayda.com вы просто пишите такое правило «Если трафик идет на ip 178.219.200.9 — то отправить его в туннель». И все. Наш сайт будет открываться через туннель, остальные — через основного (быстрого) провайдера. Для социальных сетей и того же Google нам нужно будет прописать уже несколько десятков таких правил. И все бы ничего — но ни где нет в открытом доступе всех ip адресов того же FB или VK. Более того — даже если вы найдете подобные списки (они иногда встречаются) или соберете такие списки сами (что в принципе возможно) — социальные сети имеют привычку время от времени менять свои ip адреса.
Так что же, спросите вы, нет выхода из данной ситуации? Все не так уж и безнадежно — отвечу я вам. Нужно немного терпения, и немного желания. Попробуем перейти от слов к делу.
Способ первый — когда у сайта один-два ip адреса.
В оборудовании Микротик есть замечательная функция — самостоятельная возможность определять ip адрес выбранного вами сайта.
Переходим в раздел IP -> Firewall -> Adress List
Обход блокировок провайдера
Нажимаем на плюсик и в открывшемся окне вводим название списка и сайт который мы хотим внести в этот список. Название списка может быть произвольное, но лучше что бы оно было осмысленным. В этот список мы добавляем те сайты с которыми мы будем потом работать. Для примера мы вносим сайт 2ip.ru
Обход блокировок провайдера
нажимаем «ОK» и видим как сайт добавился в список и за одно определился его ip адрес
Обход блокировок провайдера
Попробуем усложнить задачу и внести в список домен aliexpress.ru. О чудо — микротик сам нашел и вписал в список 6 ip адресов принадлежащие этому домену!
Обход блокировок провайдера
Неужели все так просто? Вводим домен google.com
Увы, чуда не произошло. В список добавился всего лишь один ip адрес из предполагаемых 30-50
Что же, пока оставляем попытки добавить google или facebook таким способом.
Продолжим настраивать сайт из примера (2ip.ru)
Нам нужно из общего потока трафика сначала пометить, а потом завернуть пакеты из списка который мы создали. В дальнейшем мы работает исключительно на уровне списка, не важно сколько сайтов в нем будет
Переходим на вкладку Mangle и нажимаем на плюсик
Обход блокировок провайдера
Заполняем новое окно следующим образом:
Вкладка Genegal выбираем значение prerouting
Обход блокировок провайдера
Вкладка Advansed, в строке Dst.Address List выбираем адресный лист который мы создали ранее и в который мы добавили наш сайт
Обход блокировок провайдера
Вкладка Action.
В строкеAction выбираем значение — mark routing
В строке New Routing Mark — вписываем произвольное значение — в нашем примере вы вписали mark_vpn
Обход блокировок провайдера
Не забываем нажимать на кнопку OK
C сайтами закончили. Теперь попробуем создать соединение с нашим vpn сервером.
Переходим на вкладку PPP -> Interface -> Нажимаем плюсик и добавляем PPTP Cient
Обход блокировок провайдера
Нам нужна вкладка Dial Out
Обход блокировок провайдера

Заполняем три поля  — адрес нашего удаленного vpn сервера, логин и пароль. Все остальные поля можем оставить как есть.
Сохраняем созданное соединение. В итоге должны увидеть созданное, но неактивное соединение.
Обход блокировок провайдера
Теперь достаточно кликнуть на соединении и нажать на галочку как на картинке ниже и ваш микротик должен установить соединений с удаленным сервером. Что бы увидеть что все произошло нормально предлагаю такой лайфхак. Прежде чем запустить pptp клиент, откройте вкладку Log и уже потом запустите клиент
Обход блокировок провайдера
Если все сделали правильно — должны увидеть как клиент сконектился с сервером.
Если что то пошло не так увидите регулярно повторяющуюся попытку соединения.
Обход блокировок провайдера
Увы, где то вы сделали ошибку. Ищите что не так.
Но надеемся что у вас все пошло по лучшему сценарию и тогда осталось только написать маршрут что бы наш список ушел в созданный нами vpn-туннель.
Переходим IP -> Roures
Обход блокировок провайдера
Мы увидим уже какое то количество маршрутов поднятых по умолчанию. В том числе и маршрут к нашему vpn серверу.  Осталось написать одно правило. Нажимаем на плюсик и заполняем открывшееся окно.
Gateway выбираем имя нашего pptp соединения. Routing Mark — значение которое придумывали раньше (в идеале оно должно быть одно которое мы можем выбрать)
Обход блокировок провайдера
Нажимаем OK и смотрим на таблицу с маршрутами. Если и в этот раз не ошиблись у вас должно быть два маршрута в сторону туннеля. Оба они должны быть черного цвета (не синего или красного) и в обеих строчках должна присутствовать строчка reachable. Выдыхаем и пробуем что у нас получилось.
Открываем браузер и вводим в одну вкладку 2ip.ru, а во вторую 2ip.ua
Правильный результат будет выглядеть примерно так:
Обход блокировок провайдера
В одной вкладке вы будете видеть ip адрес который выдает ваш местный провайдер, во второй — ip адрес вашего vpn-сервера.
Теперь добавляя в адресный список сайты которые блокирует ваш провайдер вы замечательно будете обходить его блокировки. К тому же эти сайты будут открываться на всех компьютерах и телефонах подключённых к данному роутеру. Без каких то дополнительных шаманских действий.

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

Если у вас есть вопросы по тексту статьи или вы просто хотите «напихать» автору — добро пожаловать в мой телеграм-канал