6

Mikrotik и VPN только для определенных веб-сайтов


С каждым днем ​​веб-цензура в моей стране набирает силу. Очевидным решением является использование VPN, но оно замедляет соединение, и безопасность общедоступных VPN-сервисов не может быть гарантирована.

Таким образом, я подумал следующее решение:

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

Это возможно с RouterOS? Как это сделать?

Мой маршрутизатор - RB2011UiAS-2HnD-IN, RouterOS v 6.30.2.

На самом деле, этот вопрос подходит для дочернего сайта Network Engineering. Они скажут вам, что то, что вы хотите, не может быть достигнуто - соединение может быть либо туннельным, либо нет. Это не может быть и то и другое. Используйте хороший VPN-сервис прямо с настольной ОС и просто включайте и выключайте его по мере необходимости. (11 ноября 15 в 17:20)

@vic Может быть, RouterOS не может этого сделать, но это не значит, что это невозможно. Например, маршрутизация политики Linux может помочь вам в этом, хотя она работает в диапазонах IP/CIDR. Но тогда у вас возникает вопрос, можете ли вы доверять полученным DNS-записям ... (11 ноября 15 в 18:29)

RouterOS может сделать это нормально. Простое однострочное правило iptables. (12 ноября '15 в 14:22)

Ответов: 2

8

Давайте предположим, что вы будете использовать PPTP VPN только для демонстрации команд, которые вам нужно выполнить.
Поскольку шифрование PPTP уже давно нарушено, я предлагаю вам использовать что-то более безопасное (например, OpenVPN). Принцип один и тот же, независимо от того, какую технологию VPN/туннеля вы используете.

Итак, сначала вы создаете VPN без добавления маршрута шлюза по умолчанию.

/interface pptp-client
add add-default-route=no allow=pap,chap,mschap1,mschap2 connect-to=VPN_SERVER_IP \
dial-on-demand=no disabled=no max-mru=1440 max-mtu=1440 mrru=dis \
name=VPN_NAME password="MY_STRONG_PASSWORD" profile=default-encryption user=USERNAME

Затем вы создаете новую таблицу маршрутизации, добавляя шлюз по умолчанию через VPN с новой меткой маршрутизации vpn. Это позволит вам маршрутизировать пакеты через VPN.

/ip route add dst-address=0.0.0.0/0 distance=1 gateway=VPN_GATEWAY_IP routing-mark=vpn

Следующий маршрут не обязателен, если вы хотите заблокировать исходящий трафик, если VPN не работает:

/ip route add dst-address=0.0.0.0/0 type=unreachable distance=2 routing-mark=vpn

Нам также нужно сделать NAT для пакетов, которые будут отправляться через интерфейс VPN.

/ip firewall nat add chain=srcnat out-interface=VPN_NAME action=masquerade

Теперь мы добавляем правило mangle которое будет соответствовать целевым IP-адресам, которые мы хотим, и выполняем mark-routing для них, чтобы они использовали созданную нами таблицу маршрутов vpn .

/ip firewall mangle add chain=prerouting dst-address-list=VPN action=mark-routing new-routing-mark=vpn

Наконец, мы создаем список Address List на брандмауэре с IP-адресами, которые мы хотим направить через VPN.

/ip firewall address-list add list=VPN address=1.1.1.1
/ip firewall address-list add list=VPN address=2.2.2.2
/ip firewall address-list add list=VPN address=3.3.3.3
/ip firewall address-list add list=VPN address=4.4.4.4

Вы повторяете последнее правило столько раз, сколько вам нужно для столько IP-адресов, сколько вы хотите маршрутизировать через VPN.

Помните, что приведенные выше правила не обеспечивают никакой безопасности в отношении того, кто за вашим маршрутизатором сможет получить доступ к VPN и т.д. Возможно, вам потребуется добавить соответствующие проверки IP-адресов источника в правила, чтобы сделать их более безопасными.

Также этот метод будет маршрутизировать целые IP через VPN. Если вам нужно маршрутизировать определенные порты/протоколы через VPN, вы просто создаете дополнительные правила mangle, которые соответствуют всем, что вам нужно, и выполняете mark-routing на них.

Спасибо человек, работает отлично! При добавлении nat мне нужно было указать также chain = srcnat , а при добавлении mangle мне пришлось указать chain = prerouting (21 сентября '16 в 17:01)

Спасибо что подметил это. Я обновил свой ответ. :) (21 сентября '16 в 20:15)

Интересно, можно ли заменить список адресов на адреса уровня 7 , чтобы я мог переадресовывать запросы для конкретного доменного имени через vpn (21 мая '17 в 5:41)

Это было очень удобно, мне нужно было указать маршрутизацию через конкретное соединение для пары удаленных IP-адресов, но раньше я не работал с правилами Mangle. (3 августа '17 в 14:10)

@mac В последних версиях RouterOS вы можете добавлять домены в список адресов, и он автоматически преобразует их в адреса в одном и том же списке адресов. Он следует TTL записи DNS, поэтому он автоматически обновляется при изменении IP-адреса. Сопоставление с L7 - это своего рода PITA и очень ресурсоемкий :( (3 августа '17 в 18:40)

@ Cha0s Большое спасибо! Я пробовал ваше руководство (в том числе поиск DNS через список адресов), и все работает отлично. Теперь мне интересно, есть ли способ автоматически блокировать исходящие соединения по адресам, если VPN-соединение отключено (или временно недоступно). (3 января в 23:17)

@Andreas Я обновил свой ответ, чтобы приспособиться к этому сценарию :) Вы просто добавляете второй маршрут типа «недоступный» с «расстоянием» 2. Таким образом, когда VPN не работает, недоступный маршрут становится активным и сбрасывает исходящий трафик там вместо того, чтобы возвращаться к основной таблице маршрутизации. (4 января в 1:38)
-2

Ниже приведен общий ответ Linux. Я не знаю, имеет ли routeros подходящую функциональность в своем пользовательском интерфейсе, и если нет, можете ли вы обойти пользовательский интерфейс и напрямую взаимодействовать с функциями маршрутизации/межсетевого экрана/nat в ядре.

Первое, что нужно сделать, это настроить программное обеспечение VPN и настроить интерфейс VPN. Вы должны сказать своему программному обеспечению VPN НЕ делать VPN шлюзом по умолчанию. Как именно это будет сделано, будет зависеть от того, какое программное обеспечение VPN вы используете.

Затем вы можете добавить определенные маршруты в таблицу маршрутизации для направления трафика на определенные IP-адреса по VPN.

Вам также необходимо убедиться, что NAT настроен правильно, чтобы адрес источника пакетов, покидающих ваш маршрутизатор, соответствовал интерфейсу, с которого они выходят. Это можно сделать либо с помощью цели «MASQURADE», либо путем настройки отдельных правил «SNAT» для каждого интерфейса.

В зависимости от точного характера блокировки вы можете посчитать необходимым отправлять часть или весь ваш трафик DNS по VPN. Отправка всего вашего DNS-трафика по VPN должна быть достаточно простой (просто укажите настройки вашего DNS-сервера на IP, который маршрутизируется по VPN). Если (по соображениям производительности или конфиденциальности) вы хотите, чтобы только некоторые из ваших DNS-запросов проходили по VPN, вам понадобится какой-то DNS-прокси для разделения запросов.

Еще одним осложнением является то, что сайты, к которым вы обращаетесь, не имеют стабильных IP-адресов. В этом случае вам потребуется DNS-прокси, который может отслеживать ответы и динамически добавлять маршруты.

RouterOS не предоставляет никаких способов, позволяющих вам делать что-либо напрямую с ядром или iptables. Единственный способ управлять MikroTik RouterOS - через проприетарный CLI (Telnet/SSH), Winbox (настольный GUI) или API. (12 ноября '15 в 12:47)

Дополнить ответ

Server-Help.Ru - 2019. The website content is licensed CC BY NC SA 4.0. <|> Политика Конфиденциальности