OpenVPN. Установка, настройка и использование.

В данной статье будет подробно описана установка и настройка сервера OpenVPN в Ubuntu, клиентов OpenVPN на Ubuntu, Windows, Android. 

Для более удобной навигации внутри страницы можете воспользоваться оглавлением.

Оглавление.

  1. Причины использовать OpenVPN. Краткий ликбез. 
  2. Установка сервера OpenVPN. 
  3. Создание сертификатов и ключей. 
  4. Настройка сервера OpenVPN.
  5. Настройка сервера.
  6. Установка и настройка клиента OpenVPN в Ubuntu.
  7. Решение основных проблем OpenVPN.
  8. Настройка клиентских устройств OpenVPN.

Причины использовать OpenVPN. Краткий ликбез.

Давайте представим, что вы с помощью смартфона входите в личный кабинет на сайте своего банка. Коварный сосед, через открытую точку доступа которого вы последние три года бесплатно пользуетесь интернетом, перехватывает трафик. Далее он добывает заветные авторизационные данные и обчищает ваши счета.

OpenVPN — это софт, предназначенный для создания безопасного тоннеля между клиентом и сервером. Клиентом будет выступать ваш смартфон, компьютер, ноутбук и любые другие подобные устройства. Сервером — собственно сервер с Ubuntu и OpenVPN, который мы с вами сегодня начнем подготавливать. Когда мы все настроим, ваши данные сначала будут отправляться на ваш же сервер, и лишь оттуда — к основной цели, например, в банк. Та же схема будет действовать и в обратном направлении. При этом ни провайдер, ни зловредный владелец открытой точки доступа, ни кто-либо еще не сможет легко завладеть данными.

На деле все не так уж плохо. Все больше сайтов переходит на защищенный протокол HTTPS вместо привычного HTTP, что снижает вероятность утечки информации. Но есть и другие причины использовать OpenVPN, например, доступ к ресурсам, которые заблокировал провайдер. Кроме того, сайт или другой ресурс, к которому вы обращаетесь, не получит ваш IP, физические координаты, название провайдера и т. д. Впрочем, слишком уж полагаться на это не стоит: при наличии желания и возможностей найти можно кого угодно.

Вернуться к оглавлению ->

Установка сервера OpenVPN.

Я не буду описывать процесс выбора сервера, VPS/VDS за несколько долларов в месяц найти проще простого. Логин и пароль вам предоставит хостер. Я исхожу из того, что на удаленном сервере уже остановлена ОС Ubuntu и вы можете действовать от имени пользователя с достаточным уровнем прав. Подключаемся:

ssh логин@ip_вашего_сервера

После ввода пароля вы увидите приветствие удаленной машины, примерно такое:

Теперь команды, которые мы будем вводить в терминале, выполнятся на сервере. Для начала обновимся и установим OpenVPN, easy-rsa и создадим папку для ключей и сертификатов.

apt-get update
apt-get install openvpn easy-rsa
make-cadir ~/openvpn-certificates
cd ~/openvpn-certificates

Утилита easy-rsa предназначена для создания и управления сертификатами и ключами. Третьей командой мы создаем директорию, где все это будет храниться. Четвертой — перемещаемся туда сами, чтобы каждый раз не вводить полный путь.

Вернуться к оглавлению ->

Создание сертификатов и ключей.

Теперь отредактируем конфигурационный файл, хранящий переменные (в созданном нами каталоге ~/openvpn-certificates):

nano vars

Нас интересует блок, расположенный в самом низу (он на скриншоте ниже). Вписываем страну, город, адрес электронной почты. Не обязательно использовать точные и правдивые данные.

Чуть ниже, в строке export KEY_NAME впишите имя ключа. В нашем случае будет «server».

Чтобы сохранить изменения, нажмите F2 или CTRL + O, затем Y и Enter, чтобы подтвердить.

Теперь можно выполнить отредактированный нами файл:

source vars

или

. vars

Вы получите уведомление о том, каким образом очистить папку, содержащую ключи. Сейчас их там не должно быть, но на всякий случай рекомендуется все же выполнить это действие:

./clean-all

Запускаем генерацию корневого сертификата:

./build-ca

В процессе вас попросят подтвердить или изменить введенную информацию. Если вы отредактировали файл vars, достаточно просто нажимать Enter.

Сгенерируем ключ и сертификат для сервера:

./build-key-server server

Снова подтверждаем правильность введенных ранее данных. В ответ на просьбу установить еще и пароль, а также указать название компании, нажимаем Enter. Подтверждаем согласие создать сертификат нажатием Y.

Еще пара команд для генерации сертификатов:

./build-dh
openvpn --genkey --secret keys/ta.key

Теперь генерируем сертификат для клиента. Каждый клиент требует отдельного сертификата, поэтому давайте им соответствующие имена для удобства. Сгенерируем сертификат и ключ для домашнего компьютера:

./build-key home-pc

Заодно создадим сертификаты и ключи для планшета, смартфона, ноутбука:

./build-key tablet
./build-key smartphone
./build-key laptop

Имена home-pc и тд для клиентских сертификатов вы можете подобрать свои по желанию. 

Это можно сделать и позже, но тогда на сервере придется снова перейти в нужную нам папку и экспортировать переменные из файла:

~/openvpn-certificates
source vars

Все сгенерированные нами ключи и сертификаты лежат в ~/openvpn-certificates/keys:

Вернуться к оглавлению ->

Настройка сервера OpenVPN.

Итак, мы сгенерировали ключи и сертификаты. Переместимся в директорию, в которой они находятся и одной командой создадим их копии в нужном нам месте:

cd ~/openvpn-certificates/keys
sudo cp server.сrt server.key ca.crt ca.key dh2048.pem ta.key /etc/openvpn

Ключи, созданные для клиентов, копировать сюда не нужно.

Теперь необходимо подготовить конфигурационный файл OpenVPN. Разработчики советуют не создавать его с нуля, а использовать ими же предоставленный образец в качестве отправной точки. Так и поступим:

sudo gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
sudo nano /etc/openvpn/server.conf

Если вы все сделали правильно, перед вами окажется содержимое конфигурационного файла сервера OpenVPN:

Для начала убедитесь, что названия файлов ключей и сертификатов соответствуют созданным вами. Нас интересуют строки, начинающиеся с:

  • ca
  • cert
  • key
  • dh

Просто убедитесь, что в названия файлов, которые мы недавно скопировали в /etc/openvpn/, совпадают с указанными здесь. Если это не так, измените значения в файле соответствующим образом.

Находим строку со следующим содержимым:

и удаляем точку с запятой в начале (раскомментируем строку).

Листаем дальше, пока не увидим строку „# Select a cryptographic cipher.“

Немного ниже, в этом же блоке, нам на выбор предлагается три варианта шифрования. Blowfish, первый из них, используется по умолчанию. Но в данном случае стандартный вариант не является лучшим. Сообщество OpenVPN рекомендует использовать AES 256 bit. Последуем их совету, раскомментируем вторую строку и изменим 128 на 256:

Если такой строки нет, ее можно просто добавить.

Под ней добавим еще одну строку:

Это обеспечит дополнительную защиту.

Раскомментируйте следующую строку для того, чтобы весь трафик клиента проходил через сервер.

Чтобы сервер имел доступ к общедоступным DNS, раскомментируйте:

Еще ниже раскомментируйте строки:

чтобы OpenVPN запускался от имени пользователя с минимальными правами.

После этого нажмите F2, чтобы выйти из nano, затем Y, чтобы согласиться сохранить изменения и, наконец, Enter для окончательного подтверждения.

Вернуться к оглавлению ->

Настройка сервера.

Теперь нам необходимо скорректировать настройки непосредственно самого сервера (в нашем случае Ubuntu). Для этого выполним:

sudo nano /etc/sysctl.conf

В открывшемся файле находим и раскомментируем строку:

Сохраняем файл тем же способом, что и раньше.

Теперь нам необходимо внести поправки в настройки фаервола.

Определяем сетевой интерфейс:

ip route

Нас интересует строка, которая начинается с default, а конкретнее — название интерфейса следующее за ip-адресом и словом dev. В моем случае это eth0.

Запоминаем и переходим к редактированию правил фаервола:

sudo nano /etc/ufw/before.rules

Вставляем следующие строки после первого блока, начинающегося с rules.before перед следующим блоком, который начинается с #Don't delete:

Не забываем сохранить перед выходом.

Еще немного настроек для фаервола. Выполняем:

sudo nano /etc/default/ufw

и редактируем строку DEFAULT_FORWARD_POLICY="DROP", меняя «DROP» на «ACCEPT». Сохраняем.

Разрешим подключение к порту 1194, который OpenVPN использует по умолчанию. На всякий случай включим ведение логов — мало ли, какая информация нам потребуется в процессе отладки или позже, уже в процессе использования. Обязательно разрешим доступ ssh, чтобы не утратить контроль над сервером. После этого включим фаервол:

sudo ufw allow 1194/udp
sudo ufw logging on
sudo ufw allow ssh
sudo ufw enable

После ввода последней команды потребуется подтверждение. Вводим Y и жмем Enter.

Если в конфигурационном файле /etc/openvpn/server.conf вы изменили номер порта, в вышеприведенной команде необходимо указать именно ваше значение вместо 1194.

Если кроме работы с OpenVPN сервер выполняет еще какие-либо задачи, может потребоваться разрешить работу с другими портами. Для большинства часто используемых сервисов у ufw есть готовые наборы настроек, которые можно включить так же, как мы сделали это для ssh.

Вернуться к оглавлению ->

Установка и настройка клиента OpenVPN в Ubuntu.

Для настройки клиента OpenVPN на Ubuntu (в примере использовалась Ubuntu 16.04) нам понадобится тот же пакет, что и для установки сервера. Соответственно, все команды мы будем выполнять на клиенте (например, на домашнем ПК). Выполните в консоли:

sudo apt-get install openvpn

Далее потребуется создать файл конфигурации клиента. Как и в случае с настройкой сервера, возьмем образец, предоставленный разработчиками, чтобы не создавать его с нуля:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf

Откроем его и внесем свои правки:

sudo gedit /etc/openvpn/client.conf

Сначала измените значение параметра remote на IP вашего сервера. Если вы по каким-либо причинам изменили номер порта, впишите соответствующее значение вместо стандартного 1194.

Раскомментируйте следующие строки так же, как делали это на сервере:

Далее найдите блок, начинающийся с # SSL/TLS parms. Внизу этого блока укажите пути к файлам ключей и сертификатов таким образом:

Имена второго и третьего файлов могут быть другими — в зависимости от того, как вы назвали клиентский сертификат и ключ на этапе создания ключей и сертификатов.

Еще ниже замените строку:

на эту:

В следующем блоке замените:

на строку:

Если в файле конфигурации сервера вы указали другой тип шифрования, то и здесь нужно ввести его же.

Скачаем с сервера файлы ключей и сертификатов и разместим их в той директории, которую мы указали выше.

sudo mkdir /etc/openvpn/keys

sudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/ca.crt /etc/openvpn/keys

Потребуется ввести пароль пользователя вашего сервера. Возможно, потребуется подтвердить согласие на подключение — для этого введите «yes». Далее тем же способом получим следующие файлы:

sudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/home-pc.crt /etc/openvpn/keys

sudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/home-pc.key /etc/openvpn/keys

sudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/ta.key /etc/openvpn/keys

Перезапустите сервис openvpn:

sudo systemctl restart openvpn

Для единоразового подключения используйте команду:

sudo openvpn client.conf

После перезагрузки соединение должно устанавливаться автоматически.

Воспользуйтесь любым сервисом проверки ip-адреса, чтобы узнать, все ли работает как нужно. Если с работающей и остановленной службой openvpn ваши IP различаются, значит, вы настроили все верно.

Вернуться к оглавлению ->

Решение основных проблем OpenVPN.

В случае проблем первым делом проверьте логи:

grep OpenVPN /var/log/syslog

Если информации о проблеме в выводе команды нет, попробуйте увеличить значение параметра verb в самом конце файла /etc/openvpn/client.conf, чтобы сделать логи более подробными. Максимальное значение — 11. После этого снова перезапустите сервис openvpn и проверьте логи еще раз.

Для большего удобства можно указать в конфигурационых файлах клиента и сервера параметр log-append, добавив после пробела желаемое расположение файла с логом. В этом случае получать информацию о происходящем будет удобнее.

Если соединение слишком медленное, попробуйте добавить в файлы конфигурации клиента и сервера (в моей серии статей это etc/openvpn/client.conf и etc/openvpn/server.conf соответственно) строки:

Не забудьте добавить эти же строки в файлы конфигурации остальных клиентов, если они есть. И сервер, и клиенты нужно будет перезапустить.

Можно также попробовать отключить сжатие трафика, после чего сравнить результаты и оставить лучший вариант. Для этого и в /etc/openvpn/server.conf, и в /etc/openvpn/client.conf нужно закомментировать (поставить «;» в начале строки) параметр comp-lzo.

Обратите внимание: состояние этой и многих других директив на сервере и клиентах должно быть одинаковым!

Вернуться к оглавлению ->

Настройка клиентских устройств OpenVPN.

Если вы успешно справились с задачей настройки сервера OpenVPN или просто заказали уже настроенный сервер, перед вами строит задача — настроить клиентские устройства. Настроить их гораздо проще, чем сервер.

В качестве примера я настрою клиенты на Ubuntu, Windows и Android. Консольный клиент Ubuntu мы уже настроили, но теперь я покажу, как выполнить ту же задачу, используя преимущественно графический интерфейс.

Настройка GUI клиента OpenVPN в Ubuntu.

В самом начале нам все же придется воспользоваться терминалом, чтобы доустановить нужные пакеты. Выполните следующую команду:

sudo apt-get install network-manager-openvpn network-manager-openvpn-gnome

Будет установлен плагин для менеджера соединений Ubuntu, предназначенный специально для VPN и графическая оболочка для этого плагина. Если ранее вы не устанавливали пакет openvpn, он будет добавлен в список автоматически.

После этого щелкните на значок сети и выберите пункт Изменить соединения, затем — Добавить. Из списка выберите OpenVPN и нажмите кнопку Создать.

Если вы настраивали сервер не по инструкции из предыдущих статей и у вас есть файл с расширением .ovpn, выберите Импортировать сохраненные параметры VPN. Настраивать придется еще меньше.

В открывшемся окне переходим на вкладку VPN и указываем путь к сертификатам и ключам. Если у вас их нет, в прошлой статье я рассказывал, как их загрузить с сервера, а еще раньше — как сгенерировать.

О том, как добыть файлы с сервера с помощью программы с графическим интерфейсом читайте ниже, в разделе о настройке клиента под Windows. Эта программа доступна и в Ubuntu, более того, она есть в репозитории. Для ее установки просто выполните:

sudo apt-get install filezilla

В поле шлюз введите IP (либо доменное имя вашего сервера), номер порта и используемый протокол, разделяя их двоеточием. Если вы следовали предыдущим частям инструкции, последние два параметра — 1194 и udp. Строка должна выглядеть примерно так:

Далее нажмите "Дополнительно" и отметьте чекбокс "Использовать для данных сжатие LZO".

В этом же окне перейдите на вкладку "Безопасность" и выберите из списка шифр "AES-256-CBC".

На вкладке "аутентификация TLS" отметьте чекбокс "Использовать дополнительную аутентификацию ТLS", укажите путь к ключу с именем "ta.key", который мы также скачивали с сервера и установите направление ключа 1.

Теперь осталось лишь сохранить созданное нами подключение, еще раз нажать на значок сети и в подменю "Соединения VPN" выбрать созданное нами подключение. Если все сделано правильно, через пару секунд вы увидите, что благополучно подключились.

Если что-то не так — смотрите логи. О том, как их найти, написано в пункте настройки консольного клиента OpenVPN для Ubuntu.

При необходимости можно включить автоподключение. Для этого из того же выпадающего меню выберите "Изменить подключения", далее — свое основное соединение (не VPN!) и нажмите "Изменить". Теперь на вкладке "Общие" выберите чекбокс "Автоматически подключаться к VPN"… Готово!

Настройка клиента OpenVPN в Windows.

Для начала необходимо скачать OpenVPN отсюда, c официального сайта. В процессе установки чекбоксы оставьте как есть и подтвердите установку драйвера.

Если раньше вы не скачали необходимые ключи и сертификаты с сервера, это можно сделать и из-под Windows. Один из самых простых способов – воспользоваться бесплатной программой FileZilla.

В окне программы выберите меню Файл→Менеджер Сайтов→Новый сайт.

В поле Хост, расположенном в правой части окна, введите IP-адрес сервера.

Немного ниже выберите протокол SFTP.

Еще ниже укажите Тип входа: Нормальный, а затем введите имя и пароль своего пользователя на сервере.

Теперь, нажав соединиться, вы увидите слева список локальных каталогов, а справа — список каталогов на сервере.

Скопируйте в С:\\Program Files\OpenVPN\config файлы ca.crt, ta.key, а также клиентский сертификат и ключ, имена которым вы давали самостоятельно на этапе генерации.

Не используйте один клиентский ключ и один сертификат больше, чем на одном устройстве!

Затем найдите в меню "Пуск" папку OpenVPN→Shortcuts-→OpenVPN Sample Configuration Files.

В открывшемся файловом менеджере найдите файл client.ovpn. Это тот же client.conf, который мы правили в Ubuntu, только под другим именем.

Скопируйте его в С:\\Program Files\OpenVPN\config и переименуйте в client.ovpn. Откройте его с помощью текстового редактора и найдите параметр remote. Вместо my-server-1 вставьте IP-адрес вашего сервера.

Измените значение параметров ca, cert и key так, чтобы они указывали на расположение корневого сертификата (ca.crt), клиентского сертификата и ключа соответственно. Чуть ниже таким же образом укажите полный путь к ta.key. Единицу после имени файла не трогайте. Вместо обычных обратных слешей необходимо использовать двойные (две косые черты), а весь путь к файлу нужно заключить в кавычки. В результате должно получиться нечто вроде этого:

Далее раскомментируйте строки:

и сохраните файл.

Теперь обратите внимание на висящую в трее программу OpenVPN GUI. Если вдруг ее там не окажется, запустите ее через Пуск. Щелчком правой кнопки мыши вызовите контекстное меню программы и нажмите подключиться.

Если вы все сделали правильно, через пару секунд появится уведомление о подключении.

Если что-то не так, читайте лог в папке C:\Program Files\OpenVPN\log.

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

Для начала скачайте официальное приложение OpenVPN Connect. Android работает с VPN и без приложения, но я продемонстрирую именно этот способ.

Нам потребуется файл .ovpn, который мы уже создавали для Windows.

Подойдет и client.config от Ubuntu, только не забудьте его переименовать.

Откройте этот файл блокнотом и уберите пути из имен ключей и сертификатов, оставив лишь названия файлов. Не забудьте изменить названия клиентского сертификата и ключа на правильные — те, которые вы сгенерировали для смартфона или планшета.

После этого сохраните файл и загрузите на устройство в специально созданную папку.

Туда же скопируйте ta.key, ca.crt, а также ключ и сертификат клиента, названия которых вы только что указывали. О том, как добыть ключи с сервера я уже рассказывал выше, поэтому описывать процесс снова не буду.

На смартфоне запустите приложение OpenVPN. Из меню выберите Import→Import Profile from SD card. Затем укажите только что скопированный файл с расширением .ovpn и подтвердите согласие на перехват трафика.

Чтобы убедиться, что все работает, воспользуйтесь любым сервисом проверки IP. Вы в любой момент можете вернуться к приложению, чтобы увидеть состояние подключения и статистику.

Вернуться к оглавлению ->

P.S.

В начале статьи я уже упоминал, что защита, которую дает это ПО, хороша, но не абсолютна. Один из способов повысить ее эффективность — скрыть сам факт использования OpenVPN. Если будет достаточное количество желающих, я расскажу, как это сделать.

  • nomad

    Погодите
    На сайте же недавно были отдельные статьи(по частям) о openvpn
    Вы их объединили в этой статье?

    • Edward Kobylyanets

      да

  • https://plus.google.com/118166993767960656676 Did Mazay

    отлично, все в одном месте 🙂

  • monane

    и как же можно скрыть использование vpn?

    • Kir

      Смотря от кого нужно скрывать и как будут проверять. Если от провайдера или кого-либо еще, кто находится между вами и сервером с VPN, то прежде всего — не пускать трафик через 1194 UDP, т. к. дефолтный порт VPN. Лучше использовать 443, через который обычно проходит HTTPS, но это не панацея. Если весь трафик от пользователя идет к одному IP, это не так уж сложно заметить. Анализ пакетов тоже определит VPN. Короче говоря, все зависит от конкретной цели.