OpenVPN Client

Для ОС Windows
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 806
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 34 раза
Контактная информация:

OpenVPN Client

Сообщение Артём Мамзиков »

OpenVPN Client на роутере Keenetic
Мониторинг OpenVPN-Zabbix

Как сделать так чтобы основной трафик шел через обычное подключение интернет, а некоторые ресурсы через Open-VPN
Разные поисковые запросы на эту тему которые попадались:
Как настроить OpenVPN, чтобы использовался только для определенного адреса?
Как через OpenVPN направлять трафик только для одного домена?
Как отключить маршрутизацию всего сетевого трафика через OpenVPN?
OpenVPN. Клиент добавляет маршруты из-за этого нет интернета
Как игнорировать изменение шлюза OpenVPN на стороне клиента


1. Первый способ это средствами Windows
Самое простое в подключение VPN убрать галку использование шлюза
Отключение шлюза
Отключение шлюза
Но на подключении OpenVPN такой галочки нет
Отключение шлюза Галки нет
Отключение шлюза Галки нет
При помощи команды route add
Даже была попытка сделать автоматический скрипт с подстановкой IP шлюза, Маски подсети и выполнение маршрута для определенного IP
Пример не доделанного скрипта на bat

Код: Выделить всё

::@ECHO OFF
mode con:cols=130 lines=1000
color 1A

:: Получим список интерфейсов в переменную
::setlocal enabledelayedexpansion
::set "n=&echo."
::for /f "tokens=*" %%a in ('ipconfig /all') do set INTR=!INTR!%n%%%a
::setlocal DISABLEDELAYEDEXPANSION
::echo %INTR%

ipconfig /all > "%~dp0INTR.TXT"
::attrib +h "%~dp0INTR.TXT"

:: Выведем блок только для интерфейса TAP-Windows OpenVPN
:: Выставляем нужное число строк для вывода после искомой:
set k=5
:: Получим общее кол-во строк
::for /f %%i in ('ipconfig /all^|find /c /v ""') do set l=%%i
for /f %%i in ('find /c /v ""^<"%~dp0INTR.TXT"') do set l=%%i
(
    for /l %%i in (1 1 %l%) do (
        set string= 
        set /p string=
::       call set /p="%%string%%"<nul| findstr /x /c:"TAP-Windows" /c:"OpenVPN"&& set m=%%i
		call set /p="%%string%%"<nul| findstr /r /c:"OpenVPN"&& set m=%%i
        for /l %%j in (1 1 %k%) do (
            if defined m (
                set /a n=m+%%j
                call echo %%n%%| findstr /x %%i>nul&& if defined string (
                    call set /p="%%string%%"<nul
                    echo.
                )
            )
        )
    )
)<"%~dp0INTR.TXT">"%~dp0INTRnew.TXT"

::Удаление старого файла
::del /F /Q /A:H "%~dp0INTR.TXT"

@rem Получить номер интерфейса по имени драйвера
set IF=
for /f "tokens=1,8 delims=. " %%A in ('route print') do @if /i "%%B" equ "TAP-Windows" set IF=%%A
::echo %IF%
@rem Если интерфейс не найден, завершите работу тихо
if not defined IF exit /b
::for %%A in (1 2 4 8 16 32 64 128) do echo delete %%A.0.0.0
:: Добавляем маршруты (route -p add сохранить после перезагрузки)
:: route [-f] [-p] [-4|-6] команда [ip-назначения] [MASK маска] [шлюз] [METRIC метрика] [IF интерфейс]
::route add 192.168.175.0 mask 255.255.255.0 0.0.0.0 IF %IF%

::route add 0.0.0.0 mask 128.0.0.0 172.27.248.1 if 9
::route add 128.0.0.0 mask 128.0.0.0 172.27.248.1 if 9
:: адрес сети, или адрес 0.0.0.0 используемый для шлюза по умолчанию ( Default Gateway ). Это конечная точка маршрута
::route add 142.37.248.0 mask 255.255.252.0 0.0.0.0 if 9
::route add 142.37.248.32 mask 255.255.255.0 0.0.0.0 if 9
адрес сети, или адрес 0.0.0.0 используемый для шлюза по умолчанию ( Default Gateway ). Это конечная точка маршрута
ROUTE [-f] [-p] [-4|-6] command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]
route -p add 192.168.175.0 mask 255.255.255.0 192.168.112.45 if 9
route add 192.168.175.0 mask 255.255.255.0 0.0.0.0 if 9
route print

route add 0.0.0.0 mask 128.0.0.0 182.57.248.1 if 9
route add 128.0.0.0 mask 128.0.0.0 182.57.248.1 if 9



2. Способ при помощи файла конфигурации на стороне клиента указания маршрута
Client-conf.ovpn

Код: Выделить всё

cipher AES-256-CBC
setenv FORWARD_COMPATIBLE 1
client
server-poll-timeout 4
nobind
route-method exe
route-delay 5
ip-win32 netsh
remote DNS.ru 1161 tcp
#remote DNS.ru 1194 udp
# Чтобы игнорировать изменение шлюза OpenVPN
#pull-filter ignore redirect-gateway
#pull-filter ignore "route-gateway"
# Игнорировать все маршруты
route-nopull
route 192.168.20.0 255.255.255.0
route 192.168.30.0 255.255.255.0
route 192.168.331.0 255.255.255.0
route 192.168.302.0 255.255.255.0
route 192.168.403.0 255.255.255.0
route 192.168.504.0 255.255.255.0
#route-noexec
# Отказаться от переназначения DNS-серверов при подключении к OpenVPN:
#pull-filter ignore "dhcp-option DNS"
#pull-filter ignore "route"
dev tun
dev-type tun
ns-cert-type server
setenv opt tls-version-min 1.0 or-highest
reneg-sec 604800
sndbuf 0
rcvbuf 0
auth-user-pass
static-challenge "Enter Google Authenticator Code" 1
# NOTE: LZO commands are pushed by the Access Server at connect time.
# NOTE: The below line doesn't disable LZO.
comp-lzo no
verb 3
setenv PUSH_PEER_INFO

<ca>
-----BEGIN CERTIFICATE-----
блок серта
-----END CERTIFICATE-----
</ca>
блок серта
<cert>
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
Ключ
-----END PRIVATE KEY-----
</key>

key-direction 1
<tls-auth>

-----BEGIN OpenVPN Static key V1-----

-----END OpenVPN Static key V1-----
</tls-auth>


Игнорирование шлюза перенаправления
Если вы используете OpenVPN в качестве клиента, а используемый вами сервер использует push «redirect-gateway», тогда ваш клиент перенаправляет весь интернет-трафик через VPN. Иногда клиенты этого не хотят, но не могут изменить конфигурацию сервера.
На этой странице объясняется, как переопределить шлюз перенаправления, чтобы клиенту не нужно было перенаправлять Интернет, даже если сервер говорит об этом.

Способ 1: отфильтровать нажатую опцию
--pull-filter ignore redirect-gateway

Способ 2: игнорировать
Есть 2 варианта, которые можно использовать для игнорирования маршрутов, проталкиваемых сервером:
--route-noexec
Не добавляйте и не удаляйте маршруты автоматически.
Вместо этого передавайте маршруты сценарию --route-up, используя переменные окружения.
--route-nopull
При использовании с --client или --pull принимать параметры, передаваемые сервером, ЗА ИСКЛЮЧЕНИЕМ маршрутов и параметров dhcp, таких как DNS-серверы.
При использовании на клиенте этот параметр эффективно запрещает серверу добавлять маршруты в таблицу маршрутизации клиента, однако обратите внимание, что этот параметр по-прежнему позволяет серверу устанавливать свойства TCP/IP интерфейса TUN/TAP клиента.

Способ 3: переопределить
Здесь мы просто добавим маршруты, которые переопределяют --redirect-gateway.
Это будет работать так же, как работает флаг def1 для --redirect-gateway.
Это может отличаться, если сервер использует флаг def1 для параметра --redirect-gateway или нет (путем проверки журнала при подключении).
Обратите внимание, что net_gateway — это внутренняя переменная openvpn, и ее не нужно ни на что менять.
Если вы не знаете, использует ли ваш сервер def1, и не хотите проверять журналы, чтобы выяснить это, просто предположите, что они ДЕЙСТВИТЕЛЬНО используют def1 и используют 4 маршрута.
Это сработает несмотря ни на что.

def1 — используйте этот флаг, чтобы переопределить шлюз по умолчанию, используя 0.0.0.0/1 и 128.0.0.0/1, а не 0.0.0.0/0.
Преимущество этого заключается в переопределении, но не в уничтожении исходного шлюза по умолчанию.
Если сервер НЕ использует def1, добавьте следующие параметры в конфигурацию клиентов:
route 0.0.0.0 128.0.0.0 net_gateway
route 128.0.0.0 128.0.0.0 net_gateway

Если сервер ДЕЙСТВИТЕЛЬНО использует def1 или вы не знаете, добавьте следующие параметры в конфигурацию клиентов:
route 0.0.0.0 192.0.0.0 net_gateway
route 64.0.0.0 192.0.0.0 net_gateway
route 128.0.0.0 192.0.0.0 net_gateway
route 192.0.0.0 192.0.0.0 net_gateway




--pull-filter ignore redirect-gateway
Вы можете либо поместить его в конфиг (без --), либо использовать при запуске openvpn (например: openvpn --config path/to/config --pull-filter ignore redirect-gateway

redirect-gateway убедитесь, что в конфигурации вашего клиента нет строк
добавьте следующую строку, чтобы отфильтровать любые redirect-gateway настройки, полученные с VPN-сервера:

Чтобы игнорировать изменение шлюза OpenVPN в конфигурационный файл клиента добавляем такую строку:
pull-filter ignore redirect-gateway
pull-filter ignore "route-gateway"
route-nopull
То был конкретный пример из моего конфига, а вообще функция фильтрации параметров, полученных с сервера, выглядит так:

--pull-filter accept|ignore|reject текст
Флаг действия accept разрешает опцию, ignore удаляет ее, а reject помечает как ошибочную и запускает SIGUSR1.
Фильтры могут вызываться несколько раз и применяются в указанном порядке. Несколько примеров:

--pull-filter ignore "route"
Удаляет все push-опции, содержащие текст route, в том числе и route-gateway.
Если в тексте параметра присутствует пробел, его следует заключать в кавычки:

--pull-filter accept "route 192.168.1."
--pull-filter ignore "route "
Будут удалены все маршруты, которые не начинаются с 192.168.1.

параметр route-nopull отбирает у клиента разрешение на установку маршрутов, передаваемых сервером, фактически говоря анализатору параметров «нет, этот параметр здесь недействителен».
используя вместо этого pull-filter:
pull-filter ignore "route"

Таким же образом можно отказаться от переназначения DNS-серверов при подключении к OpenVPN:

pull-filter ignore "dhcp-option DNS"
Стоит также обратить внимание, что reject может привести к повторному подключению, поэтому для игнорирования параметра, переданного сервером лучше использовать команду ignore.

Игнорировать все маршруты с route-noexec или route-nopull

ПыСы: ну и раз мы отказались от предложенного сервером маршрута по умолчанию,
то на клиенте можно прописать недостающие маршруты из удалённой сети (если таковые требуются). Делается это просто:

route 192.168.10.0 255.255.255.0


Пример
pull-filter ignore "route-gateway"
route-method exe
route-delay 2
allow-pull-fqdn
route <some subnet IP> <subnet mask> <gateway IP>
route <other subnet IP> <subnet mask> <gateway IP>
количество слов: 889

Вернуться в «Windows»