Свершилось! Я наконец-то смог настроить это грешное подключение!
Расклад такой: Есть компьютер с 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: Disable
Public 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 и пробуем подключаться. Должно работать.