Как пустить трафик некоторых приложений в обход VPN?
Привет всем. Продолжаю настраивать VPN. Собственно, сервер уже поднят, дело за клиентом. Клиентом будет выступать обычный маршрутизатор TP-Link с установленным LEDE. Необходимо сделать так, чтобы торрент трафик, а также трафик таких приложений, как Steam, шёл напрямую, в обход VPN. Желательно создать что-то вроде белого списка. Есть ли надёжные способы реализации? И желательно не слишком мудрёные
Невероятно. За последние сутки я насоветовал fwbuilder (опенсорс, если что) уже три раза. Т.е. в три раза больше, чем за целый год!!
Кароче тебе поможет фильтрация пакетов, а настроить мышкой её можно.
//2maxcom: Cannot contact reCAPTCHA. Check your connection and try again.
Сделай чтоб ВПН работал в режиме transparent proxy и переводи на него с помощью iptables.
Для контроля траффика добавь фильтр по UID пользователя.
Типа запускаешь steam от пользователя steam и его траффик не трогаешь.
А браузер запускаешь от пользователя browser и его траффик с помощью «iptables -m owner —uid-owner 100X» переводищь на порт tranparent proxy на котором сидит и слушает ВПН.
Сам так делаю, только вместо ВПНа tor.
Это нужно делать на клиентских машинах или на маршрутизаторе?
Фильтр по uid, очевдно будет работать только на клиенте, ну а -j REDIRECT может куда угодно отправить траффик.
Мне надо это дело поднять на маршрутизаторе, чтобы не приходилось настраивать клиенты.
Тогда не знаю, в заголовках пакетов же нет полей для того, чтобы узнать от какого приложения он прилетел. Значит тебе нужно свой протокол писать. Что очень запарно.
Что-то мне подсказывает «обычный маршрутизатор TP-Link» не осилит dpi
Источник
Доступ в Internet минуя VPN канал (на примере)
Недавно решил следующую интересную задачу: требовалось обеспечить подключение до ресурсов на работе по защищенному каналу, при этом, использовать свой домашний интернет, а не рабочий интернет сквозь VPN соединение.
Перефразирую задачу, требуется, чтобы рабочий трафик ходил внутри VPN канала, а остальной — шел обычным путем.
У нас имеется настроенное VPN соединение (VPN активен). Подключим его и проверим параметры интерфейсов. Для этого запустим командную строку (здесь и далее, командная строка должна быть с правами администратора).
Выполним команду ipconfig
нас интересуют текущий IP-адрес локальной машины (192.168.0.164) и IP-адрес адаптера VPN соединения (192.168.112.45).
Проверим и убедимся, что у нас доступен интернет и трафик идет через VPN канал.
Для этого выполним ping 8.8.8.8 до общедоступного DNS и
tracert 8.8.8.8
Как видно, интернет есть, и он идет через IP VPN соединения по сети 192.168.112.0
Убедимся, что рабочий ресурс нам доступен, для этого выполним
ping 192.168.1.100 (это контроллер домена рабочей сети),
а также tracert 192.168.1.100
Для решения нашей задачи необходимо настроить интерфейс VPN: Свойства VPN -> Свойства TCP/IPv4 -> Дополнительно… ->
снять чек «Использовать основной шлюз в удаленной сети»
Так как соединение было активно, требуется отключить и снова включить соединение, для вступления изменений в силу, о чем нас любезно предупредят.
Теперь весь трафик, который раньше шел через VPN – будет идти так, как было бы без него. Проведем эксперимент, для этого вновь проверим доступность интернета и как идет трафик
Как видно из тестов, интернет идет через нужный нам канал, но доступ до рабочих ресурсов пропал. Нам необходимо явно добавить маршрут (маршруты), для которых необходим доступ по VPN.
Нам понадобится IP адрес шлюза VPN соединения или IP адрес, назначаемый при VPN подключении, если шлюз не известен. Для нашего примера это адрес 192.168.112.45.
Посмотрим таблицу маршрутизации введя route print
Нас интересует номер VPN интерфейса (подсвечен). Обратите внимание, что у нас отсутствуют постоянные маршруты.
Далее нам необходимо определить адрес(а) или подсеть трафик в которую необходимо направлять через VPN соединение. В нашем случае это весь трафик для рабочей сети 192.168.1.0/24., который необходимо направлять через интерфейс VPN соединения 192.168.112.45.
Пропишем постоянный маршрут:
route add 192.168.1.0 mask 255.255.255.0 192.168.112.45 if 36 -p
Здесь, параметр -p означает, что добавляемый маршрут будет сохранён (persistent). Параметр if 36 означает, что этот маршрут будет применяться только при поднятом интерфейсе 36 (т.е. при подключенном VPN, который имеет этот номер). Если не указать параметр if, то маршрут будет работать только до отключения VPN-соединения. При отключении, Windows определит, что маршрут более неприменим, и удалит его. После повторного подключения VPN, маршрут не будет активным несмотря на то, что он создан с параметром -p. Если указан параметр if, то при отключении от VPN система определит, что маршрут не следует удалять, и временно отключит его до поднятия нужного интерфейса.
192.168.1.0 — имя сети (или IP адрес) в которую мы обращаемся,
mask 255.255.255.0 — определяет маску сети или конкретный адрес,
192.168.122.45 — адрес шлюза или интерфейса, через который должен направляться трафик.
Посмотрим таблицу маршрутизации. У нас появился постоянный маршрут.
Задача решена, проверим что все работает так как задумывалось.
Интернет есть и трафик идет по обычному каналу.
Доступ до рабочих ресурсов есть и идет внутри VPN.
Подобный подход можно использовать и для настройки одновременной работе двух (или больше) сетевых карт.
Источник
Заворачиваем весь трафик локальной сети в vpn без ограничения скорости
В прошлой статье мы разбирали, как анонимизировать весь Интернет-трафик одного хоста. Теперь давайте повысим уровень безопасности, обернув всю локальную сеть VPN-ом. При этом мы избавимся от опасности выйти в интернет с еще не настроенного девайса и ассоциировать адрес своего провайдера с этим устройством.
Для этой цели можно просто настроить VPN-клиент на шлюзе, если это позволяет роутер. Но такое решение черевато последствиями в виде уменьшения скорости работы Интернета, повышенной нагрузки на роутер, к тому же некоторые клиенты отправляют весь трафик через основное соединение сразу же в случае отключения от VPN. Не стоит забывать, что даже ведущие VPN-провайдеры не могут обеспечить 100% аптайм своих серверов.
Итак, каковы наши цели:
- пропускать через VPN весь без исключения исходящий трафик
- делать это с максимально возможной скоростью
- не зависеть от временных неполадок VPN-провайдера
- максимум анонимности в Интернете
Подготовка
Нам нужен мощный роутер, способный шифровать трафик на высокой скорости. Он будет выступать в роли VPN-шлюза. Мы нашли замечательные мини-ПК на AliExpress, которые подошли под эту задачу: четырехъядерный Intel Celeron, нативная поддержка AES-CBC, AES-XTS, AES-GCM, AES-ICM и аж четыре RJ-45 порта. И по умолчанию на них была установлена pfSense. С ней и будем работать.
Если ваш Интернет-провайдер требует особой настройки соединения, вы можете взять еще два роутера и разделить доступ к интернету и локальную сеть, а между ними поставить VPN-шлюз. В другом случае, можете напрямую подключить провод провайдера к VPN-шлюзу, а за ним разместить ваш домашний роутер с локальной сетью. Первоначальная настройка Интернет-соединения на pfSense выходит за рамки этой статьи.
Настройка
Статья предполагает, что интернет подключен к первому порту, ваш ПК или домашняя сеть — ко второму, и что до настройки VPN вы смогли выйти в интернет.
Во избежание дальнейших проблем давайте авторизуемся у любимого VPN-провайдера и найдем инструкцию по настройке pfSense. Если ваш провайдер не предоставляет инструкцию по ручной настройке в pfSense, можно воспользоваться вот этой от моего любимого провайдера: www.expressvpn.com/support/vpn-setup/pfsense-with-expressvpn-openvpn — основная суть не изменится. Приведенная статья с картинками расписывает, как полностью настроить только что купленный роутер с pfSense.
Вот краткий чеклист настройки нового VPN-а:
- System — Cert. Manager — CAs. Добавляем сертификат VPN CA
- System — Cert. Manager — Certificates. Добавляем сертификат VPN сервера
- VPN — OpenVPN — Clients. Создаем нового клиента по инструкции от VPN-провайдера
- Interfaces — Assignment. Добавляем клиентов как интерфейсы
- System — Routing. Проверяем что появился шлюз.
- Firewall — NAT. Добавляем правила NAT для каждого клиента
- Firewall — Rules — LAN. Добавляем перенаправление всего трафика из сети через Gateway
- System — Routing. Для активного VPN-a в настройках шлюза указываем Monitor IP, пингом до которого будет проверяться работоспособность VPN-а
Перезагрузка VPN-ов осуществляется в Status — OpenVPN. Просмотр логов в Status — Package Logs — OpenVPN.
На этом этапе останавливаемся и проверяем, что доступ в интернет через VPN есть, и что при отключении от VPN доступ пропадает вовсе. Если интернета нет — где-то ошиблись, смотрим логи VPN, проверяем настройки заново. Если после отключения VPN трафик начинает идти через основной шлюз, значит накосячили в Firewall — Rules — LAN.
Теперь интересная часть. Если ваш провайдер выдает 20 Мбит в секунду, и то ночью — то на этом этапе вы уже получили локальную сеть, полностью закрытую VPN-ом, который работает с максимально возможной скоростью. Но что, если у вас канал пошире?
Масштабируемся
Настраиваем еще пару-тройку VPN клиентов для разных серверов по инструкции выше. Добавлять сертификаты CA и сервера не нужно, выбираем уже добавленные. Также не выполняем шаг с Firewall — Rules — LAN, его мы сделаем позже. Необходимое количество клиентов устанавливается эмпирическим путем по результатам замеров скорости через каждый отдельный сервер.
После того как завершили, у нас должна быть следующая картина:
— В VPN — OpenVPN — Clients созданы и активированы клиенты
— В Interfaces — Assignment созданы и активированы интерфейсы для каждого клиента
— В Status — OpenVPN все клиенты находятся в состоянии «up»
— В System — Routing появились шлюзы, и для них указаны пингуемые IP-адреса.
(Если не можете придумать, кого попинговать — откройте shodan.io и найдите все IP google)
Теперь зайдем в System — Routing — Gateway Groups. Нажмите Add. Укажите запоминающееся имя в Group Name.
Теперь обратите внимание на таблицу Gateway Priority. Группы шлюзов работают следующим образом: failover по уровням, балансировка внутри уровня. Столбец Tier указывает, в каком уровне будет использоваться данный шлюз. Простейший вариант — указываем все активные VPN-шлюзы в первом уровне. Вариант для медленного интернета — создаем двух клиентов и размещаем их на первом и втором уровне, но в этом случае будет только отказоустойчивость.
Ниже найдите Trigger Level. Это условие, при котором произойдет временное исключение шлюза из группы. Варианты кроме Member Down позволяют перестать отправлять пакеты шлюзу чуть раньше, чем он упадет полностью — по превышению порога потери пакетов и/или по высокому пингу. Пороги потерь и пинга задаются для каждого шлюза индивидуально в System — Routing — Gateway.
Как только выбрали удобный вариант расстановки шлюзов по уровням, нажмите Save.
Пришло время направить трафик в новую группу шлюзов. Идем в Firewall — Rules — LAN, открываем созданное ранее правило перенаправления, спускаемся до списка со шлюзами и видим в этом списке созданную нами группу. Выбираем её, сохраняем правило и применяем изменения. Всё, теперь каждое новое соединение будет идти через новый VPN-клиент в группе.
Время тестирования: открываем api.ipify.me, отключаем кэш и keep-alive, и перезагружаем страницу. Если вы единственный пользователь в сети, на каждое обновление страницы вы должны видеть новый IP адрес, отличающийся от вашего домашнего. Если вы видите один и тот же адрес, полностью обновите страницу при помощи Ctrl+F5 (Command+Shift+R на маках), или откройте новую приватную вкладку. Если не помогло — значит где-то ошиблись в настройках группы, или не сменили шлюз в правилах фаерволла.
Теперь о плохом. К сожалению, у данного решения есть небольшой трудноуловимый баг, если использовать его перед роутером локальной сети (а не коммутатором). Рано или поздно у вас отваливается один из VPN-клиентов, срабатывает исключение его из группы, и всё хорошо до того момента, пока VPN не поднимется обратно. Так как все пользователи находятся за NAT, а VPN-роутер видит только один IP-адрес и 65 тысяч портов, со временем он ассоциирует все порты с теми VPN-клиентами, которые никогда не падали. Соответственно, как только VPN-клиент поднимается, через него не идет никакой трафик. Клиент полностью жив, через него идут пинги и некоторое стабильное количество служебного трафика, но через него не идет трафик клиентов. По идее это решалось бы сбросом таблицы соединений, и для этого даже есть галочка в настройках pfSense, но в моих исследованиях эта галочка напрочь блокировала всякий доступ к роутеру, так как клиенты начинали валиться циклично, при этом роняя только-только установленные соединения с веб-интерфейсом, что сильно затрудняло исправление проблемы. Без этой галочки при наличии более двух VPN-ов они уравновешивали себя, так что доступ хотя бы через один всегда был. В конце концов я настроил в мониторинге условие «если пять минут на интерфейсе было меньше 1000 байт трафика в секунду, сообщить мне», и в особо запущенных случаях перезагружаю зомби-VPN-клиента вручную с целью сбросить таблицу соединений.
Итак, мы получили сеть, полностью пропускаемую через несколько распределенных VPN-ов. За счет сочетания нескольких разных VPN-серверов мы не зависим от доступности каждого из них в отдельности, а скорость сети ограничена только вашим каналом за вычетом шифрования. Если вдруг вам не хватит одного роутера — их тоже можно масштабировать, но это тема для отдельной статьи.
Источник