суббота, 10 октября 2015 г.

Настраиваем VPN в Mikrotik, маршрутизация на основе политик.

В сегодняшнем нашем посте мы рассмотрим практические аспекты настройки VPN в маршрутизаторах Mikrotik, а также постараемся разобраться с PBR (Policy Base Routing), благодаря которому можно мы сможем определить необходимую нам стратегию выбора маршрута. Для чего это нужно и как все это будет работать? Что такое VPN - я думаю объяснять никому не нужно, как известно, виртуальная частная сеть - позволяет настроить сетевое соединение (логическую сеть) поверх другой сети, например Internet. Предположим что мы имеем обычное интернет подключение и хотели бы получить доступ к сайтам, которые доступны только в определенной стране. Например, нам нужно получить доступ к какому-нибудь ресурсу расположенному в Германии, но с российским IP мы этого не можем сделать, т.к. при входе на этот ресурс проверяется географическая принадлежность посетителя (примеры сервисов с географической привязкой приведены в конце поста). Выходом в этом случае может послужить использование прокси или VPN-сервера, расположенного в той же стране, в нашем случае, в Германии. При поднятии VPN подключения вашему ПК / маршрутизатору присвоится внешний IP VPN-сервера и все посещаемые вами ресурсы в интернете будут думать что вы находитесь именно в Германии. Однако, это не всегда удобно. Например, вы можете зайти на Яндекс - а он, естественно, скажет вам что вы находитесь в Мюнхене или Франкфурте ;) Поэтому использование VPN нужно ограничить политиками (как раз здесь и имеются ввиду PBR), чтобы для одних ресурсов траффик шел именно через VPN, а для других - через обычное соединение.

Т.к. у меня нет своего VPN-сервера в Германии, в этой статье я также опробую сервис HideMe.Ru, который предоставляет 74 сервера в 35 странах с возможностью подключения через OpenVPN, L2TP и PPTP, а также безлимитный траффик. Ознакомиться с их тарифами на VPN можно здесь, я же попробую приобрести VPN на 1 день за 39 руб., чтобы успеть опробовать все возможности сервиса. Ну что ж, поехали ...

Нажимаем кнопку "Купить", выбираем тарифный план и нажимаем кнопку "Выбрать". Процедура оплаты предельно простая, к выбору нам предлагаются карты VISA/MasterCard, QIWI, Яндекс.Деньги, WebMoney, PayPal, SMS оплата и другие варианты. Проблем не должно возникнуть ни у кого, ну а я лично решил воспользоваться Яндекс.Деньгами.

После оплаты и возврата в магазин нам показывают вот такой код:


Который нужно ввести на главной странице в окне "Подключиться к VPN". После ввода полученного нами кода нам предлагается выбрать устройство с помощью которого мы будем подключаться:


Выбранный тип устройства влияет на настройки которые нам пришлют. В моем случае я выбрал вариант "роутер (для получения настроек PPTP / L2TP)", т.к. настройку мы будем производить именно на Mikrotik'е. Необходимые настройки мы видим сразу же, после нажатия кнопки "Далее":


Список серверов доступен по ссылке и довольно обширен. Я выбрал для себя Germany, Frankfurt. Теперь можно переходить непосредственно к настройке маршрутизатора.

Открываем WinBox или web-интерфейс Mikrotik и в Interfaces на вкладке Interface List добавляем новый PPTP Client, на вкладке General указываем имя (Name) интерфейса - hideme-vpn, на закладке Dial-Out параметры подключения:


Галочку Add Default Route не ставим, т.к. в этом случае VPN станет основным маршрутом для всего траффика, а мы хотим настроить доступ только к определенным ресурсам через VPN. Итак, VPN соединение у нас поднято и работает, осталось только настроить NAT для локальной сети и определить маршруты и политики их использования.

  1. /ip firewall nat add action=masquerade chain=srcnat out-interface=hideme-vpn - добавляем NAT, т.е. все что идет через VPN у нас NAT'ится.
  2. /ip route add dst-address=0.0.0.0/0 gateway="hideme-vpn" routing-mark=through_vpn - добавляем еще один маршрут на 0.0.0.0/0 (т.е. все IP, все сети) через hideme-vpn, но дополнительно указываем routing-mark - through_vpn. Т.е. через VPN у нас будут отправляться только те пакеты, для которых у нас указано соответствующее правило маркировки. И теперь нам осталось только задать это правило.
  3. /ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=through_vpn new-routing-mark=through_vpn passthrough=no - этим правилом мы говорим, что для всех IP адресов из списка through_vpn нам необходимо применять новое правило маршрутизации с именем указанным в new-routing-mark, т.е. through_vpn.
  4. /ip firewall address-list add address=178.63.151.224 list=through_vpn - и наконец добавляем адрес 178.63.151.224 в список IP адресов подлежащих маршрутизации через VPN, т.е. список с именем through_vpn.
К слову, IP 178.63.151.224 принадлежит сервису 2ip.ru. Теперь если мы посмотрим трассировку маршрута до 2ip.ru с ПК подключенного к Mikrotik, то увидим следующее:

E:\>tracert 2ip.ru

Трассировка маршрута к 2ip.ru [178.63.151.224]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  router [172.17.111.1]
  2    51 ms    51 ms    51 ms  10.112.192.1
  3    52 ms    52 ms    52 ms  50.7.86.241
  4    52 ms    52 ms    52 ms  be4434.rcr21.b023657-1.fra03.atlas.cogentco.com [149.6.42.161]
  5    52 ms    52 ms    52 ms  be2589.ccr42.fra03.atlas.cogentco.com [154.54.56.113]
  6    58 ms    58 ms    58 ms  be2229.ccr22.muc03.atlas.cogentco.com [154.54.38.58]
  7    60 ms    60 ms    60 ms  be2270.rcr21.nue01.atlas.cogentco.com [154.54.37.217]
  8    60 ms    60 ms    60 ms  te0-0-1-1.nr11.b040138-0.nue01.atlas.cogentco.com [154.25.0.14]
  9    60 ms    60 ms    59 ms  149.6.158.6
 10    60 ms    60 ms    60 ms  core11.hetzner.de [213.239.203.137]
 11    62 ms    62 ms    62 ms  core22.hetzner.de [213.239.245.226]
 12    62 ms    62 ms    62 ms  juniper2.rz10.hetzner.de [213.239.245.46]
 13    64 ms    63 ms    66 ms  hos-tr4.ex3k1.rz10.hetzner.de [213.239.227.226]
 14    62 ms    62 ms    62 ms  node2.barznet.de [188.40.35.142]
 15    62 ms    62 ms    63 ms  static.224.151.63.178.clients.your-server.de [178.63.151.224]

Трассировка завершена.

Здесь 10.112.192.1 - это удаленный адрес нашего VPN-туннеля (не путать с внешним IP). Ну и теперь мы можем открыть в браузере 2ip.ru и посмотреть результат:


Как видно, мы находимся в Germany, т.е. так, как мы и хотели. Для измерения скорости скачивания и ping'а в данном случае использовать сервис измерения скорости, предлагаемый 2ip.ru несколько некорректно, т.к. мы прописали правило маршрутизации пакетов через VPN только для 178.63.151.224, фактически же, при измерении скорости используется другой сервер. Поэтому мы поступим проще. Возьмем какой-нибудь большой файл, например образ ISO Ubuntu 15.10 - ubuntu-15.10-beta2-desktop-amd64.iso располагающийся на серверах Яндекса и скачаем его вначале через обычное соединение, а затем через VPN. Поможет нам в этом утилита DownTester v1.30 от NirSoft.

Через обычное соединение:

Speed (Bytes) Speed (Bits) Downloaded Start Time Download Duration Download Order
7664.9 KB/Sec62.79 Mbps153780.4 KB10.10.2015 1:22:0500:00:201

Через VPN:

Speed (Bytes) Speed (Bits) Downloaded Start Time Download Duration Download Order
5119.4 KB/Sec41.94 Mbps102388.4 KB10.10.2015 1:25:5700:00:201

Чтобы не было сомнений что файл качается через VPN, параллельно можно смотреть статистику интерфейса VPN в WinBox:



Т.е. скорость через VPN достаточно хорошая и для скачивания торрентов VPN от HideMe.Ru вполне подойдет. Здесь я бы хотел немного пояснить результаты полученные в двух таблицах выше. Как видите в графе Download Duration и там и там стоит 20 секунд. Но это не значит что файл целиком скачался за 20 секунд. В данном случае в настройках DownTester по-умолчанию стояла опция обрыва закачки через 20 секунд. Таким образом, в первом случае, когда файл с mirror.yandex.ru качался без использования VPN за 20 секунд 153 Mb, а через VPN - 102 Mb. В случае если бы мы качали с зарубежного, например, германского хостинга - результат возможно был бы чуть лучше. Однако полученные результаты в любом случае говорят о качестве предоставленного VPN. Т.е. канал на выбранном сервере оказался не перегруженным и вполне выдавал 41 Mbps download'а.

Подводя краткие итоги по настройке. Для доступа через VPN только к определенным нами ресурсам в Mikrotik необходимо:

  • В IP -> Firewall -> Address List добавить IP тех ресурсов соединение с которыми мы хотим осуществлять через VPN, в нашем случае (см. пункт 4) мы назвали этот список through_vpn.
  • В Interfaces мы должны добавить само VPN-соединение, в нашем случае мы настраивали PPTP Client (hideme-vpn).
  • В IP -> Routes мы добавили еще один маршрут на 0.0.0.0/0 через VPN с Routing Mark - through_vpn.
  • В IP -> Firewall -> NAT мы добавили правило маскарадинга для VPN. Т.е. NAT для VPN-интерфейса.
  • И наконец в IP -> Firewall -> Mangle мы поместили правило для prerouting, которое при совпадении адреса назначения пакета с адресами перечисленными в списке through_vpn выполняло action - mark routing, проставляя mark routing в through_vpn.

Т.е. фактически мы получили маршрутизацию всех пакетов для ip из списка через наш VPN. Ну вот собственно и все. Ну а если посмотреть по итогам статьи в целом:

  • Мы научились настраивать VPN в Mikrotik.
  • Немного познакомились с возможностями маршрутизатора в плане настройки правил маршрутизации, маркировки маршрутов и т.п.
  • Протестировали VPN, предоставляемый HideMe.Ru и убедились в его быстродействии.

К слову о баннере в начале статьи. Как известно у Yota, а также у некоторых других провайдеров при использовании P2P технологий скорость режется до 64 Kbit, либо же вообще пользоваться торрентами невозможно. С помощью VPN можно обойти данное ограничение, причем, как мы успели убедиться на примере используемого сервиса от HideMe.Ru скорость при этом получается вполне на уровне.

Естественно что я никого не призываю покупать VPN'ы и качать торренты через мобильную сеть, но, как говорится, если очень хочется или очень нужно - то можно. Здесь только нужно учитывать один момент, использование VPN провайдеры как правило не ограничивают, однако, на всякий случай лучше внимательно ознакомиться с договором на подключение. У некоторых провайдеров (чаще у операторов мобильной связи) сказано что они имеют право ограничивать полосу пропускания в часы пиковой нагрузки, при чрезмерной загруженности канала и т.д. и т.п. (другими словами, при злоупотреблениях торрентами и 24/7 загруженности канала скорость вам могут порезать на вполне законных основаниях), так что использование VPN не является 100%-ной панацеей для торрентов. 

Также, результаты проведенных мной тестов абсолютно реальны, но то что у вас сервисы от HideMe.Ru будут работать с такой же скоростью и довольно стабильно - я гарантировать естественно не могу. Все зависит от загруженности серверов, выбранной вами страны, вашего собственного интернет-канала и т.д. и т.п. Мое собственное впечатление - пользоваться можно, по-крайней мере попробовать.

p.s. Примеры сервисов с географической привязкой:
  • ivi.ru - первый в России бесплатный видеосервис с лицензионным полнометражным контентом. Доступно только из России.
  • Last.fm - бесплатное прослушивание музыки с функцией рекомендаций и составления личных плейлистов. Доступно бесплатно из Англии, Германии и США.
  • Яндекс.Музыка - бесплатное и легальное прослушивание музыки. Дискографии и новейшие альбомы, рейтинги, плейлисты. Доступно только из России, Украины и Беларуси.
  • Spotify - музыкальный сервис, предлагающий легальное прослушивание музыки многих мэйджор и независимых лейблов. Доступно только из Европы и США.

7 комментариев :

  1. для таких целей можно просто static routing, смысл в PBR? по сути CPU нагружается маркировкой и прочим добром, когда это и не нужно.

    ОтветитьУдалить
    Ответы
    1. От части согласен. Но смысл в том, что при указанном подходе все нужные IP, которые должны роутиться через VPN у нас находятся в address-list, который можно заполнять программно. Например, никто не мешает создать нам правило в chain forward у которого при наступлении определенных условий будет выполняться action - add dst to address list. Таким образом можно настроить "прозрачную" маршрутизацию через VPN для определенных ресурсов и т.п. В целом же пример больше учебный, и в каждом конкретном случае, более оптимальным может быть другой подход.

      Удалить
  2. Добрый день,
    а удалось заставить Mikrotik подключиться к L2TP Hideme.ru? у меня никак не получается....

    ОтветитьУдалить
    Ответы
    1. Нет, в приведенном примере настраивалось только PPTP соединение. L2TP, честно говоря, даже не пробовал.

      Удалить
  3. В тексте ошибка, должно быть
    /ip firewall nat add action=masquerade chain=srcnat out-interface=hideme-vpn

    ОтветитьУдалить
    Ответы
    1. Спасибо, действительно слово "nat" было пропущено. Поправил.

      Удалить
  4. как пробросить порт с PPTP соединения в локалку. В админки хайд ми пробросил - но в самом микротике ковыряюсь целый день насраивал НАТ как на dsnat и srcnat

    ОтветитьУдалить