Настройка доступа к домашней сети с подключением к роутеру с DD-WRT через OpenVPN

Свершилось! Я наконец-то смог настроить это грешное подключение!

Расклад такой: Есть компьютер с 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\», имейте в виду.

Создание сертификатов для сервера и клиента

  1. Запускаем консоль CMD от имени администратора: Пуск\поиск\CMD\правой кнопкой мыши\Запустить от имени администратора. Выделенное жирным шрифтом можно копировать прямо в командную строку 🙂
  2. Переходим в папку с установленным OpenVPN:
    cd %PROGRAMFILES%\OpenVPN\easy-rsa
  3. Создаем папку для ключей и делаем копии файлов, необходимых для работы:
    mkdir keys && copy serial.start keys\serial && copy index.txt.start keys\index.txt
    Будет создана папка «keys», а в ней — два файла (serial и index.txt)
  4. Делаем начальную инициализацию, выполняя
    init-config.bat
    В результате будет создан файл vars.bat
  5. Открываем 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 и т.д.). Нужные значения ставим после знака «=». Сохраняем файл и закрываем тестовый редактор.
  6. Создаем ключ Диффи-Хеллмана (Diffie-Hellman key) (Файл keys\dh1024.pem):
    build-dh.bat
    Внимание! Если при этом вылезет сообщение «WARNING: can’t open config file: /etc/ssl/openssl.cnf», значит вы не добавили строку в vars.bat из пятого пункта моей инструкции. А зря! 🙂
  7. Создаем корневой сертификат (Certificate Authority) (файлы keys\ca.key и keys\ca.crt):
    build-ca.bat
    Если вы заполнили переменные внизу файла vars.bat, то на все вопросы можно просто отвечать кнопкой enter, все данные будут подставлены автоматически.
  8. Создаем серверный сертификат с именем server (Совершенно произвольное имя, не связанное ни с чем, просто чтобы различать)
    build-server-key.bat server
    Будут созданы файлы keys\server.key, keys\server.crt, keys\server.csr
  9. Создаем ключи для клиента (клиентов), где 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, в других версиях интерфейс может отличаться, имейте в виду…

  1. Идем в 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

  2. Жмем Save -> Apply Settings
  3. Возможно, придется установить правила для файлволла, но у меня заработало и так.

Настройка клиента

  1. Устанавливаем OpenVPN, если он еще не установлен на клиенте. Галочки, про которые я говорил вначале, ставить не нужно.
  2. Создаем папку keys в %PROGRAMFILES%\OpenVPN\easy-rsa и копируем в нее файлы client1.key, client1.crt и ca.crt, созданные ранее.
  3. Копируем файл %PROGRAMFILES%\OpenVPN\sample-config\client.ovpn в папку %PROGRAMFILES%\OpenVPN\config\
  4. Изменяем следующие строки в скопированном файле:
    • Убираем точку с запятой в строке 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 и пробуем подключаться. Должно работать.

3 комментария к “Настройка доступа к домашней сети с подключением к роутеру с DD-WRT через OpenVPN”

  1. Уважаемый автор подправте пожалуйста статью. Добавьте вот эти строки;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

    Ответить
  2. Нужно в конце пункта 5 запустить vars.bat, чтобы установились переменные окружения!

    Ответить

Оставьте комментарий