Как игнорировать изменение шлюза OpenVPN на стороне клиента
После поднятия защищенного канала OpenVPN весь клиентский трафик как правило идёт через него. На этапе установки соединения OpenVPN-сервер изменяет на клиенте шлюз по умолчанию, оправляя ему команду push "redirect-gateway". В этом нет никакой ошибки и в большинстве случаев, подобная настройка на стороне сервера вполне логична, да и пользователю не нужно вручную прописывать маршруты и весь трафик получается защищённым.
Но, допустим, что мы просто хотим предоставить удалённым пользователям возможность работы с ресурсами внутри сети. Зачем гонять весь трафик через защищённое соединение, когда требуется только доступ к терминальному серверу или сетевому принтеру? Пусть спокойно лазят в интернете и качают торренты, используя собственное подключение, а защищённый канал используется исключительно по прямому назначению, не тратя драгоценных ресурсов на обработку лишней информации.
На стороне OpenVPN сервера, за переопределение шлюза и DNS сервера у клиента отвечают следующие строки конфигурационного файла:
push "redirect-gateway def1" push "dhcp-option DNS 8.8.8.8"
А как быть в случае, если нельзя поправить конфигурацию сервера? На самом деле, разработчиками предусмотрена возможность игнорировать правила redirect-gateway OpenVPN-сервера со стороны клиента (ссылка на страницу wiki IgnoreRedirectGateway)
Достаточно в конфигурационном файле клиента отфильтровать нужную опцию, указав её в качестве аргумента для pull-filter. Опция фильтрации параметров доступна начиная с версии 2.4 и выше и может использоваться только на клиентах. Для более старых версий OpenVPN следует воспользоваться другим методом, описание которого можно найти перейдя по ссылке чуть выше.
Чтобы игнорировать изменение шлюза OpenVPN в конфигурационный файл клиента добавляем такую строку:
pull-filter ignore redirect-gateway
То был конкретный пример из моего конфига, а вообще функция фильтрации параметров, полученных с сервера, выглядит так:
--pull-filter accept|ignore|reject текст
Флаг действия accept разрешает опцию, ignore удаляет ее, а
--pull-filter ignore "route"
Удаляет все push-опции, содержащие текст route, в том числе и route-gateway. Если в тексте параметра присутствует пробел, его следует заключать в кавычки:
--pull-filter accept "route 192.168.1."
--pull-filter ignore "route "
Будут удалены все маршруты, которые не начинаются с 192.168.1. Таким же образом можно отказаться от переназначения DNS-серверов при подключении к OpenVPN:
pull-filter ignore "dhcp-option DNS"
Стоит также обратить внимание, что
ПыСы: ну и раз мы отказались от предложенного сервером маршрута по умолчанию, то на клиенте можно прописать недостающие маршруты из удалённой сети (если таковые требуются). Делается это просто:
route 192.168.10.0 255.255.255.0
Комментариев: 3
Спасибо за информацию
Подскажите, как мне сделать игнорирование ssh подключений. Что бы я могу подключаться к удаленному серверу на котором работает OpneVPN, но VPN не распространялся на ssh подключения к серверу?
жЕНЯ это проблема не впн, а маршрутизации. раз у тебя сменился дефолтный шлюз. нужно просто добавить маршрут до той сети откуда ты хочешь подключаться по