В этом описании будет рассмотрена настройка OpenVPN, как серверной части так и клиентской. Для OpenVPN роль клиента или сервера задаётся только конфигурационным файлом. Исполняемый модуль для обеих ролей один и тот же.
Загрузка и установка OpenVPN
Загрузите инсталятор с сайта openvpn.net (выбирайте свежую версию, сейчас это OpenVPN 2.3.5 — выпущенная 2014.10.28) и запустите его на компьютере который будет выступать сервером и произведите установку. Более ранние версии ставить не рекомендуется по причине наличия серьёзной уязвимости в пакете OpenSSL.
Произведите такю же установку на всех комьпютерах которые будут выступать в роли клиентов.
Сертификаты и ключи
Компьютер на котором генерируются ключи должен иметь максимальную защиту. Он требуется исключительно только для генерации сертификатов и подписи ключей. В другое время каталоги содержащие ключи могут быть заархивированы с паролем и спрятаны в надёжное место.
Подготовка
Зайдите в каталог C:\Program Files\OpenVPN\easy-rsa из коммандной строки. Для этого:
Нажмите Windows Key + R
Наберите “cmd.exe” и нажмите Ввод.
Появится чёрное окошко
Перейдите в нужный каталог набрав команду:
cd "C:\Program Files\OpenVPN\easy-rsa"
Инициализируйте конфигурацию OpenVPN набрав
init-config
Этот скрипт должен запускаться только один раз для одной настройки (генерации сертификатов и ключей). Повторный запуск сотрёт ранее созданные ключи и сделает невозможным создание новых ключей и весь цикл создания ключей прийдётся повторить снова.
Откройте файл с переменными в редакторе
notepad vars.bat
Отредактируйте следующие строки по своим нуждам. Поля эти справочные и ни на что не влияют. Служат исключительно для идентификации сертификатов, и если у вас будет много разных VPN то имеет смысл придать им осмысленные значения чтобы потом не запутаться.
set KEY_COUNTRY=US set KEY_PROVINCE=CA set KEY_CITY=SanFrancisco set KEY_ORG=OpenVPN set KEY_EMAIL=mail@host.domain
Рекомендую также увеличить размер ключа шифрования KEY_SIZE=2048
Сохраните файл и закройте редактор.
Затем в открытом окне коммандного интерпретатора запустите следующие скрипты:
vars clean-all
Теперь всё готово к созданию сертификатов и подписи ключей.
Создание сертификатов и подпись ключей
Создаём верхушку пирамиды доверия: ключ и сертификат центра сертификации
build-ca
Когда будет запрошено ввод страны и т д, всё что вы уже вводили раньше при редактировании файла vars.bat, оставьте всё без изменений просто нажимая Ввод. Но когда будет запрошено “Common Name” вам нужно ввести имя которое идентифицирует сертификат, например, “OpenVPN-CA”:
Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [OpenVPN]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:OpenVPN-CA Email Address [mail@host.domain]:
Теперь сертификат и ключ для сервера
build-key-server server
Снова всё оставляйте по умолчанию а на “Common Name” введите, например, “server”
И когда появится запрос подписать сертификат нажмите, введите “y”
Также когда будет запрошен commit, нажмите “y”.
Ну и наконец цикл для сертификатов и ключей каждого клиента
Для каждого клиента, выберите какое-то уникальное имя для идентификации, типа “boss-notebook” и запускайте скрипт как показано далее
build-key boss-notebook
Когда дойдёт очередь до “Common Name” введите как вы выбрали boss-notebook
Повторяйте это для каждого VPN клиента который будет соединяться с VPN сервером.
Генерация файла Diffie Hellman необходимого для установки шифрования. При размере ключа 2048 бит он генерируется довольно долго.
build-dh
Имя файла должно получиться с суффиксом размера ключа тоесть dh2048.pem
Ну и ключ для TLS
openvpn --genkey --secret ta.key
Как описано ниже в конфиге ключ этот на Windows системах может приводить к непонятным тормозам, поэтому сделайте проверьте но при малейшем подозрении закоментируйте строчки во всех конфигах.
Конфигурационные файлы
Конфигурационный файл для сервера имя может былю любым, а расширение .ovpn:
server.ovpn
port 12965 proto udp dev tun ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\server.crt" key "C:\\Program Files\\OpenVPN\\config\\server.key" # этот файл следует хранить в секрете! dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem" # опция tls-auth является своего рода HMAC файрволом и служит для защиты от DoS # однако замечено, что иногда она тормозит если в качестве сервера использовать Windows tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0 # этот файл следует хранить в секрете! # Определяем VPN сеть (она не должна конфликтовать с другими вашими сетями куда нужен будет доступ) server 10.20.30.0 255.255.255.0 # фиксированные настройки для клиентов например IP адрес в VPN сети. #client-config-dir ccd # разрешаем клиентам видеть друг друга. если нет закоментируйте эту опцию. client-to-client keepalive 10 120 cipher AES-256-CBC # Шифрование AES comp-lzo # сжатие пакетов max-clients 10 # максимальное кличество VPN клиентов. persist-key persist-tun ifconfig-pool-persist /var/log/ipp.txt status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3
Сохранить файл как C:\Program Files\OpenVPN\easy-rsa\server.ovpn
Конфигурационный файл для клиентов похож на серверный и немного проще.
client dev tun proto udp # это адрес вашего сервера. можно использовать и доменное имя remote 111.222.333.444 12965 resolv-retry infinite nobind persist-key persist-tun ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\boss-notebook.crt" key "C:\\Program Files\\OpenVPN\\config\\boss-notebook.key" # секретный tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 # секретный ns-cert-type server #log "C:\\Program Files\\OpenVPN\\log\\boss-notebook.log" cipher AES-256-CBC comp-lzo verb 3
Сохранить файл как C:\Program Files\OpenVPN\easy-rsa\boss-notebook.ovpn
Имя файла не принципиально для функционирования VPN но имена файлов клиентов стоит сделать разными, так как у них немного разное содержимое и пока что мы сохраняем их в один каталог.
Разберём теперь куда какие файлы сохранить.
Из каталога C:\Program Files\OpenVPN\easy-rsa\ с машины где генерировали сертификаты на сервер в каталог C:\Program Files\OpenVPN\config\ скопируйте файлы:
ca.crt
dh2048.pem
server.crt
server.key
server.ovpn
Из каталога C:\Program Files\OpenVPN\easy-rsa\ с машины где генерировали сертификаты на клиент в каталог C:\Program Files\OpenVPN\config\ скопируйте файлы:
ca.crt
boss-notebook.crt
boss-notebook.key
boss-notebook.ovpn
Запуск OpenVPN
Запуск OpenVPN туннеля требует привилегий администратора системы поэтому мне проще запускать через cmd.exe. На сервере и на клиенте в командной строке запустите:
net start "OpenVPN Service"
Можно запустить также и при помощи OpenVPN графического интерфейса.
Start Menu -> All Programs -> OpenVPN -> OpenVPN GUI
Затем дважды кликнуть на иконке которая появится в области иконок системного трея. В результате должно появиться окно в котором будет отображаться процесс соединения и когда всё прошло успешно окно свернётся. Но он к сожалению не всегда способен запуститься в новых системах например Windows 7. Поэтому мне предпочтителен первый способ.