Свершилось! Я наконец-то смог настроить это грешное подключение!
Расклад такой: Есть компьютер с Windows 7 x64, который очень хочет попасть в домашнюю сеть. Дома стоит роутер с DD-WRT. Я много раз пытался настроить подключение, но всякий раз бросал то дело из-за каких-либо проблем с настройкой. Инструкций по настройке Open VPN в сети просто море, но я сюда записываю свой велосипед, чтобы потом не собирать опять по всей сети по кускам.
Выражаю благодарность автору инструкции, которой я пользовался для создания ключей, бессовестно утащу себе немножко текста оттуда, для сохранности. Вот ссылка на источник.
Внимание! Из-за автоформатирования кавычки превратились хрен знает во что, поэтому их нужно заменять на двойные прямые везде. (Shift+2 на русской раскладке)
Установка
Первым делом качаем последний дистрибутив OpenVPN отсюда: http://openvpn.net/index.php/open-source/downloads.html
Если будете генерировать сертификаты, а это нужно в первый раз обязательно, то устанавливаем при установке галки «OpenSSL utilites» и «OpenVPN RSA Certificate Management Scripts». По сути, все галочки в списке будут отмечены. Почему-то этом на это не ставится акцент, и возникают проблемы. Хотя может быть, я не шибко внимательно читал. Для установки на других компьютерах эти галки ставить не нужно, если есть уже созданные сертификаты для этих компьютеров. Обратите внимание, что у меня 64х битная версия Windows и я скачал 64х битный же дистрибутив OpenVPN. В дальнейшем я буду исходить из того, что установка произведена в «c:\Program Files\OpenVPN\», имейте в виду.
Создание сертификатов для сервера и клиента
- Запускаем консоль CMD от имени администратора: Пуск\поиск\CMD\правой кнопкой мыши\Запустить от имени администратора. Выделенное жирным шрифтом можно копировать прямо в командную строку 🙂
- Переходим в папку с установленным OpenVPN:
cd %PROGRAMFILES%\OpenVPN\easy-rsa - Создаем папку для ключей и делаем копии файлов, необходимых для работы:
mkdir keys && copy serial.start keys\serial && copy index.txt.start keys\index.txt
Будет создана папка «keys», а в ней — два файла (serial и index.txt) - Делаем начальную инициализацию, выполняя
init-config.bat
В результате будет создан файл vars.bat - Открываем vars.bat для редактирования. Помните, что текстовый редактор нужно открывать от имени администратора, иначе ему может не хватить прав на сохранение файла. После строки set KEY_CONFIG=openssl-1.0.0.cnf добавляем строку set OPENSSL_CONF=%HOME%\%KEY_CONFIG%. Это нужно для того, чтобы openssl, поставляемый с дистрибутивом OpenVPN, не ругался на отсутствие файла /etc/ssl/openssl.cnf, который он использует по-умолчанию. Это нужно для версии OpenVPN 2.3.2 и ниже, возможно в последующих релизах они исправят это. Далее пролистываем файл до конца и заполняем данные о сертификатах, чтобы не вводить их кучу раз в процессе создания сертификатов (set KEY_COUNTRY и т.д.). Нужные значения ставим после знака «=». Сохраняем файл и закрываем тестовый редактор.
- Создаем ключ Диффи-Хеллмана (Diffie-Hellman key) (Файл keys\dh1024.pem):
build-dh.bat
Внимание! Если при этом вылезет сообщение «WARNING: can’t open config file: /etc/ssl/openssl.cnf», значит вы не добавили строку в vars.bat из пятого пункта моей инструкции. А зря! 🙂 - Создаем корневой сертификат (Certificate Authority) (файлы keys\ca.key и keys\ca.crt):
build-ca.bat
Если вы заполнили переменные внизу файла vars.bat, то на все вопросы можно просто отвечать кнопкой enter, все данные будут подставлены автоматически. - Создаем серверный сертификат с именем server (Совершенно произвольное имя, не связанное ни с чем, просто чтобы различать)
build-server-key.bat server
Будут созданы файлы keys\server.key, keys\server.crt, keys\server.csr - Создаем ключи для клиента (клиентов), где client1 — совершенно произвольное имя, просто чтобы различать сертификаты:
build-key.bat client1
Будут созданы файлы keys\client1.key, keys\client1.crt, keys\client1.csr
Если вдруг вас раздражает куча файлов в папке keys, то:
Для клиента нужны только файлы keys\client1.key, keys\client1.crt и keys\ca.crt.
Для сервера нужны только файлы keys\server.key, keys\server.crt и dh1024.pem
Прочие файлы из папки keys можно удалить, они нужны для последующего создания сертификатов, но для работы необязательны. Но если вдруг вы захотите создать еще сертификатов для других клиентов и не сохраните прочие файлы, придется все начинать с пункта 1 и менять на всех устройствах на новые сертификаты.
Настройка DD-WRT
Эта инструкция для DD-WRT v24SP2- (03/25/13) std, в других версиях интерфейс может отличаться, имейте в виду…
- Идем в Services->VPN и там выставляем:
OpenVPN: Enable
Start Type: WAN Up
Config as: Server
Server mode: Bridge (TAP)
DHCP-Proxy mode: Enable
Port: 1194
Tunnel Protocol: UDP
Encryption Cipher: Blowfish CBC
Hash Algorithm: SHA1
Advanced Options: DisablePublic Server Cert: Берем из файла server.crt, причем скопировать нужно все, начиная с «——BEGIN CERTIFICATE——» и заканчивая «——END CERTIFICATE——» включительно. С дальнейшими файлами — по той же схеме 🙂
CA Cert: из файла ca.crt
Private Server Key: server.key
DH PEM: из файла dh1024.pem - Жмем Save -> Apply Settings
- Возможно, придется установить правила для файлволла, но у меня заработало и так.
Настройка клиента
- Устанавливаем OpenVPN, если он еще не установлен на клиенте. Галочки, про которые я говорил вначале, ставить не нужно.
- Создаем папку keys в %PROGRAMFILES%\OpenVPN\easy-rsa и копируем в нее файлы client1.key, client1.crt и ca.crt, созданные ранее.
- Копируем файл %PROGRAMFILES%\OpenVPN\sample-config\client.ovpn в папку %PROGRAMFILES%\OpenVPN\config\
- Изменяем следующие строки в скопированном файле:
- Убираем точку с запятой в строке dev tap, и ставим в начале строки dev tun
- В строке remote my-server-1 1194 заменям my-server-1 на адрес вашего DD-WRT в Интернет.
- Меняем строки:
- ca ca.crt на ca «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt»
- cert client.crt на cert «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\alexbit-3820tg.crt»
- key client.key на key «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\alexbit-3820tg.key»
В итоге, если выкинуть все комментарии, в файле %PROGRAMFILES%\OpenVPN\config\client.ovpn останется следующее:
client
dev tap
proto udp
remote АДРЕС СЕРВЕРА 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt»
cert «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\alexbit-3820tg.crt»
key «c:\\Program Files\\OpenVPN\\easy-rsa\\keys\\alexbit-3820tg.key»
ns-cert-type server
comp-lzo
verb 5
Вот в принципе и вся настройка. Дальше запускаем OpenVPN GUI и пробуем подключаться. Должно работать.
Уважаемый автор подправте пожалуйста статью. Добавьте вот эти строки;2) Переходим в директорию C:\Program Files\OpenVPN\easy-rsa при помощи команды:
cd \Program Files\OpenVPN\easy-rsa
3) Запускаем файл init-config.bat в командной строке:
init-config.bat
После запуска файла будет создан файл vars.bat.
4) Файл vars.bat необходимо открыть в текстовом редакторе (блокнот или Wordpad) и изменить данные для подписи ключей на свои личные. Отредактировать можно информацию в следующих строках:
set KEY_COUNTRY=US #Страна
set KEY_PROVINCE=CA #Область
set KEY_CITY=SanFrancisco #Город
set KEY_ORG=OpenVPN #Название компании
set KEY_EMAIL=mail@host.domain #Контактный e-mail
Также, в случае отсутствия записи вида:
set OPENSSL_CONF=C:\Program Files\OpenVPN\easy-rsa\openssl-1.0.0.cnf
необходимо её добавить под строкой:
set KEY_CONFIG=openssl-1.0.0.cnf
Примечание: путь расположения и имя конфигурационного файла могут отличаться от указанных в примере. Поэтому предварительно убедитесь в том, что файл расположен и именован в соответствии с указанными данными.
5) Для создания index и serial файлов, выполняем поочередно следующие команды в командной строке:
vars
clean-all
6) Следующей командой создается СА-ключ, которым будет подписываться будущий SSL-сертификат. После запуска команды будут запрошены значения параметров. Если до этого вы внесли корректировки в файл vars.bat, то на параметры, указанные в 4-м шаге можно отвечать путём нажатия Enter. Исключением является параметр – Common Name. В нём необходимо ввести хостнейм сервера, либо доменное имя.
build-ca
7) Создаем ключ Диффи-Хельмана.
build-dh
8) Далее создаем сертификат и ключ для сервера:
build-key-server
В нашем случае будет следующая команда:
build-key-server server
Заполнение производится по аналогии 6-го шага. В поле Common Name в нашем случае указываем server. На оба вопроса «Sign the certificate? [y/n]» и «1 out of 1 certificate requests certified, commit? [y/n]» отвечаем согласием путём ввода «y», и затем нажимаем Enter.
9) Cоздаем отдельный ключ для каждого клиента:
build-key client1
Вводим необходимые контактные данные. В Common Name указываем client1.
Переносим файлы из папки /keys в папку /config.
10) Из папки /sample-config копируем файл server.ovpn в папку /config
Нужно в конце пункта 5 запустить vars.bat, чтобы установились переменные окружения!
Делаю пункт 6, пункт 5 сделан, в итоге все равно выдается ошибка!