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

|

OpenVPN-channels-000.jpg

Организация VPN каналов между филиалами компании имеет большое значение в работе любого IT-специалиста. В данной статье рассматривается один из способов реализации этой задачи на основе программного продукта OpenVPN.

Ниже мы рассмотрим топологию сети, в которой будем организовывать VPN-туннель, разберем особенности конфигурирования программы OpenVPN и пошагово настроим маршрутизацию для наших офисов. Статья написана из расчета, что OpenVPN будет устанавливаться на платформы Windows 7 и Windows Server 2008.

Топология сети.

Использованная нами сетевая топология стандартна. Имеется Сеть Центрального Офиса (назовем её СЦО) и Сеть Филиала (назовем её СФ). Стоит задача соединить офисы таким образом, чтобы конечный пользовательский компьютер (далее ПК1) офиса СЦО имел доступ к общим ресурсам пользовательского компьютера (далее ПК2) СФ.

OpenVPN-channels-001v.jpg

CЦО имеет в своем составе:

  • Интернет-шлюз (назовем его ИШ1) с двумя сетевыми интерфейсами:
    • 111.111.111.111 - выдаётся провайдером, смотрит в интернет.
    • 192.168.0.1 - назначается нами, смотрит в СЦО.
  • OpenVPN Сервер (далее ОС) на котором будем поднимать OpenVPN с одним виртуальным и одним физическим интерфейсом:
    • 10.8.0.1 - адрес виртуального интерфейса (интерфейс устанавливается в процессе установки программы OpenVPN). Адрес для этого интерфейса назначается программой. Мы с вами не должны менять адрес самостоятельно из управления сетевыми адаптерами.
    • 192.168.0.2 - физический интерфейс, параметры задаются нами, смотрит в СЦО.
  • ПК1 - пользовательский компьютер 1, с сетевым интерфейсом 192.168.0.3, смотрит аналогично в СЦО.

СФ имеет в своем составе:

  • Интернет-шлюз (далее ИШ2) с двумя сетевыми интерфейсами:
    • 222.222.222.222 - выдаётся провайдером, смотрит в интернет.
    • 192.168.1.2 - назначается нами, смотрит в СФ.
  • OpenVPN Клиент (далее ОК) на котором будем поднимать OpenVPN с одним виртуальным и одним физическим интерфейсом:
    • 10.8.0.2 - адрес виртуального сетевого интерфейса (интерфейс устанавливается в процессе установки программы OpenVPN). Адрес для этого интерфейса так же назначается программой OpenVPN.
    • 192.168.1.2 - физический интерфейс, параметры задаются нами, смотрит в СФ.
  • ПК2 - пользовательский компьютер 2, с сетевым интерфейсом 192.168.1.3, смотрит в СФ.

Настраиваем OpenVPN сервер.

Теперь перейдем к самой программе, основам и особенностям её конфигурирования. OpenVPN доступен в вариантах для Linux и Windows. Вы можете скачать установочный пакет на сайте разработчика.

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

В процессе установки в систему инсталлируется виртуальный сетевой адаптер TAP-Win32 Adapter V9 и, соответственно, драйвер к нему. Этому интерфейсу программа OpenVPN как раз и будет назначать ip адрес и маску виртуальной сети OpenVPN. В нашем случае ему назначен адрес 10.8.0.1 с маской 255.255.255.0 на сервере ОС и 10.8.0.2 с аналогичной маской на клиенте ОК.

OpenVPN-channels-002.jpg

По стандарту программа устанавливается в C:\ProgramFiles\OpenVPN. В этой директории следует сразу же создать дополнительно папку keys (здесь мы будем хранить ключи аутентификации) папку ccd (здесь будут находится конфиги настроек сервера для клиента).

В директории C:\ProgramFiles\OpenVPN\sample-config представлены стандартные конфиги. Конфиги, которые мы будем создавать, должны размещаться в директории C:\Program Files\OpenVPN\config.

Настройка OpenVPN начинается с генерации ключей. Генерируемые ключи делятся на:

  • главный CertificateAuthority (CA) сертификат и ключ, используемый для подписывания каждого сертификата сервера и клиента.
  • публичный и приватный ключи для сервера и каждого (это важно) клиента отдельно.

Последовательность создания ключей следующая (названия файлов сертификатов и ключей указаны в скобках):

  • Генерируем основной CA (ca.crt) сертификат и CA (ca.key) ключ.
  • Генерируем сертификат (server.crt) и ключ (server.key) сервера.
  • Генерируем сертификат (office1.crt) и ключ (office1.key) для клиента.
  • Генерация параметров DiffieHellman (dh1024.pem).
  • Генерация ключа tls-auth (ta.key) для аутентификации пакетов.

Разберем каждый пункт более подробно.

Генерируем основной сертификат СА и СА ключ:

Заходим в Пуск - Выполнить набираем cmd, жмем OK, заходим в командную строку. Пишем:

cd C:/Program Files/OpenVPN/easy-rsa

Таким образом мы находимся в директории easy-rsa:

OpenVPN-channels-003.jpg

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

init-config

Не закрывая командную строку, зайдем в C:\ProgramFiles\OpenVpn\easy-rsa и отредактируем файл vars.bat, заполнив следующие параметры (указав, естественно, свои данные):

KEY_COUNTRY=RF
KEY_PROVINCE=MO
KEY_CITY=Malinino
KEY_ORG =Organization
KEY_EMAIL=organization@email.ru

Теперь создадим СА сертификат и СА ключ. Раскрываем командную строку, которая все это время висела где то на рабочем столе, и продолжаем вписывать команды:

vars
clean-all
build-ca

Последняя команда как раз и выполняет генерацию СА сертификата и СА ключа. В процессе создания ключа вам будут задавать вопросы, на которые вы можете отвечать просто нажатием Enter'a (тогда значения будут браться из файла vars.bat который мы редактировали выше) или же вводить свои. Стоит обратить внимание на вопрос:

Common Name (eg, your name or your server's hostname) []: OpenVPNS

Здесь вы должны задать название для сервера - в примере мы ввели OpenVPNS.

Генерируем сертификат (server.crt) и ключ (server.key) сервера.

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

build-key-server server

На вопросы отвечаем так же как в первом пункте. На вопрос:

Common Name *: server

Введем: server. На вопросы:

Sign the certificate? [y/n]

и

1 out of 1 certificate requests certified, commit? [y/n]

надо дать положительный ответ: Y.

Генерируем сертификат (office1.crt) и ключ (office1.key) для клиента.

Очевидно, что клиентов может быть много, в нашем примере он один - office1. В зависимости от количества клиентов следующая команда в командной строке выполняется несколько раз, причем названия генерируемых ключей так же меняйте:

build-key office1

если требуется еще сертификаты и ключи, скажем для второго клиента, то вводим:

build-key office2

В процессе ответа на вопросы не забывайте, что каждый клиент на вопрос CommonName должен получить уникальное имя, например: office1, office2 и т.д.

Генерация параметров DiffieHellman (dh1024.pem).

Вводим в командной строке, находят во все той же директории easy-rsa:

build-dh

Генерация ключа tls-auth (ta.key) для аутентификации пакетов

В конце создаем ключ для tls-аутификации командой:

openvpn --genkey --secret ta.key

Теперь разберемся с тем, какие файлы оставлять на сервере, а какие перенести клиенту. На сервере (OC) должны находиться в созданной нами папке keys только следующие файлы:

  • ca.crt
  • ca.key
  • dh1024.pem
  • server.crt
  • server.key
  • ta.key

OpenVPN-channels-004.jpg

На клиенте OK аналогично серверу ОС создадим так же папочку keys, там должны быть:

  • ca.crt
  • office1.crt
  • office1.key
  • ta.key

Все файлы с расширением .key являются секретными. Передавать их стоит только по защищенным каналам, лучше на физическим носителе.

Далее приступим к созданию конфига для нашего сервера ОС и клиента ОК. В директории config создаем файл со следующим названием и расширением: server.ovpn Открываем его блокнотом и начинаем писать конфиг:

Выбираем протокол для передачи данных - в данном случае upd:

proto udp

Стандартный порт для OpenVPN:

port 1194

Режим работы программы L3-туннель. В данном режиме OpenVPN - роутер:

dev tun

Режим клиент-сервер:

tls-server

Данного топология доступна с версии 2.1 и заключается в том что каждому клиенту выдается по 1 адресу, без виртуальных портов маршрутизатора:

topology subnet

Маршруты добавляются через .exe - это важно:

route-method exe

Задержка при добавлении маршрута, можно уменьшить до 5:

route-delay 10

Данная опция задает организацию сети. У нас появляется виртуальная сеть 10.8.0.0 /24. Первый адрес из этой сети, то есть 10.8.0.1 выдается серверу, последующие (10.8.0.2, 10.8.0.3 и т.д.) клиентам. DHPC сервер получает адрес 10.8.0.254:

server 10.8.0.0 255.255.255.0

Задаем шлюз в openvpn сеть:

route-gateway 10.8.0.1

Директория, в которой мы должны расположить файл с названием нашего клиента, то есть office1 без расширения, и в нем записать команды, которые будут выполнятся на клиенте:

client-config-dir "C:\\Program Files\\OpenVPN\\ccd"

Далее идут пути до файлов сертификатов и ключей сервера. Заметим, что пути обязательно пишутся с двойной чертой, а именно \\:

ca  "C:\\Program Files\\OpenVPN\\keys\\ca.crt"  
cert "C:\\Program Files\\OpenVPN\\keys\\server.crt"
key "C:\\Program Files\\OpenVPN\\keys\\server.key"
dh "C:\\Program Files\\OpenVPN\\keys\\dh1024.pem"
tls-auth "C:\\Program Files\\OpenVPN\\keys\\ta.key" 0

Задаем серверу ОС маршрут на всю сеть:

route 10.8.0.0 255.255.255.0 

Выбираем метод сжатия:

cipher BF-CBC

Задаем сжатие трафика:

comp-lzo

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

verb 1

Cервер пингует противоположную сторону с интервалом в 10 секунд и если сторона не отвечает за 60 секунд, то сервер запустит пересоединение:

keepalive 5 60

Далее переходим в директорию ccd и создаем файл, в котором будут лежать команды, посылаемые клиенту от сервера. Назвать его надо так же как мы называли самого клиента, например office1. Файл не будет иметь расширения.

OpenVPN-channels-005.jpg

Редактируем его через блокнот. Все параметры, заданные ниже, будут автоматически переданы клиенту:

Задаем ip и маску для нашего клиента office1:

ifconfig-push 10.8.0.2 255.255.255.0

Передаем ему маршрут на всю сеть:

push "route 10.8.0.0 255.255.255.0"

Задаем для него шлюз:

push "route-gateway 10.8.0.1"

Эта команда говорит серверу ОС о том, что за данным клиентом, а именно ОК (office1) находится сеть 192.168.1.0:

iroute 192.168.1.0 255.255.255.0

Таким образом, мы закончили конфигурирование сервера на стороне ОС.

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

Далее приступим к изменению параметров клиента. Зайдем на машине ОК в папку config. Создадим в ней файл office1.ovpn Приступим к его редактированию, ряд опций повторяет аналогичные на сервере, поэтому мы их пояснять не будем:

dev tun
proto udp
port 1194

Указываем внешний адрес ИШ1:

remote 111.111.111.111

Клиент будет в работать в режиме тлс-клиента:

tls-client 

Эта опция защищает от подмены сервера третьим лицом:

remote-cert-tls server

Эти опции аналогичны серверу:

route-method exe
route-delay 10

Задаем маршрут к сети 192.168.0.0:

route 192.168.0.0 255.255.255.0

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

pull

Пути к ключам:

ca "C:\\Program Files\\OpenVPN\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\keys\\office1.crt"
key "C:\\Program Files\\OpenVPN\\keys\\office1.key"
tls-auth "C:\\Program Files\\OpenVPN\\keys\\ta.key" 1

Остальные опции также аналогичны серверу:

cipher BF-CBC
comp-lzo
verb 1
keepalive 5 60

На этом настройка программы на стороне клиента ОК закончена.

Настройка брандмауэра и маршрутизация.

И так, мы имеем настроенные конфиги на ОК и на ОС. Теперь разберем очень важные моменты. Заранее оговоримся, если вы использует KIS 2011 или подобные антивирусные программы, то в настройках сетевого экрана следует разрешить прохождение ICMP пакетов. Это позволит беспрепятственно пинговать хосты в наших сетях.

OpenVPN-channels-006.jpg

Так же стоит добавить наш виртуальный интерфейс программы OpenVPN в список доверенных сетей.

OpenVPN-channels-007.jpg

На ИШ1 должны быть проделаны следующие действия:

  • Настроено перенаправление порта 1194 протокола UDP с интерфейса 111.111.111.111 на интерфейс сервер ОС 192.168.0.2
  • В файерволе должна быть разрешена передача по порту 1194 протокола UDP, иначе пинг не будет проходить даже между ОС и ОК.

На ИШ2 надо предпринять аналогичные действия:

  • Настроить перенаправление порта 1194 протокола UDP с интерфейса 222.222.222.222 на интерфейс клиента ОК 192.168.1.2
  • Проверить, открыт ли порт 1194 протокола UDP в файерволе.

В Usergate 5.2, к примеру, настройка форвардинга пакетов по порту 1194 протокола UDP выглядит так:

OpenVPN-channels-008.jpg

На этом этапе мы уже пингуем ОК и ОС по их OpenVPN адресам, то есть 10.8.0.1 и 10.8.0.2. Далее нам необходимо обеспечить правильный маршрут пакетов с клиента ОК до удаленной сети 192.168.0.0. Делаем это одним из нескольких способов:

Либо задаем постоянный маршрут до этой сети на самом клиенте ОК:

route  -p add 192.168.0.0 mask 255.255.255.0 10.8.0.1

Либо задаем этот маршрут в ccd конфиге клиента на сервер, а именно в файле office1 допишем:

push "route 192.168.0.0 255.255.255.0"

Так же это можно сделать, добавив строку напрямую в конфиг клиента ОК:

route 192.168.0.0 255.255.255.0

Но мы бы не рекомендовали загружать его, а делать все на стороне сервера.

Затем необходимо обеспечить маршрут пакетов с сервера ОС до удаленной сети 192.168.1.0. делается это аналогично варианту выше за несколькими исключениями.

Добавляем команду в конфиг сервера ОС:

route 192.168.1.0 255.255.255.0 10.8.0.2 

или же добавляем команду непосредственно в командной строке:

route -p add 192.168.1.0 mask 255.255.255.0 10.8.0.2

Так же необходимо на сервере ОС и клиенте ОК включить в службах службу Маршрутизации и удаленного доступа, таким образом обеспечив маршрутизацию на внутреннюю сеть (форвардинг). Без этого внутренние адреса в сетях СЦО И СФ клиента ОК и сервера ОС не будут пинговаться.

OpenVPN-channels-009.jpg

На этом этапе мы уже свободно можем пинговать внутренние адреса наших ОС и ОК, т.е. набирая на сервере ОС ping 192.168.1.2 и на клиенте ОК ping 192.168.0.2 мы получаем положительный результат в виде:

OpenVPN-channels-010.jpg

Таким образом ОК и ОС взаимно пингуются по своим OpenVPN и внутренним СЦО и СФ адресам. Дальше нам надо прописать маршрут в командной строке в сеть 10.8.0.0 на наших ПК1 и ПК2. Делается это следующими командами:

Для ПК1:

route -p add 192.168.1.0 mask 255.255.255.0 192.168.0.2

Для ПК2:

route -p add 192.168.0.0 mask 255.255.255.0 192.168.1.2

В результате расшаренные ресурсы в ПК1 и ПК2 будут доступны по их внутрисетевому адресу:

OpenVPN-channels-011.jpg

Дополнительные материалы:


  1. Настраиваем VPN сервер. Часть 1 - Общие вопросы
  2. Настраиваем VPN сервер. Часть 2 - Маршрутизация и структура сети
  3. Настраиваем VPN сервер. Часть 3 - PPTP. Платформа Linux
  4. Настраиваем VPN сервер. Часть 4 - PPTP. Платформа Windows
  5. Настраиваем VPN сервер. Часть 5 - L2TP. Платформа Windows
  6. Ubuntu Server. Форвардинг PPTP средствами iptables
  7. Организация VPN каналов между офисами при помощи OpenVPN
  8. Организация каналов между офисами при помощи OpenVPN с дополнительной парольной защитой
  9. Организация VPN каналов между офисами. Маршрутизация
  10. Организация каналов между офисами при помощи OpenVPN на платформе Linux
  11. Почему тормозит OpenVPN? Размер буферов приема и отправки
  12. SSH-туннели на службе системного администратора

 

Подписка на блог

Наш канал на YouTube Мы в Твиттере

Архивы по месяцам

Реклама

Статистика

 

Яндекс.Метрика

География

Flag Counter

Реклама

Об этой записи

Сообщение опубликовано 29.09.2011 21:09. Автор — Есартия Р.Б..

Предыдущая запись — Windows 8 - первые впечатления.

Следующая запись — Админу на заметку - 3. Полезные инструменты для диагностики ПК.

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Реклама

Облако тегов