1. Установка OpenVPN.
1.1. Скачиваем программу с
оф. сайта для своей версии windows.
1.2. При установке ставим галочку EasyRSA
Путь установки - по умолчанию (C:\Program Files\OpenVPN).
2. Настройка конфигов OpenVPN.
2.1. Заходим в директорию, куда установили программу (по умолчанию C:\Program Files\OpenVPN) и переходим в easy-rsa.
Будет удобней и наглядней, если проводить работы в Командной строке (cmd) от администратора.
2.2. Во-первых, запускаем init-config.bat
2.3. Затем, отредактируем vars.bat, чтобы адаптировать его к своей среде. Конкретно, нас интересует последний блок:
set KEY_COUNTRY=RU
set KEY_PROVINCE=MSK
set KEY_CITY=Moscow
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain
set KEY_CN=GLX-SERVER
set KEY_NAME=GALAXY
set KEY_OU=GALAXY
set PKCS11_MODULE_PATH=GALAXY
set PKCS11_PIN=1234
2.4. Для удобства рекомендуется переименовать название сетевого TAP-адаптера (Панель управления\Сеть и Интернет\Сетевые подключения) во что-то более понятное. Например, VPN-Server.
3. Генерация TLS ключей.
3.1. Создаём новые пустые файлы index и serial:
vars
clean-all
3.2. Генерируем корневой сертификат CA (только один раз):
vars
build-ca
3.3. Генерируем ключ Диффи-Хэлмана (для сервера, только один раз):
vars
build-dh
3.4. Генерируем приватный серверный сертификат:
vars
build-key-server имя_сервера
3.5. Генерируем клиентский сертификат в PEM формате (для каждого клиента):
vars
build-key имя_клиента
ИЛИ
Генерируем клиентский сертификат в PKCS#12 формате (для каждого клиента):
vars
build-key-pkcs12 имя_клиента
3.6. Для отзыва TLS сертификата и генерации файла CRL:
1. vars
2. revoke-full имя_клиента
3. проверяем последнюю строку вывода, подтверждающую отзыв
4. копируем файл отзыва сертификата (crl.pem) в директорию сервера и убеждаемся, что конфиг использует "crl-verify crl filename"
3.7. Генерируем ключ для аутентификации:
openvpn --genkey --secret keys/имя_сервера-ta.key
4. Подготовка серверного и клиентского конфигов.
4.1. Серверный конфиг нужно разместить в C:\Program Files\OpenVPN\config\server.ovpn на сервере:
# Какой порт TCP/UDP должен прослушиваться OpenVPN?
# Если вы хотите запустить несколько экземпляров OpenVPN
# на той же машине используйте другой номер
# порта для каждого из них. Вам нужно будет
# открыть этот порт в брандмауэре.
port 1194
# TCP или UDP сервер?
;proto tcp
proto udp
# "dev tun" создаст маршрутизируемый IP-туннель,
# "dev tap" создаст туннель ethernet.
# Используйте "dev tap0", если вы соединяете ethernet
# и предварительно создали виртуальный интерфейс tap0
# и соединили его с вашим интерфейсом ethernet.
# Если вы хотите контролировать политику доступа
# через VPN необходимо создать правила
# брандмауэра для интерфейса TUN/TAP.
# В системах, отличных от Windows, вы можете дать
# явный номер единицы измерения, например tun0.
# В Windows для этого используйте "dev-node".
# В большинстве систем VPN не будет работать
# если вы не отключите брандмауэр полностью или частично
;dev tap
;dev tun
# Windows требуется имя адаптера TAP-Win32
# из панели Сетевые подключения если у вас
# есть больше, чем один. На XP SP2 или выше,
# возможно, вам придётся выборочно отключить
# брандмауэр для адаптера TAP.
# Системы, отличные от Windows, обычно не нуждаются в этом.
dev-node MyTap
# Корневой сертификат SSL/TLS (ca), сертификат
# (cert) и закрытый ключ (key). Каждый клиент
# и сервер должен иметь свой собственный сертификат и
# ключ. Сервер и все клиенты будут
# используйте один и тот же файл ca.
#
# Можно использовать любую систему управления ключами X509.
# OpenVPN также может использовать ключевой файл формата PKCS #12
ca ca.crt
cert server.crt
key server.key
# Параметры ключа Диффи-Хэлмана.
# Сгенерируйте свой ключ:
# openssl dhparam -out dh2048.pem 2048
dh dh2048.pem
# Топология сети
# Должна быть подсеть (адресация через IP)
# если клиенты Windows v2.0.9 и ниже должны
# поддерживаться (тогда net30, т.е. a /30 на клиента)
# По умолчанию net30 (не рекомендуется)
;topology subnet
# Настройка режима сервера и предоставление подсети VPN
# для OpenVPN, чтобы предоставить адреса клиентам.
# Сервер возьмёт 10.8.0.1 для себя,
# остальное будет предоставлено клиентам.
# Каждый клиент сможет связаться с сервером
# на 10.8.0.1. Закомментируйте эту строку, если у вас
# мост Ethernet.
server 10.8.0.0 255.255.255.0
# Ведение записи назначения виртуального IP-адреса клиента
# в этом файле. Если OpenVPN выходит из строя или
# перезапускается, можно назначить повторное подключение клиентов
# на тот же виртуальный IP-адрес из пула, который был
# ранее назначен.
ifconfig-pool-persist ipp.txt
# Настройка режима сервера для моста ethernet.
# Вы должны сначала использовать возможности моста вашей ОС
# для соединения интерфейса TAP с ethernet
# Интерфейс NIC. Затем вы должны вручную установить
# IP/netmask на интерфейсе моста, здесь мы
# предположим, что 10.8.0.4/255.255.255.0. Наконец, нам
# необходимо выделить диапазон IP-адресов в этой подсети
# (начало=10.8.0.50 конец=10.8.0.100)
# для подключения клиентов. Оставьте эту строку закомментированной,
# если вы не соединяете ethernet.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# Настройка режима сервера для моста ethernet
# через DHCP-прокси, где клиенты обращаются
# к серверу DHCP на стороне OpenVPN-сервера,
# чтобы получить распределение их IP-адресов
# и адресов DNS-серверов. Вы должны сначала использовать
# способность моста вашей ОС для моста TAP
# интерфейса с интерфейсом сетевого адаптера ethernet.
# Примечание: этот режим работает только на клиентах (таких как
# Windows), где на стороне клиента находится адаптер TAP,
# привязанный к DHCP-клиенту.
;server-bridge
# Push-маршруты к клиенту, чтобы разрешить
# добраться до других частных подсетей позади
# сервера. Помните, что эти
# частные подсети также потребуется
# знать для маршрута возвращения пула адресов OpenVPN-клиентов
# (10.8.0.0/255.255.255.0) обратно на OpenVPN-сервер.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# Чтобы назначить определенные IP-адреса определенным
# клиентам или если подключающийся клиент имеет свою
# подсеть, которая также должна иметь доступ к VPN,
# используйте подкаталог "ccd" с файлами конфигурации
# для конкретного клиента.
#
# НАПРИМЕР: Предположим, что клиент
# имеющий название сертификата "Телониус"
# также имеет небольшую подсеть за его подключенной
# машиной, например 192.168.40.128/255.255.255.248.
# Во-первых, раскомментируйте эти строки:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# Затем создайте файл ccd/Thelonious с этой строкой:
# iroute 192.168.40.128 255.255.255.248
# Это разрешит частной подсети Телониуса
# доступ к VPN. Этот пример будет работать только
# если вы маршрутизируете, а не наводите мост, т. е. вы
# используете директивы "dev tun" и "server".
#
# НАПРИМЕР: Предположим, вы хотите выдать
# Телониусу фиксированный IP-адрес VPN 10.9.0.1.
# Сначала раскомментируйте эти строки:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Затем добавьте эту строку в ccd/Thelonious:
# ifconfig-push 10.9.0.1 10.9.0.2
# Предположим, что вы хотите включить разные
# политики доступа брандмауэра для различных групп
# клиентов. Существует два метода:
# (1) запуск нескольких демонов OpenVPN, по одному для каждой
# группы, и брандмауэр интерфейсов TUN/TAP
# для каждой группы/демона соответственно.
# (2) (продвинутый) создание скрипта для динамического
# изменения брандмауэра в ответ на доступ
# от разных клиентов.
;learn-address ./script
# Если включено, эта директива настроит
# всем клиентах перенаправление их сетевых шлюзов
# по умолчанию через VPN, повлёкший
# весь IP-трафик, такой как просмотр веб-страниц и
# и DNS-запросы, чтобы пройти через VPN
# (серверу OpenVPN может потребоваться NAT
# или мост интерфейса TUN/TAP с интернетом
# для того, чтобы это работало правильно).
;push "redirect-gateway def1 bypass-dhcp"
# Определенные параметры сети для Windows
# могут быть переданы клиентам, такие как DNS
# или адреса WINS-серверов. ПРЕДОСТЕРЕЖЕНИЕ:
#
http://openvpn.net/faq.html#dhcpcaveats# Адреса, приведенные ниже, относятся к публичным
# DNS-серверам, предоставляемые opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
# Раскомментируйте эту директиву, чтобы разрешить разным
# клиентам иметь возможность "видеть" друг друга.
# По умолчанию клиенты будут видеть только сервер.
# Чтобы заставить клиентов видеть только сервер, вам
# также необходимо будет соответствующим образом настроить брандмауэр
# интерфейса TUN/TAP сервера.
;client-to-client
# Раскомментируйте эту директиву, если несколько клиентов
# могут подключаться с одним и тем же сертификатом/ключом
# или общим именем. Это рекомендуется
# только в целях тестирования. Для использования в производстве,
# каждый клиент должен иметь свою собственную пару сертификата/ключа.
#
# ЕСЛИ ВЫ НЕ СОЗДАЛИ ИНДИВИДУАЛЬНОЙ
# ПАРЫ СЕРТИФИКАТ/КЛЮЧ ДЛЯ КАЖДОГО КЛИЕНТА,
# КАЖДЫЙ ИЗ НИХ ИМЕЕТ СВОЕ УНИКАЛЬНОЕ "ОБЩЕЕ ИМЯ",
# РАСКОММЕНТИРУЙТЕ ЭТУ СТРОКУ.
;duplicate-cn
# Директива keepalive вызывает ping-like
# сообщения, которые будут отправляться туда и обратно,
# чтобы каждая сторона знала, когда
# другая сторона перестала работать.
# Пингуем каждые 10 секунд; предполагается, что удалённый
# узел не работает, если нет пинга в течение
# 120 секунд.
keepalive 10 120
# Для дополнительной безопасности помимо этого предусмотрено
# с помощью SSL/TLS, создайте "брандмауэр HMAC"
# чтобы помочь блокировать DoS-атаки и флудинг UDP-портов.
#
# Сгенерировать с помощью:
# openvpn --genkey --secret ta.key
#
# Сервер и каждый клиент должны иметь
# копию этого ключа.
# Второй параметр должен быть "0"
# на сервере и '1' на клиентах.
tls-auth ta.key 0
# Выберите криптографический шифр.
# Этот пункт конфига должен также копироваться
# в файл конфигурации клиента.
# Обратите внимание, что клиент/сервер версии 2.4 будет автоматически
# согласовывать AES-256-GCM в режиме TLS.
cipher AES-256-CBC
# Включите сжатие на VPN-канале и передайте
# опцию клиенту (только v2. 4+, для более ранних
# версий см. ниже)
;compress lz4-v2
;push "compress lz4-v2"
# Для сжатия, совместимого со старыми клиентами, используйте comp-lzo
# Если вы включите его здесь, вы также должны
# включить его в файле конфигурации клиента.
;comp-lzo
# Максимальное количество одновременно подключенных
# клиентов, которое мы хотим разрешить.
;max-clients 100
# Параметры сохранения будут пытаться избежать
# доступа к определенным ресурсам при перезапуске,
# которые не могут быть больше доступны
# из-за понижения привилегий.
persist-key
persist-tun
# Выводит короткий файл состояния, показывающий
# текущие соединения, усеченные
# и перезаписанные каждую минуту.
status openvpn-status.log
# По умолчанию сообщения журнала будут отправляться в системный журнал (или
# в Windows, если они запущены как Служба, они будут отправлены в
# каталог "\Program Files\OpenVPN\log").
# Используйте log или log-append, чтобы переопределить это значение по умолчанию.
# "log" будет усекать файл журнала при запуске OpenVPN,
# а "log-append" будет добавляться к нему. Используйте один
# или другой (но не оба).
;log openvpn.log
;log-append openvpn.log
# Установите соответствующий уровень детализации файла журнала.
#
# 0 молчит, за исключением фатальных ошибок
# 4 является разумным для общего использования
# 5 и 6 могут помочь отладить проблемы с подключением
# 9 очень подробно
verb 3
# Заглушить повторные сообщения. В журнал будет
# выведено не более 20 последовательных сообщений
# одной и той же категории.
;mute 20
# Уведомить клиента при перезапуске сервера,
# чтобы он мог автоматически повторно подключиться.
explicit-exit-notify 1
Итоговый пример серверного конфига может быть такой:
port 1194
proto udp
dev tun
dev-node MyTap
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 10
persist-key
persist-tun
status "C:\\Program Files\\OpenVPN\\log\\openvpn-status.log"
log "C:\\Program Files\\OpenVPN\\log\\openvpn.log"
verb 3
mute 20
explicit-exit-notify 1
4.2. Клиентский конфиг нужно разместить в C:\Program Files\OpenVPN\config\client.ovpn на машине клиента:
client
dev tun
dev-node MyTap
proto udp
remote openvpn-server-ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
mute 20
Для сервера:
сертификаты (ca.crt, server.crt, server.key, dh2048.pem, ta.key) положить в папку ssl например, конфиг (server.ovpn) положить в config.
Для клиента:
сертификаты (ca.crt, client.crt, client.key, ta.key) положить в папку ssl например, конфиг (client.ovpn) положить в config.