Заметки сисадмина » OpenVPN для семейства операционных систем Microsoft Windows 2000/XP/2003

Заметки сисадмина о интересных вещах из мира IT, инструкции и рецензии. Настраиваем Компьютеры/Сервера/1С/SIP-телефонию в Москве

OpenVPN для семейства операционных систем Microsoft Windows 2000/XP/2003

2012-02-21 · Posted in OpenVPN

В семейство серверных операционных систем Windows 2000/2003 входит компонент, позволяющий организовать безопасный канал передачи данных между удаленными подразделениями …. Копнем глубже!

В семейство серверных операционных систем Windows 2000/2003 входит компонент, позволяющий организовать безопасный канал передачи данных между удаленными подразделениями, либо просто для удаленного доступа в сеть офиса сотрудников компании, по протоколам PPTP и L2TP. Настройки не отличаются сложностью и достаточно понятно описаны во встроенной справке.

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

И так, в качестве альтернативы был выбран программный продукт – OpenVPN (http://openvpn.net/). Обо всех достоинствах, принципе работы и функционале продукта можно узнать на официальном сайте разработчиков. У нас же речь пойдет о конкретном типовом решении. Кроме того, учитывая то обстоятельство, что большинство корпоративных сетей развернуто на базе операционных систем MS Windows, решение будет также ориентировано под работу в среде Windows.

Средствами OpenVPN достаточно просто построить каскад из vpn-серверов, что может пригодиться при решении задач анонимности в интернет.

Скачать программу можно с сайта разработчиков http://openvpn.net/download.html.

Теперь перейдем непосредственно к постановке задачи и её решению

ЗАДАЧА :

Есть главный офис и 2 подразделения. В офисе есть сервер с реальным ip-адресом (123.123.123.123). Нужно объединить сеть офиса и сети 2-х подразделений в одну сеть.

Адресные пространства локальных сетей:

офис – 192.168.16.0/24 (mask 255.255.255.0)

подразделение 1 – 192.168.60.0/24 (mask 255.255.255.0)

подразделение 2 – 192.168.50.0/24 (mask 255.255.255.0)

ОС на сервере офиса Win2k server SP4.

Cервер подразделения 1 – WinXP Prof SP1.

Cервер подразделения 2 – Win2k3 server EE SP1.

Сервер в главном офисе будет VPN-сервером, сервера в подразделениях – его клиенты.

На всех серверах должна работать служба “DHCP – клиент”

РЕШЕНИЕ:

Установка OpenVPN (общие правила для сервера и клиентов)

1. Рекомендуется устанавливать в каталог, в полном пути которого не будет пробелов (иначе, пути нужно заключать в кавычки):

c:\OpenVPN

2. Для ключей и сертификатов создаём папку:

c:\OpenVPN\ssl

Подготовка сервера к выдаче сертификатов.

1. Копируем из папки C:\OpenVPN\easy-rsa в папку c:\OpenVPN\ssl файлы index.txt.start и serial.start и переименовываем их в index.txt и serial

2. В каталоге C:\OpenVPN easy-rsa делаем копии файлов vars.bat.sample и openssl.cnf.sample и переименовываем их в vars.bat и openssl.cnf

3. Редактируем файл vars.bat

Изменяем пути домашнего каталога и хранилища ключей:

– set HOME=c:\OpenVPN\easy-rsa

– set KEY_DIR=c:\OpenVPN\ssl

Длину ключа можно оставить по умолчанию:

– set KEY_SIZE=1024

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

– set KEY_COUNTRY=RU

– set KEY_PROVINCE=Moscow

– set KEY_CITY=Moscow

– set KEY_ORG=MyCompany

– set KEY_EMAIL=admin@domain.ru

ВАЖНО!

– поле Organization Name (KEY_ORG) должно совпадать с тем, что будет указано при генерации сертификата центра сертификации (ca.crt).

4. Редактируем openssl.cnf

Меняем следующие значения (обратить внимание на двойной слеш):

– database = $dir\\index.txt

– serial = $dir\\serial

А также, для будущего удобства, можно изменить следующее:

– раскомментировать параметр organizationalUnitName_default и задать ему какое-нибудь значение:

organizationalUnitName_default = My Department

5. Создаем папку C:\OpenVPN\config\ccd для файлов-конфигураций пользователей.

Создание сертификатов и ключей сервера.

Примечания:

– Все последующие действия производятся из командной строки, которая открыта на протяжении всего процесса генерации ключей

– Перед глазами лучше держать открытые в проводнике каталоги c:\OpenVPN\easy-rsa (чтобы не путаться в названиях bat-файлов) и c:\OpenVPN\ssl (чтобы видеть результаты).

1. Запускаем командную строку.

2. Объявляем переменные: запускаем файл vars.bat

3. Создаем корневой сертификат и ключ на 10 лет (кстати, если мы все правильно прописали в файлах vars.bat и openssl.cnf, то, вместо ввода значений, можно просто нажимать кнопку “Enter”)

build-ca.bat

или

openssl req -days 3650 -nodes -new -x509 -keyout %KEY_DIR%\ca.key -out %KEY_DIR%\ca.crt -config %KEY_CONFIG%

4. Создаем сертификат и ключ для сервера, и подписываем его в нашем центре сертификации (на 2 вопроса при подписи созданного сертификата, ответить утвердительно).

Запускаем bat-файл с именем сервера, в качестве параметра

build-key-server.bat ServerVPN

или

openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\ServerVPN.key -out %KEY_DIR%\ServerVPN.csr -config %KEY_CONFIG%

openssl ca -days 3650 -out %KEY_DIR%\ServerVPN.crt -in %KEY_DIR%\ServerVPN.csr -extensions server -config %KEY_CONFIG%

В результате будут созданы файлы ServerVPN.crt, ServerVPN.csr, ServerVPN.key

5. Создаем сертификаты и ключи для клиентов, и подписываем их в нашем центре сертификации.

ВНИМАНИЕ! В процессе генерации сертификата будет запрос на ввод значения для поля commonName, – для клиентов имена должны различаться (например, для подразделения 1 – commonName=Client1, для подразделения 2 – commonName=Client2).

Запускаем bat-файл с именем клиента, в качестве параметра (не забываем про Organization Name, см. выше)

build-key.bat ClientVPN1

или

openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\ClientVPN1.key -out %KEY_DIR%\ClientVPN1.csr -config %KEY_CONFIG%

openssl ca -days 3650 -out %KEY_DIR%\ClientVPN1.crt -in %KEY_DIR% \ClientVPN1.csr -config %KEY_CONFIG%

В результате должны получиться файлы ClientVPN1.crt, ClientVPN1.csr, ClientVPN1.key

Аналогично и для второго подразделения, только имя файла сертификата (не путать с commonName) изменил на ClientVPN2.

6. Создаем ta-ключ для защиты от DOS-атак:

openvpn –genkey –secret C:\OpenVPN\ssl\ta.key

7. Создаем ключ Diffie-Hellman (сертификат для шифрования установки соединения, выполняется долго)

build-dh.bat

или

openssl dhparam -out %KEY_DIR%/dh%KEY_SIZE%.pem %KEY_SIZE%

Конфигурационный файл сервера.

1. Создаем в папке C:\OpenVPN\config\ файл с названием serverVPN.ovpn

2. Открываем его и вставляем туда нижеследующее содержание:

# Тип интерфейса

dev tun

# Имя интерфейса (должно совпадать с названием интерфейса в списке адаптеров Windows)

# Необязательный параметр

# dev-node “OpenVPN Adapter”

# Указываем серверу, что работать будем по протоколу TCP

proto tcp-server

# Порт 8888

port 8888

# Признак серверной конфигурации

tls-server

#Укажем адресное пространство в vpn-сети

server 10.10.0.0 255.255.255.0

# Включаем сжатие

comp-lzo

# Метод добавления маршрута (актуально только для Windows)

#Помогает в случае ошибок добавления маршрутов

# route-method exe

# Маршрут для сервера, чтобы видеть сети 192.168.60.x и 192.168.50.x

route 192.168.60.0 255.255.255.0 10.10.0.2

route 192.168.50.0 255.255.255.0 10.10.0.2

# Маршрут, который добавляется в таблицу КАЖДОГО клиента, чтобы видеть сеть за сервером

# здесь он закомментирован, т.к. использовались персональные файлы клиентов

# push “route 192.168.16.0 255.255.255.0”

# Разрешаем vpn-клиентам видеть друг друга

client-to-client

# Каталог с конфигурациями пользователей

client-config-dir C:\OpenVPN\config\ccd

# Файл с описанием vpn-сетей между клиентом и сервером

# Если при старте сервера он не существует, то создается автоматически

ifconfig-pool-persist C:\OpenVPN\config\ccd\ipp.txt

# Указываем пути к сертификатам сервера

# Сертификат для шифрования установки соединения

dh C:\OpenVPN\ssl\dh1024.pem

# Сертификат центра сертификации

ca C:\OpenVPN\ssl\ca.crt

# Сертификат сервера

cert C:\OpenVPN\ssl\ServerVPN.crt

# Ключ сервера

key C:\OpenVPN\ssl\ServerVPN.key

# Использование интерфейса и ключа при перезапуске сервера

persist-tun

persist-key

# Защита от DOS-атак (для сервера, после пути к ключу, ставим значение 0)

tls-auth C:\OpenVPN\ssl\a.key 0

tun-mtu 1500

tun-mtu-extra 32

mssfix 1450

# Время жизни неактивной сессии

keepalive 10 120

# Пути к файлам журналов

# Журнал состояния (перезаписывается ежеминутно)

status C:\OpenVPN\log\openvpn-status-server.log

# Системный журнал

log C:\OpenVPN\log\openvpn-server.log

# Степень детализации отладочной информации в логах (параметр от 0 до 9)

verb 3

3. Остановимся подробнее на каталоге C:OpenVPNconfigccd. В нём создадим 2 файла с дополнительными персональными настройками для каждого клиента. Для 1-го клиента в этом каталоге нужно создать файл без расширения одноименного названия (client1), в который нужно вписать следующее:
# маршрут для клиента client1, чтобы он мог видеть сеть за сервером, т.е. 192.168.16.0/24

push “route 192.168.16.0 255.255.255.0”

# маршрут для клиента client1, чтобы видеть сеть другого клиента, т.е. 192.168.50.0/24

push “route 192.168.50.0 255.255.255.0”

# Правило, разрешающее работу клиентам из сети 192.168.60.0/24 с сетью за vpn-сервером.

iroute 192.168.60.0 255.255.255.0

# Чтобы отключить пользователя, нужно раскомментировать параметр disable.

# disable

Для второго клиента файл называется client2 и содержит:

# маршрут для клиента client2, чтобы видеть сеть за сервером, т.е. 192.168.16.0/24

push “route 192.168.16.0 255.255.255.0”

# маршрут для клиента client2, чтобы видеть сеть другого клиента, т.е. 192.168.60.0/24

push “route 192.168.60.0 255.255.255.0”

# Правило, разрешающее работу клиентов из сети 192.168.50.0/24 с сетью за vpn-сервером.

iroute 192.168.50.0 255.255.255.0

# Отключить пользователя (для этого нужно раскомментировать параметр disable)

# disable

4. Содержание файла ipp.txt следующее:
client1,10.10.0.4
client2,10.10.0.8
Подробности см. в результатах выполнения команды:

openvpn.exe –show-valid-subnets

5. Запускаем службу “OpenVPN service”.

6. Если все выполнено правильно, то в системной панели пропадет значок “Сетевой кабель не подключен” для интерфейса “TAP-Win32 Adapter V8”

7. В случае проблем, всю необходимую информацию можно получить из системных журналов.

Подготовка конфигурационных файлов клиентов.

1. Создаем каталог (c:\OpenVPN\config-clients), где будут храниться конфигурационные файлы (c:\OpenVPN\config-clients), сертификаты и ключи (c:\OpenVPN\config-clients\ssl) клиентов.

2. Перемещаем все созданные ранее сертификаты и ключи клиентов (см. в папке c:OpenVPNssl) в соответствующие клиентские каталоги, а так же копируем сертификат центра сертификации (ca.crt) и ta-ключ (ta.key).

В нашем примере, для клиента Client1 в каталоге c:\OpenVPN\config-clients\Client1\ssl должны находиться следующие файлы: ca.crt, ClientVPN1.crt, ClientVPN1.key, ta.key

Аналогично и для Client2

3. Создаем для клиента Client1 конфигурационный файл ClientVPN1.ovpn в папке c:\OpenVPN\config-clients\Client1. Редактируем его содержание:

dev tun

# Имя интерфейса

# dev-node “OpenVPN Adapter”

# Указываем, по какому протоколу будет работать клиент

proto tcp

# Адрес vpn-сервера

remote 123.123.123.123 8888

# Метод добавления маршрутов

# route-method exe

# Пауза перед добавлением маршрутов (в секундах)

route-delay 3

#Информацию о маршрутизации получать с сервера

client

# Признак клиентской конфигурации

tls-client

# Защита, от атаки “man in the middle”

ns-cert-type server

# Указываем пути к сертификатам и ключам клиента

# Сертификат центра сертификации

ca C:\OpenVPN\ssl\ca.crt

# Сертификат клиента

cert C:\OpenVPN\ssl\ClientVPN1.crt

# Ключ клиента

key C:\OpenVPN\ssl\ClientVPN1.key

# Защита от DOS-атак (для клиента, после пути к ключу, ставим 1)

tls-auth C:\OpenVPN\ssl\a.key 1

# Включаем сжатие

comp-lzo

tun-mtu 1500

tun-mtu-extra 32

mssfix 1450

ping-restart 60

ping 10

# Журнал состояния (перезаписывается ежеминутно)

status C:\OpenVPN\log\openvpn-status-ClientVPN1.log

# Системный журнал

log C:\OpenVPN\log\openvp-ClientVPN1n.log

# Степень детализации отладочной информации (от 0 до 9) в логах

verb 3

4. Для второго клиента Client2, создаем файл ClientVPN2.ovpn в папке c:OpenVPNconfig-clientsClient2, где все, кроме названий файлов сертификатов и ключей, будет аналогично Client1.

Установка OpenVPN на клиенте client1 (client2 – аналогично).

1. В случае если клиентом является сервер удалённого подразделения, необходимо разрешить пересылку пакетов между интерфейсами. Для этого необходимо изменить ключ реестра

HKLMSYSTEM\CurrentControlSet\Services\Tcpip\Parameters для параметра IPEnableRouter на “1” и необходимо перезагрузить компьютер.

Это нужно сделать и для сервера в главном офисе.

Если клиентом является обычный удалённый пользователь, то в изменении ключа реестра нет необходимости.

Изменения в реестр следует вносить, если на сервере и/или клиенте не настроена служба “Маршрутизации и удаленного доступа”. Если же служба настроена, то все маршруты нужно прописать в разделе “статические маршруты”.

2. Устанавливаем OpenVPN в папку c:\OpenVPN

3. Копируем соответствующие сертификаты и ключи, т.е. все файлы из директории на сервере c:\OpenVPN\config-clients\Client1\ssl, в папку на клиенте c:\OpenVPN\ssl, а файл ClientVPN1.ovpn из директории на сервере c:\OpenVPN\config-clients\Client1 в папку c:\OpenVPN\config на клиенте.

4. Запускаем службу “OpenVPN Service”

5. Если все прописано правильно, то в системной панели пропадет значок “Сетевой кабель не подключен” для интерфейса “TAP-Win32 Adapter V8”

6. Аналогичная процедура и для client2. Разница только в ключах и сертификатах.

Последний штрих.

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

Примечания:

– данный пример не стоит рассматривать, как единственно правильный;

– все вышеописанное работает на 100%;

– ответы на все вопросы всегда можно найти на сайте разработчиков;

– все вышеописанные процедуры можно автоматизировать, например, средствами WSH.

Leave a Reply