Содержание
Привет всем!
Привет всем. Хочу поделиться простой вещью, как для 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 является шлюзом сети и когда она установлена на одном из узлов, что требует разной настройки маршрутизации.
Рассмотрим первый случай. Так как 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 нужен исключительно для работы центра сертификации и не должен никуда копироваться или передаваться, особенно по незащищенным каналам.
Закончив с центром сертификации перейдем к формированию ключей и сертификатов сервера. Но сначала создадим файл параметров Диффи-Хеллмана. Данный алгоритм шифрования используется для обеспечения режима прямой секретности, которая сводится к тому, что даже если злоумышленник получит ключи, то он не сможет расшифровать перехваченные ранее данные, так как они зашифрованы с уникальным сеансовым ключом, который нигде не сохраняется.
Результатом выполнения данной команды будет появление в директории с ключами файла 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 и загрузим переменные (если вы создаете клиентские ключи одновременно с серверными, то повторно загружать переменные не нужно).
Выполним генерацию клиентских ключей и сертификатов командой:
где 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