Настройка OpenVPN в Ubuntu
OpenVPN - открытая реализация одной из технологий VPN, предназначенная для организации защищенных виртуальных частных сетей между территориально удаленным локальными сетями, а также отдельными клиентами. Безопасность туннелей обеспечивается шифрованием с помощью OpenSSL.
Как работает OpenVPN?
По окончании настройки сервера и его запуске, он перейдет в режим готовности приема и перенаправления внешних защищенных SSL-соединений на виртуальный сетевой адаптер (tun/tap).
По желанию, маршрутизация сервера может быть настроена таким образом, чтобы Интернет-трафик клиентов проходил через сервер и становился трафиком сервера. В этом случае OpenVPN будет выполнять проксирование трафика (proxy).
Что требуется от операционной системы?
Перед установкой OpenVPN необходимо убедиться в корректности базовых параметров.
1. У сервера есть хотя бы один “белый” статичный IP-адрес. Т.е. сервер должен быть доступен из сети Интернет. Если адрес динамический, но сервер все же остается быть доступным из глобальной сети - воспользуйтесь услугами DynDNS.
2. Разрешена загрузка и установка пакетов из официальных репозиториев. Для проверки выполните cat /etc/apt/sources.list. Строки с указаниями репозиториев должны быть раскомментированы (не должно быть символа “#” решетка в начале строки).
3. Должны быть верно указаны параметры сети - hostname, параметры DNS-серверов.
Для обеспечения должного уровня безопасности, рекомендуем ознакомиться с нашими рекомендациями.
Приступаем к установке.
Все действия по установке будем выполнять от пользователя root.
1. Обновляем информацию о репозиториях:
2. Устанавливаем текущие обновления системы и установленных программ:
3. Устанавливаем OpenVPN:
Важно. В базовых репозиториях, зачастую отсутствует новейшая версия пакета. Разработчики OpenVPN ведут собственный репозиторий, о том как его настроить можно ознакомиться на официальном сайте.
4. Аналогичным образом устанавливаем пакет easy-rsa:
Действия после установки.
Размещаем скрипты easy-rsa:
Подготавливаем публичные ключи (PKI - Public Key Infrastructure):
1. Переходим в директорию /etc/openvpn/easy-rsa:
2. Создаем символьную ссылку на файл конфигурации openssl:
3. Инициализируем скрипт vars:
Система сообщит: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
4. Выполняем
5. Для создания центра сертификации выполняем скрипт:
В ходе своей работы, программа задаст несколько вопросов. Отвечать на них следует латиницей. Если вы не заполните какое-либо поле, программа подставит значения по умолчанию, обычно указанные в скобках.
Создаем ключ сервера.
Для создания ключа сервера выполним команду:
Следует обратить внимание, что процесс похож на генерацию сертификата центра сертификации, однако, перед подписанием сертификата программа задаст 2 уточняющих вопроса. Если все указано верно, отвечаем “y”.
Генерация клиентских ключей.
Аналогично генерации серверных ключей создаются и клиентские:
Следует обратить внимание, что созданный client1.key не имеет парольной или криптографической защиты. Это может привести к тому, что любой пользователь завладевший файлом может попробовать подключиться к серверу. Если такая угроза существует, лучше генерировать ключи другим скриптом:
Скрипт запросит парольную фразу в самом начале. Далее процесс ничем не отличается от генерации ключей сервера и простого клиента.
Следует помнить, что имена ключей должны быть уникальными. Один пользователь - один ключ с уникальным именем.
Бывает так, что в процессе работы сервера, по прошествии некоторого времени, необходимо создать еще один или несколько сертификатов. Для этого потребуется повторно инициализировать скрипт vars и только потом запустить процесс генерации ключа:
Генерация ключа Диффи-Хеллмана
Благодаря протоколу Диффи-Хеллмана, две и более стороны могут получить один секретный ключ, который позволит выстроить защищенный канал связи. Генерируются ключи командой:
Результат будет примерно таким.
По окончании работы программы, в директории /etc/openvpn/easy-rsa/keys/ появится файл dh2048.pem
Перемещение сертификатов и ключей
Сервер
Ключи и сертификаты созданы. Настало время раздать их пользователям, а серверные ключи скопировать в соответствующие каталоги на сервере.
1. Переходим в каталог с ключами:
2. Копируем только необходимые серверу файлы:
Важно понимать, что перечисленные выше файлы являются основой работы и безопасности VPN сервера. Утеря или подмена этих файлов может иметь крайне негативные последствия. Важно хранить их в надежном месте и не передавать по открытым каналам связи.
Клиенты
Клиенту понадобится всего 3 файла ca.crt, client1.crt, client1.key. Каждому клиенту необходимо отдавать только его ключи. Данные файлы можно разместить в директории /etc/openvpn на машине клиента, если она под управлением Linux-подобной ОС.
В ОС Windows их следует разместить в пользовательский каталог.
Настройка сервера и клиента
Сервер
Большинство устанавливаемых программ в ОС Linux имеют так называемые sample-файлы. Эти файлы содержат примеры настройки и объяснения их. OpenVPN не стал исключением. Распакуем серверный конфигурационный файл в директорию /etc/openvpn:
С полученным файлом сервер уже готов к работе. Он сконфигурирован с возможностью туннелирования, однако не имеет возможности к проксированию, т.е. отправки клиентского трафика от своего имени. Исправим это.
Для начала, проверяем какие файлы оказались в директории /etc/openvpn:
Открываем файл конфигурации:
И проверяем соответствие файлов прописанных в конфигурации с файлами находящимися в каталоге. Интересны строки после “SSL/TLS root certificate (ca), certificate (cert), and private key (key).”
Если имена отличаются от существующих, следует внести необходимые исправления. Выходим из редактора сочетанием клавиш Ctrl + X.
Запускаем сервер:
Проверим результат запуска:
Настройки клиента.
Предполагается, что на стороне клиента уже установлен пакет OpenVPN.
1. Копируем файл клиентских настроек в домашний каталог пользователя:
2. Копируем сгенерированные ключи - client1.key, client1.crt, ca.crt:
3. Редактируем файл конфигурации клиента:
4. Находим закомментированные строки “# The hostname/IP and port of the server”. Для параметра remote меняем my-server-1 на IP-адрес сервера или его доменное имя.
5. В том же файле, ниже, находим блок “#SSL/TLS parms.”. Редактируем имена ключей.
6. Выходим из редактирования сочетанием Ctrl + X. На вопрос о сохранении изменений отвечаем “Y”. Имя файла оставляем неизменным.
7. Переносим файлы client1.key, client1.crt, ca.crt и client.conf на компьютер клиента с которого будет происходить подключение к серверу OpenVPN.
Важно! Некоторые клиентские реализации OpenVPN работают только с файлами *.ovpn. В подобных случаях достаточно изменить расширение файл (переименовать) с client.conf на client.ovpn.
8. Подключаемся к серверу командой:
Следует обратить внимание, что проксирование до сих пор не настроено. При этом, когда клиентская машина подключена к OpenVPN-серверу, доступ в Интернет прекращается. Связано это с тем, что созданный адаптер TUN, а в месте с ним и сам сервер, являются шлюзом по умолчанию.
Настройка маршрутизации.
1. На сервере редактируем файл server.conf:
2. В файле находим следующую строку и удаляем перед ней символ “;”, таким образом раскомментируем ее:
3. Сохраняем и закрываем редактор.
4. Редактируем файл /etc/sysctl:
5. В конец файла добавляем следующую строку:
Это разрешит системе пересылать трафик между интерфейсами, но изменения вступят в силу только после перезагрузки. Сохраняем файл и закрываем редактор.
6. Разрешаем форвардинг пакетов без перезагрузки сервера:
7. Настроим NAT в iptables. Поочередно вводим команды:
Также их можно просто вписать в файл /etc/rc.local до строки “exit 0” или выполнить настройку firewall как это указано в нашей статье.
Сервер уже готов к использованию. Однако, задача проксировать весь трафик, а следовательно необходимо настроить форвардинг DNS-запросов. Настроим.
1. Устанавливаем dnsmasq
Если установка выполняется в ОС Ubuntu:
Несмотря на то, что в большинстве современных версий ОС Ubuntu dnsmasq уже предустановлен, в старых версиях необходимо выполнить так:
Возможно запустится диалоговое окно мастера установки. В нем будет 2 вопроса. В первом случае, на вопрос “prepare /etc/resolv.conf for dynamic updates” отвечаем “Yes”, а на следующий - “Append original file to dynamic file?” отвечаем “No”.
Для ОС Debian 7:
2. Отредактируем файл настроек dnsmasq:
Добавим следующие параметры:
Сохраняем файл и закрываем редактор.
3. Редактируем файл сетевых настроек:
Требуется указать адрес DNS-серверов в соответствующих секциях настроек адаптера:
Возможно это действие уже произведено,. Повторно его выполнять не нужно.
4. Учитывая особенность запуска и последующей работы dnsmasq - возможность аварийного завершения до инициализации виртуального tun-адаптера, добавим следующую строчку в файл rc.local, перед “exit 0”:
5. Теперь разрешим клиентам OpenVPN-сервера использовать DNS. С помощью редактора nano раскомментируем строку:
Фиксируем изменения в файле.
6. Перезагружаем сервер:
Проверка работы
Выполняем повторное подключение к серверу. Пробуем открыть сайт для проверки IP-адреса. В результате должен быть IP-адрес сервера.