OpenVPN для семейства операционных систем Microsoft Windows 2000/XP/2003
В семейство серверных операционных систем 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.