Mikrotik VPN routing

Меня немного захватила тема ботов в Телеграме. По идее, боту можно поручить кое-что интересное, но пока я в силу небольших знаний просто разбираюсь в API и фреймворках на разных используемых мною языках, которые процесс взаимодействия с этим API упрощают.

Но поскольку Telegram на территории России «заблокирован», тестирование программ создаёт определенные затруднения.

К счастью, есть VPN, но заворачивать весь трафик с компьютера в этот VPN мне кажется не очень разумным, поскольку, например, смотреть Youtube через VPN нет смысла.

Задачу я себе поставил следующую: пробросить несколько адресов в VPN силами роутера Mikrotik. Схема прохождения пакета приблизительно такая:

%3 list Список адресовmangle Разметка пакетовlist->mangle packet Пакетpacket->mangle route Маршрутmangle->route interface VPN-интерфейсroute->interface

Что для этого нужно:

  1. Поднять VPN-интерфейс;
  2. Прописать route и установить ему отметку (например to-vpn);
  3. Создать список адресов и присвоить ему имя;
  4. Установить правило mangle;
  5. Установить правило NAT.

Естественно, я буду пользоваться командной строкой.

Mikrotik позволяет работать в графическом интерфейсе WinBox, и в этом графическом интерфейсе есть командная строка, однако лично мне проще подключиться по ssh: kitty -ssh -P <ПОРТ> -l <ЛОГИН> -pw <ПАРОЛЬ> -auto-store-sshkey <IP роутера> или kitty -kload <ПУТЬ К ФАЙЛУ НАСТРОЕК>

Включить ssh-доступ в Mikrotik можно в меню IP > Services, где нужно задать номер порта для доступа, а также установить ограничения, с каких ip-адресов будет возможен доступ по ssh: по умолчанию это внутренняя сеть роутера, 192.168.xxx.0/24.

  1. Подключившись, создаём интерфейс: /interface l2tp-client add name=<ИМЯ ИНТЕРФЕЙСА> user=<ИМЯ ПОЛЬЗОВАТЕЛЯ>  password=<ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ> [use-ipsec=yes ipsec-secret=<КЛЮЧ>] connect-to=<АДРЕС VPN-СЕРВЕРА> allow=mschap2. Параметр allow=mschap2 позволяет выбрать возможные алгоритмы подключения, у меня это mschap2.
  2. Прописать route достаточно просто: /ip route add gateway=<ИМЯ ИНТЕРФЕЙСА> routing-mark=to-vpn, свойства dst-address и distance будут взяты по умолчанию (0.0.0.0/0 и 1 соответственно).
  3. Добавим ip-адрес сайта, обращения к которому поедут в VPN, к списку адресов «vpn-list»: /ip firewall address-list add address=<IP-адрес> list=vpn-list. Адрес сайта, естественно, выясняется через ping или как-то так.
  4. Правило Mangle означает, что пакеты, соответствующие определенному критерию, будут определенным образом обработаны. Команда: /ip firewall mangle add action=mark-routing new-routing-mark=to-vpn dst-address-list=vpn-list chain=premangle означает, что пакеты на адреса из списка «vpn-list» будут помечены меткой для перенаправления «to-vpn».
  5. И последнее, network address traversal: /ip firewall nat add chain=srcnat out-interface=<ИМЯ VPN-интерфейса> action=masquerade.

Примечание: 1) почему-то через некоторое время могут наблюдаться проблемы с доступом; 2) это решение не устраняет проблему DNS Leak, нужно изучать далее.