1. Главная страница » Компьютеры » Openvpn маршрутизация между сетями

Openvpn маршрутизация между сетями

Автор: | 16.12.2019

Привет всем!

Привет всем. Хочу поделиться простой вещью, как для Windows клиентов в конфиге OpenVPN прописать сети, которые находятся за OpenVPN сервером. Если кратко, то вот она заветная строчка:

А теперь давайте по подробнее. Итак, давайте представим ситуацию, что у нас есть некий офис, внутри которого есть сеть, к примеру 192.168.170.0/24. В офисе OpenVPN сервер поднят на Mikrotik, который в свою очередь знает о нужной нам сети 192.168.170.0/24. И вот для этого нам поможет вышеуказанная строчка. Эту строчку можно прочитать так: о сети 192.168.170.0 с маской 255.255.255.0 знает роутер с ip адресом 10.0.0.1. И поэтому, если хочешь попасть в сеть 192.168.170.0, то иди через роутер 10.0.0.1. В свою очередь ip адрес 10.0.0.1 будет принадлежать серверу OpenVPN на Mikrotik. Кстати, очень важно, что бы параметр redirect-gateway def1 был закомментирован, иначе тогда весь трафик пойдёт через OpenVPN сервер.

Давайте я приведу конфиг, который 100% работает на Windows 10 с последним клиентом OpenVPN. Подключение производиться к OpenVPN серверу на Mikrotik.

Вот собственно и всё. После подключения можно проверить, добавился ли маршрут. Запускаем командную строку и в ней пишем команду

И смотрим таблицу маршрутизации. Если наш маршрут добавился, то всё работает правильно.

Технический блог специалистов ООО"Интерфейс"

  • Главная
  • Организация каналов между офисами при помощи OpenVPN на платформе Linux

Организация каналов между офисами при помощи OpenVPN на платформе Linux

  • Автор: Уваров А.С.
  • 03.09.2016

Так уж получилось, что за все время существования нашего ресурса мы ни разу не обращались к теме OpenVPN на платформе Linux. Несмотря на то, что это кроссплатформенный продукт, наши публикации, а точнее публикации наших авторов затрагивали только Windows платформу, поэтому мы решили устранить этот досадный недостаток и заодно самостоятельно проработать данную тему. Кроме того, данный материал, как и все наши материалы, органично связан с другими публикациями, что позволит легко вписать данный сервис в инфраструктуру созданную на основе наших статей.

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

Следует понимать, что OpenVPN не накладывает каких-либо ограничений на платформы для работы сервера и клиентов, вы можете без проблем объединить в единую сеть устройства с разными ОС и аппаратными платформами и все это будет работать.

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

Схема сети и маршрутизация

Мы специально не стали разворачивать для OpenVPN отдельную конфигурацию в наше лаборатории, а воспользовались уже существующими виртуальными машинами. В качестве сервера центрального офиса мы использовали роутер на базе Ubunutu Server 14.04 LTS, за которым находится сеть 192.168.31.0/24, в которой находится рабочая станция под управлением Windows 10. В филиале OpenVPN установлен на сервер с Debian 8, который принадлежит сети 192.168.18.0/24, в которой находится рабочая станция с Windows 8.1 и которая выходит в интернет через простой роутер начального уровня.

Таким образом мы реализовали два основных варианта, когда машина с OpenVPN является шлюзом сети и когда она установлена на одном из узлов, что требует разной настройки маршрутизации.

Читайте также:  Poimel info заблокировали как зайти

Рассмотрим первый случай. Так как OpenVPN находится на шлюзе сети, то каких-либо дополнительных настроек маршрутизации нам делать не надо, все пакеты, не принадлежащие локальной сети, все равно будут отправлены шлюзу, а задачу их маршрутизации на самом шлюзе мы возложим на OpenVPN. В частности, нам нужно будет отправить пакеты к сети 192.168.18.0/24 на другой конец туннеля.

В случае, когда OpenVPN расположен на одном из узлов сети ситуация несколько иная. Так, например, пакеты к сети 192.168.31.0/24 будут также направлены шлюзу, который их просто отбросит, так как диапазоны частных сетей ("серые" IP) не маршрутизируются. Поэтому нам потребуется явно задать маршрут к OpenVPN, который передаст эти пакеты дальше, согласно собственных настроек маршрутизации, а именно OpenVPN серверу. Это можно сделать, прописав соответствующий маршрут на роутере сети, либо, если роутер не позволяет этого сделать, непосредственно на каждой рабочей станции.

В нашем случае потребуется маршрут (на роутере или на клиентах):

который будет направлять все пакеты к сети 192.168.31.0 узлу с установленным OpenVPN, дальнейшая маршрутизация на другой конец туннеля будет выполняться также силами OpenVPN.

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

Настройка сервера OpenVPN

Прежде всего установим необходимые пакеты:

Пакет easy-rsa предназначен для создания и управления сертификатами и по сути представляет собой автономный центр сертификации (CA), поэтом следует принять меры по недопущению доступа сторонних лиц к закрытым ключам CA. В тоже время мы считаем избыточными советы по выносу центра сертификации на отдельный хост, в небольших сетях это может оказаться более небезопасно, чем размещение на роутере, к которому имеет доступ только администратор.

Скопируем рабочую директорию easy-rsa в папку с настройками OpenVPN:

В своей работе easy-rsa использует библиотеку openssl и содержит конфигурационные файлы для разных версий библиотеки. В современных системах повсеместно используется openssl-1.0.x поэтому сразу делаем символическую ссылку на нужный конфигурационный файл:

Теперь откроем файл /etc/openvpn/easy-rsa/vars и отредактируем в нем следующие строки, указав собственные учетные данные, например, так:

Сохраним файл и перейдем к созданию собственного CA, для этого перейдем в директорию easy-rsa и загрузим переменные:

Затем произведем очистку и инициализацию нашего центра сертификации:

Первая команда произведет полную очистку рабочей директории с ключами и служебными файлами и ее случайное выполнение на работающем CA приведет к его уничтожению. Вторая команда создаст комплект из открытого и закрытого ключей центра сертификации.

В процессе создания ключа вы будете получать вопросы, ответы по умолчанию на которые содержатся в квадратных скобках и основаны на ваших данных из файла vars, поэтому просто подтверждаем их нажатием Enter (или вводим свои значения).

После выполнения данной операции в папке /etc/openvpn/easy-rsa/keys появятся файлы ca.crt и ca.key. Первый является сертификатом с публичным ключом и должен присутствовать на всех узлах OpenVPN сети, а файл с расширением .key — закрытый (приватный) ключ и доступ к нему должен быть ограничен. Файл ca.key нужен исключительно для работы центра сертификации и не должен никуда копироваться или передаваться, особенно по незащищенным каналам.

Закончив с центром сертификации перейдем к формированию ключей и сертификатов сервера. Но сначала создадим файл параметров Диффи-Хеллмана. Данный алгоритм шифрования используется для обеспечения режима прямой секретности, которая сводится к тому, что даже если злоумышленник получит ключи, то он не сможет расшифровать перехваченные ранее данные, так как они зашифрованы с уникальным сеансовым ключом, который нигде не сохраняется.

Читайте также:  Lamborghini aventador максимальная скорость

Результатом выполнения данной команды будет появление в директории с ключами файла dh2048.pem, который нужен только серверу, но в тоже время секретным он не является.

Наконец сформируем ключи собственно для сервера:

где server — имя ключа и сертификата сервера, мы рекомендуем давать осмысленные названия, например, по имени узла, чтобы потом не пришлось гадать, для какого именно сервера или клиента предназначен тот или иной сертификат или ключ.

В процессе генерации вам также придется подтвердить параметры из файла vars, либо указать свои, в конце вы получите два вопроса о подписи и выпуске сертификата, на оба отвечаем утвердительно.

Теперь перейдем к настройке самого OpenVPN. Прежде всего создадим директорию для хранения ключей, несмотря на то, что можно указать пути к папке с ключами easy-rsa, мы все-таки советуем хранить серверные ключи отдельно.

Перейдем в папку с ключами easy-rsa и скопируем необходимые ключи и сертификаты:

Затем распакуем и скопируем в /etc/openvpn шаблон файла конфигурации:

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

Откроем данный файл (/etc/openvpn/server.conf) и перейдем к его редактированию, если не указано иное, то приведенные ниже опции следует найти и привести к указанному виду, при необходимости раскомментировав. Опции перечислены в порядке их следования в файле.

Данные опции установлены по умолчанию и задают порт, протокол и тип туннеля, менять их не следует, однако на плохих каналах иногда имеет смысл использовать протокол tcp. Ниже добавим опцию, указывающую топологию создаваемой VPN-сети:

Затем найдем и откорректируем пути к ключам и сертификатам:

Синтаксис конфигурационного файла допускает указание относительных путей, в этом случае корневой будет считаться папка /etc/openvpn.

Зададим диапазон OpenVPN сети:

Следующая опция указывает файл для хранения выданных клиентам IP-адресов, так как OpenVPN прекрасно умеет назначать адреса мы не видим смысла делать это вручную:

Укажем путь к директории с конфигурационными файлами, выполняемыми при подключении клиента:

Затем перейдем к настройкам маршрутизации. Прежде всего укажем шлюз по умолчанию для OpenVPN сети, которым должен являться сервер:

Зададим маршрут к клиентской сети, если сетей несколько — то строк тоже должно быть несколько. Данная опция указывает OpenVPN при запуске создать маршруты в системе для указанных подсетей для направления предназначенных им пакетов в туннель.

Передадим всем клиентам аналогичную команду, но для сети за сервером:

Установим параметры проверки активности:

Данная опция устанавливает интервал проверки узла (10 сек) и время после которого, при отсутствии ответа, клиент считается неактивным.

Укажем тип применяемого шифрования, на выбор предлагается три вида шифра, но Triple-DES имеет самые большие накладные расходы, поэтому выбирать следует между Blowfish и AES. Однозначно дать рекомендации здесь трудно, но следует учитывать, что AES де-факто является промышленным стандартом и аппаратно поддерживается в процессорах Intel.

В целях безопасности понизим права запущенного сервера:

При этом обязательно проконтролируйте наличие следующих опций, которые обеспечивают правильную работу с ресурсами после понижения прав:

Укажем расположение логов:

Следующие опции задают подробность лога и количество повторяющихся в логе сообщений:

Для отладки проблем с подключением уровень лога следует поднять до 5-6.

На этом настройка сервера закончена, сохраняем файл конфигурации и создаем директорию для конфигураций клиентов, иначе получите ошибку при запуске службы:

Теперь можно попробовать запустить сервер:

Убедимся в наличии сетевого интерфейса туннеля командой

И проверим таблицу маршрутизации:

Как видим — необходимые маршруты добавлены автоматически.

Настройка клиента OpenVPN

Настройка клиента начинается на сервере с генерации ключевой пары. Для этого снова перейдем в директорию easy-rsa и загрузим переменные (если вы создаете клиентские ключи одновременно с серверными, то повторно загружать переменные не нужно).

Читайте также:  Ddr2 kingston kvr800d2n6 2g

Выполним генерацию клиентских ключей и сертификатов командой:

где client1 — имя ключа и сертификата.

На компьютер клиента нам нужно передать ca.crt, client1.crt и client1.key, последний файл является секретным и не должен передаваться в открытом виде по незащищенным каналам.

Также создадим в папке ccd файл с инструкциями для клиента, которые будут выполнены при его подключении. Имя файла должно совпадать с именем сертификата клиента, точнее с полем CN в нем, если вы не меняли это поле при создании ключевой пары оно будет соответствовать имени файла сертификата.

Откроем этот файл и внесем в него строки:

Данная команда создает маршрут в OpenVPN сети, направляя пакеты предназначенные сети 192.168.18.0 на внутренний адрес данного клиента. В таблице маршрутов ОС данный маршрут не отображается, но без него маршрутизация в OpenVPN сети правильно работать не будет.

Теперь, взяв с собой необходимые ключи и сертификаты, переместимся на клиентский компьютер. В нашем случае это сервер с установленным Debian 8.

Установим необходимые пакеты:

Создадим директорию для ключей и разместим в ней ключи и сертификаты:

Скопируем файл с шаблоном конфигурации клиента:

И перейдем к его редактированию:

Данные опции задают режим — клиент, тип туннеля и протокол, последние должны совпадать с указанными на сервере.

Затем укажем адрес и порт нашего сервера:

Вместо доменного имени можно указывать IP-адрес, например, так:

Следующая опция предписывает бесконечное число попыток разрешить доменное имя сервера OpenVPN, рекомендуется для клиентов с нестабильным подключением к сети.

Понижаем права службы после запуска (если конфигурационный файл предназначен для Windows-машин данные опции не нужны):

Обязательно проверяем наличие:

Указываем расположение ключей и сертификатов:

Следующая опция предотвращает потенциальные атаки класса "человек посередине":

Затем укажем тип шифрования, он должен совпадать с тем, что вы указали на сервере:

Задаем расположение логов и их детализацию:

Сохраняем файл конфигурации и запускаем службу с явным указанием клиента, в противном случае будет выполнена попытка найти и запустить конфиг сервера:

Также убеждаемся в том, что туннельный интерфейс создался и необходимые маршруты добавлены:

На скриншоте выше несложно заметить маршрут в сеть 192.168.31.0 через туннель, но так как данный компьютер не является шлюзом сети, то нам нужно будет добавить на шлюзе или клиентских ПК маршрут к сети 192.168.31.0 через локальный адрес данного компьютера, о чем мы говорили в начале статьи.

Например, мы добавили такой маршрут на клиентском ПК c Windows 8.1:

После чего без каких-либо проблем смогли получить доступ к компьютерам в сети офиса (добавленный вручную маршрут мы выделили на скриншоте).

А также в обратном направлении.

Обратите внимание, что в этом случае никаких дополнительных маршрутов к сети 192.168.18.0 на клиентском ПК прописывать нет необходимости.

Есть VDS c Ubuntu server на котором поднят OpenVPN. К нему всегда подключен рабочий компьютер из офиса и домашний ноутбук.

Как сделать так, что бы из внутренней домашней сети можно было напрямую достучаться во внутреннюю офисную сеть?

Нужно что бы рабочий клиент мог достучаться на сервер из офиса c домашнего ноута. Сейчас что бы поработать из дома, я по RDP захожу на рабочий компьютер и с него работю. Но чувствую что можно что-то поднастоить и работать нормально с ноутбука.

В офисе маска сети 192.168.1.0/255.255.255.0.
Дома маска сети 192.168.2.0/255.255.255.0
Маска сети OpenVPN 10.0.0.0/255.255.255.0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *