logo
buhara
 

VPN

Что такое VPN Спросите Вы , обратимся к энциклопедии Материал из Википедии

VPN (англ. Virtual Private Network — виртуальная частная сеть) — логическая сеть, создаваемая поверх другой сети, например Интернет. Несмотря на то, что коммуникации осуществляются по публичным сетям с использованием небезопасных протоколов, за счёт шифрования создаются закрытые от посторонних каналы обмена информацией. VPN позволяет объединить, например, несколько офисов организации в единую сеть с использованием для связи между ними неподконтрольных каналов.

Пользователи Microsoft Windows обозначают термином «VPN» одну из реализаций виртуальной сети — PPTP, причём используемую зачастую не для создания частных сетей.

Чаще всего для создания виртуальной сети используется инкапсуляция протокола PPP в какой-нибудь другой протокол — IP (такой способ использует реализация PPTP — Point-to-Point Tunneling Protocol) или Ethernet (PPPoE) (хотя и они имеют различия). Технология VPN в последнее время используется не только для создания собственно частных сетей, но и некоторыми провайдерами «последней мили» для предоставления выхода в Интернет.

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

 

 

В данной статье изложено краткое описание OpenVPN (http://openvpn.net/) на основании личного опыта, в основном для ОС Windows (хотя многое применимо и для других ОС). Наверняка здесь есть какие-нибудь ошибки, неточности и неполнота, ну что же - принцип "as is"...
Описание периодически обновляется в меру появления новой информации и времени
Текущие стабильные версии (2006-ноябрь):
OpenVPN 2.0.9 для Windows - http://openvpn.net/release/openvpn-2.0.9-install.exe
OpenVPN-GUI 1.0.3 для Windows - http://openvpn.se/files/binary/openvpn-gui-1.0.3.exe
или сборный комплект http://openvpn.se/files/install_packages/openvpn-2.0…1.0.3-install.exe

Пример реализации 

Задача.
Есть главный офис и 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, сервер подразделения 1 – WinXP Prof SP1, сервер подразделения 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
Кроме того, можем изменить длину ключа
- KEY_SIZE на значение 2048 (я оставил по умолчанию 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 (чтобы в названиях батников не путаться) и c:\OpenVPN\ssl (чтобы видеть результаты)

1. Запускаем cmd

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 вопроса при подписи созданного сертификата, ответить утвердительно).
Запускаем батник с именем сервера, в качестве параметра
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).
Запускаем батник с именем клиента, в качестве параметра (не забываем про 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

# имя интерфейса (должно совпадать с названием интерфейса в виндовс) - необязательный параметр
# dev-node "OpenVPN Adapter"

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

# Порт 8888
port 8888

# признак серверной конфигурации
tls-server

#укажем ip сервера в vpn сети (иными словами – виртуальное адресное пространство между клиентом и сервером)
server 10.10.0.0 255.255.255.0

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

# Метод добавления маршрута (актуально только для Windows)
# route-method exe
# маршрут для сервера, чтобы видеть сети 192.168.60.x и 192.168.50.x
# однако, чтобы клиенты из этой подсети видели сеть за сервером, необходимо прописать
# разрешающее правило для самого клиента в директории ccd
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\\ta.key 0


tun-mtu 1500
tun-mtu-extra 32
mssfix 1450

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

# Пути к логам
# Лог состояния (перезаписывается ежеминутно)
status C:\\OpenVPN\\log\\openvpn-status.log
# Системный лог
log C:\\OpenVPN\\log\\openvpn.log

# Количество отладочной информации (от 0 до 9) в логах
verb 3


3. Остановимся поподробнее на каталоге C:\OpenVPN\config\ccd. В него мы положим 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&keys-clients), где будем хранить конфиги (c:\OpenVPN\config&keys-clients\<ClientName>), сертификаты и ключи (c:\OpenVPN\config&keys-clients\<ClientName>\keys)

2. Перемещаем все созданные ранее сертификаты и ключи клиентов (см. в папке c:\OpenVPN\ssl) в соответствующие клиентские каталоги, а так же копируем, для удобства, сертификат центра сертификации и ta-ключ.
Если конкретно, то для клиента Client1 в каталоге c:\OpenVPN\config&keys-clients\Client1\keys должны лежать следующие файлы ca.crt, ClientVPN1.crt, ClientVPN1.key, ta.key
Аналогично и для Client2

3. Создаем для клиента Client1 конфигурационный файл ClientVPN1.ovpn в папке c:\OpenVPN\config&keys-clients\Client1. Открываем его на редактирование и пишем в него следующее:
dev tun
# dev tap

# Имя интерфейса
# dev-node "OpenVPN Adapter"

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

# Адрес сервера, к которому подключаемся
remote 123.123.123.123 8888

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

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

#Говорим, чтобы клиент забирал информацию о маршрутизации с сервера (push опции)
client

# признак клиентской конфигурации
tls-client

# Защита, от атаки "man in the middle" ("человек посередине")
ns-cert-type server

# Указываем пути к сертификатам и ключам клиента (они были созданы ранее и находятся на сервере в папке c:OpenVPNconfig&keys-clients Client1keys)
# Сертификат центра сертификации
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\\ta.key 1

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

# (надо разобраться, что за ерунда)
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450

ping-restart 60
ping 10

# Пути к логам
# Лог состояния (перезаписывается ежеминутно)
status C:\\OpenVPN\\log\\openvpn-status.log
# Системный лог
status C:\\OpenVPN\\log\\openvpn.log

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


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

Установка OpenVPN непосредственно на клиенте client1 (client2 - аналогично)

1. Необходимо разрешить пересылку пакетов между интерфейсами. Для этого меняем ключ реестра
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters для параметра IPEnableRouter на “1” и перезагружаемся.
Это нужно сделать и для сервера в главном офисе

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

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

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

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

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

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

 

Информатика

JoomlaWatch Stats 1.2.9 by Matej Koval

Сегодня 19 августа, суббота
Copyright © 2005 - 2017 БУХАРСКИЙ КВАРТАЛ ПЕТЕРБУРГА.
Страница сгенерирована за 0.000036 секунд
Сегодня 19 августа, суббота
Информационно-публицистический портал
Санкт-Петербург
Вверх