Создание и настройка файлов конфигурации OpenVPN
Конфигурация основывается на файлах типовой конфигурации, которые находятся в C:\Program Files\OpenVPN\sample-config.
Настройка конфигурации сервера
Копируете файл server.ovpn из папки sample-config в папку config. Открываете и редактируете его
Обратите внимание на двойные слеши
- Найдите строку, которая начинается на ca и укажите путь к своему ca файлу. В моем случае это ca «C:\\Program Files\\OpenVPN\\config\\ca.crt».
- Найдите cert и отредактируйте соответственно, в моем случае это cert «C:\\Program Files\\OpenVPN\\config\\abuzov-name.crt».
- По аналогии с key — key «C:\\Program Files\\OpenVPN\\config\\abuzov-name.key».
- Аналогично с dh — dh «C:\\Program Files\\OpenVPN\\config\\dh2048.pem»
- Аналогично tls-auth — «C:\\Program Files\\OpenVPN\\config\\ta.key».
Я приведу полный код конфигурации сервера, на всякий случай, что бы его можно было просто скопировать. Так как знаю что такое первая настройка OpenVPN.
mode server port 1194 dev tap proto tcp-server tls-server tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0 duplicate-cn auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\abuzov-name.crt" key "C:\\Program Files\\OpenVPN\\config\\abuzov-name.key" # This file should be kept secret dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem" server 10.10.10.0 255.255.255.0 client-to-client keepalive 10 120 comp-lzo persist-key persist-tun verb 3 route-delay 10 route-method exe route 10.10.10.0 255.255.255.0 route 192.168.0.0 255.255.0.0 route-gateway 10.10.10.1
Сохраните файл конфигурации сервера.
Запустите OpenVPN от имени администратора (и сразу сделайте так, что бы он всегда запускался от имени администратора).
После этого подключитесь к северу как показано на рисунке.
Настройка конфигурации клиента
Копируете файл client.ovpn из папки sample-config в папку config. Открываете и редактируете его аналогии. В моем случае это:
- ca «C:\\Program Files\\OpenVPN\\config\\ca.crt»
- cert «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.crt»
- key «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.key»
- remote IP_адрес_сервера
Опять, лучше приведу полный код.
remote IP-адрес-вашего-сервера client port 1194 dev tap proto tcp-client tls-client tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 remote-cert-tls server route-delay 2 auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca ca.crt cert ClientVPN.crt key ClientVPN.key pull cipher AES-128-CBC comp-lzo persist-key persist-tun verb 3 route-method exe route-delay 3
Единственное что нужно сделать — указать IP-адрес сервера.
Далее подключаем клиент OpenVPN.
Если клиент не подключается к серверу, тогда нужно на сервере необходимо запустить regedit.exe, затем перейти по адресу: «Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters» и изменить IPEnableRouter на 1. После чего перезагрузить сервер и подключиться к OpenVPN заново.
После этого можно подключаться по защищенному соединению.
Разные вопросы
В. Чем отличаются виртуальные устройства tun и tap?О. TUN — туннель, соединение по которому указывается по типу: локальный IP < — > удаленный IP. Например, при явном указании ifconfig:
—ifconfig 10.3.0.2 10.3.0.1
в этом примере 10.3.0.2 — локальный IP, 10.3.0.1 — удаленный IP
TAP — эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например:
—ifconfig 10.3.0.2 255.255.255.0
В. Для чего нужны файлы serial и index.txt при генерации ключей с easy-rsa?О. Эти два файла используются в качестве временной базы данных, используемой при генерации ключей. Должны находиться в том каталоге, где и ключи.
Авторизуйтесь для добавления комментариев!
Установка и настройка OpenVPN
Один компьютер будет играть роль сервера. Второй – клиента. На сервере при установке OpenVPN нужно установить флажок EasyRSA – для генерации сертификатов и ключей.
В теории можно скачать и более поздний релиз, но лучше скачивать проверенную версию. Так как я не настраивал последние версии. Если дойдут руки, то дополню статью.
После запуска программы установки включаем EasyRSA (на сервере) и устанавливаем. Программа устанавливается просто и не требует каких-либо специфических настроек при установке.
Затем устанавливаем программу втором компьютере который будет играть роль клиента.
Далее нужно настроить компьютеры, что бы они видели друг друга в сети. Этот процесс зависит от установленной у вас операционной системы. Фактически вам нужно включить сетевое обнаружение.
Создание сертификатов и генерация ключей
Ключи и сертификаты создаются на сервере OpenVPN. Для их создания необходимо выполнить следующие действия:
Запустите командную строку от имени администратора.
С помощью команды cd перейдите в папку C:\Program Files\OpenVPN\easy-rsa и выполните команду init-config.bat, после чего в папке easy-rsa появиться файл vars.bat.
Откройте vars.bat с помощью блокнота или иного текстового редактора. Я открыл в Notepad++. Укажите свои данные.
Данные можно указывать в процессе работы с OpenVPN.
Вернитесь в командную строку и по очереди выполните команды vars и clean-all поочередно.
Выполните команду build-dh. Если у вас появиться ошибка «openssl» не является внутренней или внешней командой, исполняемой программой или пакетный файлом, то нужно добавить в переменные среды путь OpenVPN\bin.
Для этого нужно в переменную среды Path создать путь C:\Program Files\OpenVPN\bin.
Затем заново откройте командную строку и выполните пункты 4-5 заново.
Подождите до завершения процесса. В результате в паке \OpenVPN\easy-rsa\keys появиться файл dh2048.pem.
Создайте новый сертификат Certificate Authority (CA) и ключ, для чего введите команду build-ca. После завершения процесса в папке keys появятся два файла ca.crt и ca.key.
Создайте сертификат и ключ сервера. Для этого введите команду build-key-server к которой нужно добавить (в моем случае abuzov-name), то есть моя команда будет build-key-server abuzov-name. В конце дайте положительный ответ (y) на два вопроса.
Создайте сертификат и ключ для клиента. Введите команду build-key , например build-key ClientVPN1.
Создайте ключ для аутентификации пакетов, для этого выполните команду openvpn —genkey —secret keys/ta.key. В результате в папке easy-rsa\keys появится файл ta.key
Имя | Где применяется | Назначение | Секретность |
---|---|---|---|
ca.crt | Сервер + все клиенты | Корневой сертификат (Root CA certificate) | Нет |
ta.key | Сервер + все клиенты | Файл аутентификации пакетов | Да |
ca.key | Сервер | Корневой ключ (Root CA key) | Да |
dh2048.pem | Сервер | Файл параметров | Нет |
abuzov-name.csr | Сервер | Сертификат сервера | Нет |
abuzov-name.key | Сервер | Ключ сервера | Да |
ClientVPN1.csr | Только на ClientVPN1 | Сертификат клиента | Нет |
ClientVPN1.key | Только на ClientVPN1 | Ключ клиента | Да |
Теперь нужно скопировать соответствующие ключи на сервер и клиент в папку config (в моем случае это C:\Program Files\OpenVPN\config).
Создание конфигураций клиентов
Создание базовой конфигурации
1. В домашней директории создайте каталог для хранения файлов:
mkdir -p ~/client-configs/files chmod 700 ~/client-configs/files
2. Скопируйте файл с примером конфигурации в этот каталог:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
3. Откройте этот файл в текстовом редакторе и внесите изменения:
nano ~/client-configs/base.conf
3.1. Найдите директиву , которая сообщает клиенту адрес сервера OpenVPN. Укажите здесь IP-адрес вашего VDS-сервера:
remote IP_адрес_сервера 1194
3.2. Раскомментируйте директивы user и group, удаляя “;”:
user nobody group nogroup
3.3. Найдите директивы ca, cert и key и закомментируйте их, добавив #:
3.4. Добавьте настройки и с такими же значениями, как в файле , а также директиву со значением 1.
cipher AES-128-CBC auth SHA256 key-direction 1
3.5. Добавьте следующие закомментированные строки, которые будут необходимы для клиентов на Linux, использующих файл /etc/openvpn/update-resolv-conf. Для таких клиентов потребуется раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Сохраните и закройте файл.
Скрипт для генерации конфигов
Далее необходимо создать скрипт, который будет генерировать файлы конфигурации с сертификатами, ключами и файлами шифрования и размещать их в директории .
1. Создайте и откройте файл внутри директории :
nano ~/client-configs/make_config.sh
2. Вставьте в него следующий блок директив:
#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn
3. Сохраните и закройте файл.
4. Сделайте его исполняемым:
chmod 700 ~/client-configs/make_config.sh
Создание конфигураций
Ниже мы рассмотрим создание сертификата для сервера, имеющего доступ во внутреннюю сеть. Аналогичным образом вы сможете создать сертификаты для любого количества клиентов, каждый раз передавая скрипту уникальное значение.
Для создания первого сертификата и ключа мы будем использовать параметр cserver1.
Для создания файлов без пароля (это облегчит автоматические соединения), используйте команду build-key:
cd ~/openvpn-ca source vars ./build-key cserver1
В процессе создания файлов нажимайте Enter для подтверждения (все необходимые значения уже введены). Не задавайте challenge password. При завершении процесса дважды укажите y в ответ на запросы о подписи и подтверждении создания сертификата.
Сгенерируйте конфигурацию для этих файлов. Для этого перейдите в директорию и воспользуйтесь созданным скриптом:
cd ~/client-configs ./make_config.sh cserver1
Если всё прошло успешно, в директории будет создан файл :
Этот файл необходимо передать соответствующему клиенту. Скачать конфигурацию можно по SFTP.
Настройка сервера
Переходим в папку C:\Program Files\OpenVPN\config-auto (или для старой версии C:\Program Files\OpenVPN\config) и создаем файл server.ovpn. Открываем его на редактирование и приводим к следующему виду:
port 443
proto udp
dev tun
dev-node «VPN Server»
dh «C:\\Program Files\\OpenVPN\\ssl\\dh.pem»
ca «C:\\Program Files\\OpenVPN\\ssl\\ca.crt»
cert «C:\\Program Files\\OpenVPN\\ssl\\cert.crt»
key «C:\\Program Files\\OpenVPN\\ssl\\cert.key»
server 172.16.10.0 255.255.255.0
max-clients 32
keepalive 10 120
client-to-client
compress
ncp-disable
fast-io
cipher AES-256-CBC
persist-key
persist-tun
status «C:\\Program Files\\OpenVPN\\log\\status.log»
log «C:\\Program Files\\OpenVPN\\log\\openvpn.log»
verb 4
mute 20
* где port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных, например 1194, занятые порты в Windows можно посмотреть командой netstat -a); dev-node — название сетевого интерфейса; server — подсеть, в которой будут работать как сам сервер, так и подключенные к нему клиенты.
** так как в некоторых путях есть пробелы, параметр заносится в кавычках.
*** при использовании другого порта необходимо проверить, что он открыт в брандмауэре или на время тестирования отключить его.
В сетевых подключениях Windows открываем управление адаптерами — TAP-адаптер переименовываем в «VPN Server» (как у нас указано в конфигурационном файле, разделе dev-node):
Теперь открываем службы Windows и находим «OpenVpnService». Открываем ее, настраиваем на автозапуск и включаем:
Ранее переименованный сетевой интерфейс должен включиться:
VPN-сервер работает. Проверьте, что сетевой адаптер VPN Server получил IP 172.16.10.1. Если он получает что-то, на подобие, 169.254…, выключаем сетевой адаптер — перезапускаем службу OpenVpnService и снова включаем сетевой адаптер.
Настройка клиента
На сервере
На сервере генерируем сертификат для клиента. Для этого сначала чистим файл index.txt в папке C:\Program Files\OpenVPN\easy-rsa\keys.
Затем запускаем командную строку от имени администратора:
Переходим в каталог easy-rsa:
cd %ProgramFiles%\OpenVPN\easy-rsa
Далее наши действия зависят от версии RSA.
а) Создание сертификатов с RSA 3
Запускаем команду:
EasyRSA-Start.bat
Мы окажемся в среде EasyRSA Shell.
Создаем клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
* в данном примере будет создан сертификат для client1.
После вводим пароль, который указывали при создании корневого сертификата.
Теперь из папки pki копируем файлы:
- issued/client1.crt
- private/client1.key
- ca.crt
- dh.pem
- ta.key
… и переносим их на клиентский компьютер.
б) Создание сертификатов с RSA 2
Запускаем vars.bat:
vars.bat
И генерируем сертификат первого пользователя:
build-key.bat client1
* на все запросы наживаем Enter, кроме Common Name — в данном поле вводим имя клиента (в нашем случае, просто client1). В конце подтверждаем введенную информацию — y.
** На каждого клиента нужно сгенерировать свой сертификат, в противном случае, им будет присваиваться один и тот же IP-адрес, что будет приводить к конфликту.
Получиться, что-то на подобие:
По умолчанию, для Common Name будет подставляться значение из vars.bat — но с ним сертификат не будет создаваться. Необходимо при создании каждого ключа подставлять значение, равное имени сертификата. Например, как выше — подставлено client1.
Теперь из папки keys копируем файлы:
- client1.crt
- client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
На клиенте
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
* по сути, это тот же файл, который скачивался для сервера.
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее сертификаты, которые перенесли с сервера.
Теперь открываем блокнот от имени администратора и вставляем следующие строки:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
compress
ncp-disable
fast-io
cipher AES-256-CBC
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
float
keepalive 10 120
persist-key
persist-tun
verb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы. Для боевой среды это будет внешний адрес.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно). Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
Создание ключей (производится только на сервере. затем необходимые ключи копируются с сервера на клиенты).
Переходим в каталог со скриптами создания ключей шифрования:
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Открываем файл, содержащий переменные для скриптов:
nano vars
изменяем следующие параметры под свою организацию:
export KEY_COUNTRY=»RU»
export KEY_PROVINCE=»PS»
export KEY_CITY=»Pskov»
export KEY_ORG=»MegaHolod»
export KEY_DIR=»/etc/openvpn/keys»
Последний — директория, куда будут сохраняться созданные ключи.
Заносим переменные из только что отредактированного файла в память
source ./vars
Перед созданием ключей запускаем скрипт:
./clean-all
Далее переходим непосредственно к генерированию ключей путем запуска соответствующих скриптов. Так как в файл с переменными мы уже занесли нужные значения, жмем просто Enter в ответ на вопросы скриптов, за исключением:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Итак создаем CA ключ:
./build-ca
Создаем DH ключ (нужен только серверу):
./build-dh
Создаем private key для сервера (gate — имя сервера):
./build-key-server gate
Создаем ключи в PKCS #12 формате для машин-клиентов;
./build-key-pkcs12 mg
./build-key-pkcs12 npn
./build-key-pkcs12 westfood
Создаем TLS-ключ (Общий для сервера и клиента):
openvpn —genkey —secret /etc/openvpn/keys/ta.key
Из папки «/etc/openvpn/keys» нужно скопировать ta.key и *.p12 соответствующий клиенту на машины-клиенты.
Настраиваем сервер (создаем файл-конфиг и заполняем его):
touch /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
port 17993 # порт, на котором будет слушать сервер
proto tcp # протокол (по умолчанию udp)
dev tun # тип устройства (tun или tap)
############################ KEYS #######################################
tls-server # явно указывает, что данный хост является tls-server
tls-auth keys/ta.key 0 # 0-сервер , 1- для конфига клиента
ca /etc/openvpn/keys/ca.crt # файл сертификата для CA
cert /etc/openvpn/keys/gate.crt # сертификат сервера
key /etc/openvpn/keys/gate.key # ключ сервера
dh /etc/openvpn/keys/dh1024.pem # файл с ключем Диффи-Хелмана
########################## END KEYS #####################################
# автоматически присваивает адреса всем клиентам (DHCP) в указанном
# диапазоне с маской сети. Данная опция заменяет ifconfig и может
# работаеть только с TLS-клиентами в режиме TUN, соответственно
# использование сертификатов обязательно.
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов
push «route 10.10.10.0 255.255.255.0» # передача клиенту маршрута к сетке,
# в которой сервер.
# каждые 10 секунд посылать ping на удаленный хост, и, если за 60 секунд
# не было получено ни одного пакета — то перезапускать туннель.
keepalive 10 60
# параметр сжатия трафика, идущего через виртуальный туннель.
# Может принимать значения yes, no, adaptive.
# Последнее используется по умолчанию.
comp-lzo
# Для улучшения безопасности рекомендовано запускать
# все сервисы с минимальными правами. Openvpn будет работать от имени nobody.
user nobody
group nogroup
persist-key # указывает не перечитавать файлы ключей при перезапуске туннеля
persist-tun # данная опция оставляет без изменения устройства tun/tap
#при перезапуске OpenVPN.
# сервер работает в режиме демона
daemon
############################ LOGS #######################################
status openvpn-status.log # указывает путь к статус-файлу,
# в котором содержится информация о текущих соединениях и
# информация о интерфейсах TUN/TAP
log-append openvpn.log # дописывать сообщения в лог-файл, а не перезаписывать.
verb 4 # уровень логирования
mute 20 # в лог будет записываться только по 20 сообщений из одной категории
########################### END LOGS ####################################
client-to-client # позволяет клиентам видеть друг друга (сети)
client-config-dir /etc/openvpn/ccd # папка содержащая маршруты к сетям
# клиентов и посылаемые клиентам ip адреса клиента и сервера
ccd-exclusive # каждому клиенту свои настройки
management localhost 7505
tun-mtu 1500 # устанавливает максимальный размер MTU
tun-mtu-extra 32
mssfix 1450
# маршруты к сетям клиентов
route 192.168.10.0 255.255.255.0 10.8.0.2
route 192.168.0.0 255.255.255.0 10.8.0.2
route 192.168.2.0 255.255.255.0 10.8.0.2