Как настроить смартфоны и ПК. Информационный портал
  • Главная
  • Windows 10
  • Установка openvpn на ubuntu 16.04. Установка и настройка клиента OpenVPN в Ubuntu

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

Сделавшим мою работу по связыванию распределённых локальных сетей воедино. Первым опытом стала настройка сервера под FreeBSD, ну а дальше, как говорится, понеслось. На сегодняшний день почти все сервера, настроенные мной, работают под Ubuntu Linux той или иной версии.

И вот недавно я обратил внимание на то, что среди барахла, хранящегося в /etc/init.d , скромненько притаился скрипт с именем . «Ну и чё?» — тут же спросит опытный администратор. Всё дело в том, что до недавних пор поднятие сетевых интерфейсов, в том числе и TUN , я организовывал исключительно через /etc/network/interfaces , оперируя опциями pre-up для запуска демона OpenVPN и опциями pre-down для его останова. Всё это «безобразие» повсеместно разбавлялось различными командами, манипулирующими таблицами маршрутизации... В общем, довольно громоздкая картинка получалась. В принципе, всё работало вполне себе прилично, но раз есть предоставленный разработчиками иной (Ubuntu-way?) путь, то почему бы им не воспользоваться, тем более, что это позволит значительно разгрузить /etc/network/interfaces . Итак, что у меня получилось.

Установка OpenVPN

Установка OpenVPN в Ubuntu не требует каких-либо финтов ушами:

$ sudo apt-get install openvpn

Обязательно подтвердите установку всех зависимостей.

Тем же, кому хочется/нужно установить OpenVPN из исходных кодов, придётся ознакомиться с .

Если вас интересуют бинарные пакеты под другие платформы, посетите .

Размещение файлов ключей

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

  • закрытый ключ шифрования клиента в формате .pem (назовём файл client.key );
  • подписанный центром сертификации сертификат клиента в формате .pem , (назовём файл client.crt );
  • сертификат центра сертификации сервера в формате .pem , которым был подписан файл client.crt (назовём файл ca.crt )

Получив ключ и сертификаты, обязательно позаботьтесь об их безопасности. Хорошим решением будет размещение всего этого добра на флешке, зашифрованной, например, . В этой статье будем полагать, что ключи и сертификаты размещены в каталоге /media/keys . Также, обязательно оставьте минимум прав доступа к каталогу с ключом и сертификатами:

$ sudo chown -R root.root /media/keys
$ sudo chmod 0700 /media/keys
$ sudo chmod 0600 /media/keys/*
# ls -la /media/keys
drwx------ 2 root root 1024 2010-08-18 15:32 .
drwx------ 5 root root 1024 2010-08-18 15:24 ..
-rw------- 1 root root 1265 2010-08-18 22:27 ca.crt
-rw------- 1 root root 3821 2010-08-18 15:13 client.crt
-rw------- 1 root root 887 2010-08-18 15:13 client.key

Файл конфигурации

Фалы конфигурации OpenVPN, как правило, располагаются в каталоге или /usr/local/etc/openvpn . В этой статье я предполагаю, что вы установили OpenVPN из репозитариев Ubuntu и каталогом для хранения конфигурации является .

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

Допустим, что сервер, к которому вы подключаетесь, называется myvpnsrv.com . Достаточно удобно называть файлы конфигурации (их может быть несколько, если вы пользуетесь несколькими подключениями или несколькими вариантами какого-либо подключения) в соответствии с именами серверов. Так, в нашем примере файл конфигурации будет находится в /etc/openvpn/myvpnsrv.conf со следующим содержанием:

client
remote myvpnsrv.com
ca /media/keys/ca.crt
key /media/keys/client.key
cert /media/keys/client.crt
daemon
dev tun
proto udp
comp-lzo

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

Значение параметра remote определяет имя хоста или IP-адрес сервера.

Значения параметров ca , keys и cert определяют пути к файлу сертификата CA, закрытому ключу и сертификату клиента соответственно.

Указанием параметра daemon мы заставляем OpenVPN отцепиться от консоли и работать в фоновом режиме.

Параметр dev указывает тип сетевого интерфейса, который будет использоваться для обмена шифрованным трафиком с сервером. Может иметь значение tun или tap . Принципиальную разницу между этими двумя типами интерфейсов можно узнать и .

Параметр proto определяет протокол, в который будет заворачиваться шифрованный трафик. использовать UDP.

Наличие параметра comp-lzo заставляет OpenVPN сжимать трафик, что очень полезно при наличии «узкого» канала передачи данных.

Маршрутизация и внешние скрипты

OpenVPN среди всего прочего позволяет запускать внешние программы после запуска, а также до и после остановки демона. Очень удобная штука, если вам необходимо шаманить таблицами маршрутизации при поднятии туннеля.

Сразу же отметьте себе один тонкий момент. Для того, чтобы OpenVPN-демон смог запускать внешние программы, ему необходимо это явно разрешить делать, передав параметр script-security со значением, не ниже 2. Безопасность, однако.

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

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

Теперь немного о специфике вызова внешних программ демоном OpenVPN. Дело в том, что они не просто «тупо» вызываются, а им передаются ещё некоторые параметры подключения, что очень удобно при работе с таблицами маршрутизации.

Формат вызова внешней программы демоном OpenVPN при инициализации tun-интерфейса следующий:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip

  • tun-dev — имя сетевого интерфейса, например tun1;
  • tun_mtu — MTU сетефого интерфейса;
  • link_mtu — MTU соединения;
  • ifconfig_local_ip — IP-адрес клиента (на «нашей» стороне);
  • ifconfig_remote_ip — IP-адрес клиента (на стороне сервера);
  • init — передаётся в случае, если программа вызывается во время запуска демона;
  • restart — передаётся, если программа вызывается во время перезапуска демона (например, если была потеря связи);

Для tap-интерфейса формат тот же, за исключением того, что вместо ifconfig_remote_ip передаётся ifconfig_netmask , содержащий маску подсети, в которой находится наш клиент.

Также, следует отметить, что все параметры, которые вы будете передавать внешней программе, при помощи up /down , будут подставлены перед параметрами, перечисленными выше.

Теории, думаю, достаточно, перейдём к делу. Допустим, вам необходимо, чтобы во время запуска/перезапуска/остановки демона OpenVPN каким-то образом видоизменялась таблица маршрутизации вашего хоста. Для двух сетевых интерфейсов я решил эту задачу следующим скриптом на bash:

#!/bin/bash case ${1} in "up") case ${2} in "tun0") ip rule add ... ip route add ... ;; "tun1") ip rule add ... ip route add ... ;; esac ;; "down") case ${2} in "tun0") ip rule del ... ip route del ... ;; "tun1") ip rule del ... ip route del ... ;; esac ;; esac

А вызов скрипта осуществляется двумя параметрами OpenVPN:

up "/usr/local/bin/routes.sh up"
down "/usr/local/bin/routes.sh down"

То есть, запускаемый скрипт получает примерно такие параметры:

  • $1 up или down ;
  • $2 — имя интерфейса. В рассматриваемой мной системе им может быть tun0 или tun1 ;
  • $3 — например, 1500;
  • $4 — например, 1542
  • $5 — например, 10.8.0.5
  • $6 — например, 10.8.0.6
  • $7 init или restart (параметр мной полностью игнорируемый, так что манипуляции с маршрутами выполняются всегда, даже если сетевой интерфейс не был отключён, а всего лишь имел место «штатный» перезапуск демона в связи с отсутствием связи).

Само-собой разумеется, можно (и нужно) использовать значения параметров $3 — $6. Например, если вы хотите какую-то часть трафика «завернуть» через VPN-туннель, то можно в скрипте использовать что-то вроде:

ip route add from 192.168.0.0/24 via ${6}

используя значение переменной $6, чтобы определить адрес маршрутизатора, через который необходимо направлять трафик.

Запуск и останов демона

Собственно, к чему все эти танцы с вызовом внешних скриптов и отказом от старого-доброго /etc/network/interfaces ? А вот к чему.

Откройте файл /etc/default/openvpn и в переменной AUTOSTART укажите имя файла (или нескольких, через пробел) конфигурации из каталога , откусив расширение «.conf». Для нашего примера это будет выглядеть так:

AUTOSTART="myvpnsrv"

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

Теперь «достаточно одной таблэтки» в виде:

sudo service openvpn start

и скрипт из /etc/init.d/openvpn заботливо запустит OpenVPN для всех найденных конфигураций.

Остановка демона также не очень сложна:

sudo service openvpn stop

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

Настоящая частная виртуальная сеть или Virtual Private Network (VPN) - это зашифрованное соединенный туннель между двумя сетями, который соединяет две доверенные точки. Это не веб-протокол HTTPS, который считает доверенными всех клиентов. К VPN могут подключиться только те клиенты, которые имеют специальные ключи доступа.

Понятие VPN в наши дни стало очень растянутым, после появления частных виртуальных сетей, которые доверяют всем и распространения HTTPS. Многие из сетей VPN представляют из себя коммерческие решения с минимальным количеством настроек для обеспечения удаленного доступа сотрудников. Но не все доверяют этим решениям. Частная виртуальная сеть соединяет две сети в одну, например, сеть офиса и домашнюю сеть работника. Сервер VPN необходим для того чтобы сервер и клиент могли пройти аутентификацию друг с другом.

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

На обоих машинах должен быть установлен OpenVPN, это довольно популярная программа, поэтому вы можете установить ее из официальных репозиториев. Также нам понадобится Easy-RSA для работы с секретными ключами. Для установки программ в Ubuntu используйте такую команду:

sudo apt install openvpn easy-rsa

Оба пакеты должны быть установлены как на сервере, так и на клиенте. Они понадобятся для настройки программы. Первый этап статьи установка и настройка openvpn завершен.

Настройка центра сертификации

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

Обратите внимание, что все секретные ключи должны находится в надежном месте. В OpenVPN открытый ключ называется сертификатом и имеет расширение.crt, а закрытый ключ так и называется ключом, его расширение - .key.

Сначала создайте папку для хранения сертификатов Easy-RSA. Фактически, конфигурация OpenVPN выполняется вручную, так что папку можно разместить где угодно:

sudo mkdir /etc/openvpn/easy-rsa

Затем скопируем в эту папку все необходимые скрипты easy-rsa:

cd /etc/openvpn/easy-rsa/

sudo -i
# source ./vars
# ./clear-all
# ./build-ca

Первой командной мы переключаемся в консоль от имени суперпользователя, второй загружаем переменные окружения из файла./vars. Команда./clear-all создает папку keys если ее нет и очищает ее содержимое. И последняя команда инициализирует наш центр сертификации. Теперь в папке.keys появились все необходимые ключи:

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

sudo cp -R /usr/share/easy-rsa /etc/openvpn/

Теперь нам нужно скопировать сертификат, файл с расширением.crt в папку /etc/openvpn на всех клиентах. Например, скачаем этот файл для нашего клиента с помощью scp:

sudo scp пользователь@хост:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

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

cd /etc/openvpn/easy-rsa/

sudo -i
# source ./vars
# build-req Sergiy

Обратите внимание, что ca.crt должен лежать в папке с ключами, иначе ничего не сработает. Теперь утилита создаст ключ, на основе которого, вы сможете подключиться к OpenVPN серверу, но вам еще осталось подписать его на сервере. Отправьте полученный.csr файл на сервер с помощью того же самого scp:

scp /etc/openvpn/easy-rsa/keys/Sergiy.csr пользователь@хост:~/

Затем уже на сервере в папке /etc/openvpn/easy-rsa нужно выполнить команду подписи сертификата:

./sign-req ~/Sergiy

Подпись сертификата нужно подтвердить. Затем программа сообщит что он был подписан и добавлен в базу данных. В папке с сертификатом csr появится файл.crt, который нужно вернуть назад на клиентскую машину:

sudo scp пльзователь@хост:/home/Sergiy.crt /etc/openvpn/easy-rsa/keys

Только после этого сервер и клиент имеют все необходимые ключи для подключения и установки связи. Осталось еще несколько настроек. Если вы планируете использовать шифрование TLS, то необходимо создать на сервере набор данных Диффи-Хафмана, для этого используйте команду:

Настройка OpenVPN

Теперь настройка сервера OpenVPN. По умолчанию, в папке конфигурационных файлов OpenVPN ничего нет. Их нужно создать самостоятельно в зависимости от того, что планируется настраивать, сервер или клиент. Нужный файл конфигурации OpenVPN можно найти по адресу /usr/share/doc/openvpn/examples/sample-config-files/. Сначала создадим конфигурационный файл для сервера:

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Здесь вам нужно настроить несколько параметров:

port и proto - порт и протокол, по которым будет работать программа;

port 1194
proto udp

Все созданные ключи нужно прописать в конфигурационном файле. Наши ключи хранятся по адресу /etc/openvpn/easy-rsa/keys:


cert /etc/openvpn/easy-rsa/keys/ca.crt
key /etc/openvpn/easy-rsa/keys/ca.key
dh /etc/openvpn/easy-rsa/keys/dh.pem

Настраиваем диапазон адресов для виртуальной сети, наш сервер будет доступен по первому из них - 10.8.0.1:

server 10.8.0.0 255.255.255.0

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

port 1194
proto udp
comp-lzo
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/ca.crt
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

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

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

remote - это ваш адрес сервера OpenVPN, адрес и порт должны совпадать с настроенными на сервере, например:

remote 194.67.215.125 1194

ca - ключ, который вы получили от центра сертификации, мы расположили его в папке /etc/openvpn/.

cert и key - это открытый и секретный ключи клиента, с помощью них вы и будете подключаться к серверу. Как вы помните, мы сохранили их в папке /etc/openvpn/easy-rsa/keys/.

ca /etc/openvpn/easy-rsa/keys/ca.crt

Остальные настройки можно оставить как есть. Вот файл настройки целиком, который вы можете скопировать:

client
dev tun
proto udp
remote 194.67.215.125 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Sergiy.crt
key /etc/openvpn/easy-rsa/keys/Sergiy.key
tls-auth ta.key 1
comp-lzo
verb 3

Сохраните настройки, теперь клиент готов к подключению. Обратите внимание, что конфигурационные файлы должны максимально совпадать, отсутствие определенных опций в одном из файлов может привести к ошибкам. Это не значит, что файлы будут идентичны, но основные параметры openvpn должны быть одинаковыми. Вам осталось запустить OpenVPN на этой машине используя этот конфигурационный файл:

openvpn /etc/openvpn/client.conf

Готово, теперь все работает, если вы выполните ifconfig, то увидите что был добавлен интерфейс tun0:

Также вы можете попробовать выполнить ping адреса 10.8.0.1, именно этот адрес мы настроили для нашего сервера OpenVPN, пакеты ping будут нормально отправляться. Если пакеты не идут, или еще что-то не работает, обратите внимание на вывод обоих программ, возможно, возникли какие-либо ошибки или предупреждения, также убедитесь, что брандмауэр сервера разрешает доступ извне по udp для порта 1194. Еще можно запустить сервер или клиент, настроив в конфиге уровень подробности на максимум verb 9. Очень часто это помогает понять почему что-то не работает. Но вы еще не можете направлять трафик через туннель. Для этого нужно разрешить форвардинг и добавить несколько правил iptables. Сначала разрешаем транзит пакетов на сервере:

sysctl -w net.ipv4.ip_forward=1

Затем добавьте такие правила. Разрешаем всем подключаться к нашему серверу:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

Разрешаем пользователям OpenVPN доступ к интернету:

iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Выводы

В этой статье мы рассмотрели как выполняется установка и настройка OpenVPN Ubuntu, а также как настроить openvpn для работы с аутентификацией по ключу. Организация частных виртуальных сетей может быть очень полезной не только в организациях, но и скажем для обмена данными между двумя вашими компьютерами или для повышения безопасности в сети.

VPN (Virtual Private Network) – это технология, позволяющая объединять компьютеры через интернет так, как будто они находятся в одной локальной сети. В результате мы можем объединять в одну сеть офисы, расположенные в разных городах и странах.
Установив VPN-сервер дома, а клиентскую часть на смартфон, можно выходить в интернет через публичные точки WiFi не боясь, что ваши пароли будут перехвачены.
Аренда сервера в в зарубежном дата-центре стоит от 5$ в месяц и разместив VPN в американском регионе мы получаем доступ к Spotify, Pandora, Hulu и другим сервисам, недоступным в вашей стране, да и цензура в интернет вас больше не касается.

1. Установим OpenVPN.

Обновим наш сервер и установим OpenVPN и центр сертификации.

Sudo apt update sudo apt upgrade sudo apt install openvpn easy-rsa

OpenVPN это виртуальная частная сеть, использующая для шифрования трафика TLS/SSL. А это означает, что нам потребуются доверенные сертификаты.

2. Настройка центра сертификации

Настроим центр сертификации.

Make-cadir ~/openvpn-ca cd ~/openvpn-ca nano vars

Найдем следующий фрагмент:

. . . . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]" export KEY_OU="MyOrganizationalUnit" . . . . .

и заменим на свои данные

. . . . . export KEY_COUNTRY="RU " export KEY_PROVINCE="SPb " export KEY_CITY="Sankt-Peterburg " export KEY_ORG="сайт " export KEY_EMAIL="admin@сайт " export KEY_OU="IT " . . . . .

Несколькими строками ниже поменяем значение KEY_NAME

Export KEY_NAME="server" cd ~/openvpn-ca source vars

В ответ система должна выдать:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

На всякий случай очистим каталог от всех ключей:

./clean-all

и создадим корневой центр сертификации:

./build-ca

Необходимые значения будут автоматически подставляться из файла vars, который мы редактировали чуть выше. Просто нажимаем Enter для подтверждения выбора.

Мы установили центр сертификации который мы будем использовать для создания других необходимых нам файлов.

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

Сперва создадим сертификат OpenVPN и ключи для сервера. Для этого запустим следующую команду:

./build-key-server server

Соглашаемся на все значения по умолчанию, в конце два раза выбираем “y”.
Теперь сгенерируем ключи протокола Диффи-Хеллмана командой:

./build-dh

и подпись HMAC для усиления способности сервера проверять целостность и подлинность передаваемых данных TSL:

Openvpn --genkey --secret keys/ta.key

4. Создание сертификата и пары ключей для клиента

Рассмотрим процедуру создания ключа и сертификата для клиента client1. Если клиентов несколько, процесс создания аналогичен Для автоматического соединения мы создадим файл без пароля. Используем команду build-key:

Cd ~/openvpn-ca source vars ./build-key client1

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

Скопируем созданные файлы (сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC, файл Diffie-Hellman) из директории ~/openvpn-ca/keys в /etc/openvpn

Cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf sudo nano /etc/openvpn/server.conf

Найдем раздел HMAC и раскомментируем строку с tls-auth, а также добавим параметр key-direction:

Tls-auth ta.key 0 # This file is secret key-direction 0

Затем ищем раздел шифрования и раскомментируем строку с шифром AES-128-CBC и после нее добавим алгоритм HMAC:

Cipher AES-128-CBC auth SHA256

И в заключении найдем строки user и group и раскомментируем их:

User nobody group nogroup

6. Включение сервиса OpenVPN

Для того чтобы пользоваться нашим сервером по назначению необходимо чтобы он мог перенаправлять трафик.

sudo nano /etc/sysctl.conf

Найдите и раскомментируйте строку:

net.ipv4.ip_forward=1

Чтобы применить измененные настройки выполните:

sudo sysctl -p

Пропишем как будет запускаться наш сервер. Так как имя конфигурационного файла server.conf дадим такую команду:

sudo systemctl start openvpn@server

Проверим запустился ли сервер:

sudo systemctl status openvpn@server

и поднялся ли интерфейс tun

ip addr show tun0

Если все работает – добавляем настройки в автозагрузку:

sudo systemctl enable openvpn@server

7. Скрипт для настройки клиентов.

mkdir -p ~/client-configs/files chmod 700 ~/client-configs/files cp /usr/share/doc/openvpn/ examples/sample-config-files/ client.conf ~/client-configs/base.conf

Внесём некоторые изменения в файл base.conf

nano ~/client-configs/base.conf . . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194 . . .

Вместо server_IP_address пропишем ip-адрес нашего сервера OpenVPN.

proto udp user nobody group nogroup

Сертификаты и ключи мы будем хранить прямо в конфигурационном файле, который далее создадим. Поэтому закомментируем строки ca, cert и key

# SSL/TLS parms. # See the server config file for more # description. It"s best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key

Приведем настройки клиентской части к аналогичным настройкам сервера.

Проверьте на вашей клиентской системе наличие файла /etc/openvpn/update-resolv-conf. Если он есть, последние три строки нужно раскомментировать.

cipher AES-128-CBC auth SHA256 key-direction 1 # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf

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

Nano ~/client-configs/make_config.sh

Вставим текст:

#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e "") \ ${KEY_DIR}/ca.crt \ <(echo -e "\n") \ ${KEY_DIR}/${1}.crt \ <(echo -e "\n") \ ${KEY_DIR}/${1}.key \ <(echo -e "\n") \ ${KEY_DIR}/ta.key \ <(echo -e "") \ > ${OUTPUT_DIR}/${1}.ovpn

Сохраним и закроем файл, после этого сделаем его исполняемым:

Chmod 700 ~/client-configs/make_config.sh

8. Генерация файлов конфигураций клиентов

cd ~/client-configs ./make_config.sh client1

Проверим что получилось:

Ls ~/client-configs/files

в результате мы должны получить файл

Client1.ovpn

с настройками соединения,сертификатами и ключом.

Данный файл нужно доставить на клиентский компьютер, используя защищенное соединение. В Linux можно воспользоваться командой scp. На клиентском компьютере запустим:

Scp viktor@openvpn_server_ip :client-configs/files/client1.ovpn ~/

Копируем файл «client1.ovpn» c удаленного сервера на локальный компьютер.

9. Установка файлов конфигураций клиентов

Последующие действия будем выполнять только на клиентском компьютере c Ubuntu. Установим OpenVPN.

Sudo apt-get update sudo apt-get install openvpn

Проверим, есть ли на нашей системе файл /etc/openvpn/update-resolv-conf

Ls /etc/openvpn

Если при выводе мы получаем:

Update-resolve-conf

отредактируем файл конфигурации client1 .ovpn, который мы скачали с сервера

Nano client1 .ovpn

Раскомментируем следующие строки:

Script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

Сохраним и закроем файл.

Теперь пробуем запустить соединение:

Sudo openvpn --config client1 .ovpn

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

Постоянные читатели этого блога, скорее всего, уже пару-тройку раз в своей жизни настраивали OpenVPN. Но думается, что новичкам данная заметка будет интересна и полезна. Из нее вы узнаете, как за пять минут поднять собственный VPN сервер, а также зачем он, собственно, нужен. Ну хорошо, учитывая время на регистрацию в каком-нибудь Amazon’е , DigitalOcean, Vscale.io или FastVDS и оплату VDS, пожалуй, потребуется не пять минут, а «целых» пятнадцать.

Итак, зачем же кому-то ходить в сеть через VPN? На то есть целый ряд причин. Например, чтобы ваши пароли, передаваемые по HTTP, не утекли, когда вы сидите с открытых WiFi точек неизвестного происхождения. Да и вообще, даже вашему обычному провайдеру не обязательно знать, на какие сайты вы ходите. Еще — чтобы не палить свой IP в IRC сетях и прочих сервисах, с которыми вы работаете. Им знать ваше местоположение тоже совсем ни к чему. Также вам может захотеться попробовать какой-нибудь новый сервис, который пока что недоступен для пользователей с российским IP. Кроме того, трафик между вами и VPN сервером не только шифруется, но и сжимается, что нередко может создать ощущение более быстрого интернета. Еще OpenVPN может быть полезен в ряде других случаев, например, для доступа сотрудников ко внутренним ресурсам компании, когда они не в офисе.

Почему VPN, а не какие-нибудь прокси или пробрасывание портов через SSH, надеюсь, тоже понятно. VPN достаточно настроить один раз и сразу весь трафик всех приложений пойдет через VPN cервер, в сжатом и зашифрованном виде.

Чтобы поднять свой VPN, вам потребуется собственный сервер с Ubuntu Linux (или любым другим Linux/*BSD, но тогда вам будет довольно сложно следовать инструкциям данной заметки), а также права root’а на нем. Если сервер у вас уже есть, хорошо. Если нет, то не расстраивайтесь. В наши дни купить подходящий VDS/VPS можно за смешные 5$ в месяц или даже меньше. Компаний, предлагающих соответствующие услуги — десятки, некоторые были названы в начале заметки. Лично я рекомендую присмотреться к DigitalOcean . Но не поленитесь изучить вопрос самостоятельно, так как к моменту прочтения вами этих строк ситуация на рынке VDS может измениться.

Заходим на сервер, становимся root’ом, говорим:

apt-get update
apt-get install openvpn

Раньше в OpenVPN входила утилита под названием easy-rsa, предназначенная для генерации ключей и сертификатов. Начиная с версии 2.3 эту утилиту из пакета выпилили, поэтому придется скачать и собрать ее самостоятельно:

cd / tmp
wget https:// github.com/ OpenVPN/ easy-rsa/ archive/ master.zip
apt-get install unzip
unzip master.zip
cd easy-rsa-master
./ build/ build-dist.sh
tar xvzf ./ EasyRSA-git-development.tgz
cd EasyRSA-git-development

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

./ easyrsa init-pki
./ easyrsa build-ca
./ easyrsa build-server-full server
./ easyrsa build-client-full client1
./ easyrsa gen-dh

Выполнение последней команды может занять несколько минут.

Переносим полученные ключи и сертификаты в каталог /etc/openvpn/:

mv ./ pki/ dh.pem / etc/ openvpn/ dh.pem
mv ./ pki/ private/ client1.key / etc/ openvpn/
mv ./ pki/ private/ server.key / etc/ openvpn/
mv ./ pki/ ca.crt / etc/ openvpn/
mv ./ pki/ issued/ client1.crt / etc/ openvpn/
mv ./ pki/ issued/ server.crt / etc/ openvpn/

В том же каталоге создаем файл server.conf:

mode server
dev tun
server 10.128.0.0 255.255.255.0
push "redirect-gateway def1"
# важно! иначе будем ходить в DNS провайдера
push "dhcp-option DNS 8.8.8.8"
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh.pem
proto tcp-server
port 1194
# клиенты видят друг друга
client-to-client
comp-lzo
keepalive 10 120
verb 4
cipher AES-256-CBC
user nobody
group nogroup
max-clients 10

Попробуем запустить OpenVPN. При запуске от вас будет требоваться ввести пароль. Соответственно, после ребута поднимать OpenVPN придется руками. Но поскольку мы настраиваем персональный VPN, вряд ли это представляет собой бОльшую проблему, чем ключи, лежащие в открытом виде, или еще хуже — сохраненные пароли. Запускаем:

service openvpn start

Проверяем:

netstat -tuwpan

Сервер должен слушать порт 1194. Если это не так, курим /var/log/syslog.

Теперь что касается клиентской стороны. Нам понадобятся файлы client1.crt, client1.key и ca.crt:

mkdir vpn
cd vpn
scp vpn-server:/ etc/ openvpn/ client1.crt ./
scp vpn-server:/ etc/ openvpn/ client1.key ./
scp vpn-server:/ etc/ openvpn/ ca.crt ./

Создадим файл client.conf:

client
proto tcp
dev tun
# !!! замените на настоящий ip адрес сервера
remote 123.45.67.89 1194

# следующие две строчки актуальны только для *nix систем
# на практике они не очень удобны, так как OpenVPN не сможет
# нормально все за собой почистить по завершению работы

# user nobody
# group nogroup

Persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
comp-lzo
verb 3

Подрубаемся к серверу, внимательно читаем логи:

sudo openvpn --config client.conf

В соседнем терминале говорим:

ping 10.128.0.1
traceroute mail.ru

Если все было сделано правильно, вы обнаружите, что пинги успешно доходят до 10.128.0.1 (первая команда), но пакеты через него никуда не проходят (вторая команда). Это потому что мы забыли настроить на сервере NAT. Что мне лично кажется странным. Я смутно припоминаю, что когда в свое время я поднимал OpenVPN на FreeBSD , подобного шага не требовалось. Впрочем, я могу и ошибаться.

На сервере открываем файл /etc/sysctl.conf и раскомментируем в нем строчку:

net.ipv4.ip_forward=1

Чтобы не пришлось перезагружаться, говорим:

echo 1 >> / proc/ sys/ net/ ipv4/ conf/ all/ forwarding

iptables -A FORWARD -s 10.128.0.0/ 24 -j ACCEPT
iptables -A FORWARD -d 10.128.0.0/ 24 -m state \
--state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.128.0.0/ 24 \
-j SNAT --to-source 123.45.67.89

… где 123.45.67.89 — это IP сервера. Переподключаемся клиентом, попробуем зайти на какие-нибудь 2ip.ru или — теперь все должно работать. Если это не так, курим логи. Если все ОК, сохраняем правила фаервола на сервере:

iptables-save > / etc/ iptables.rules

… и проверяем, что в файле /etc/network/interfaces есть строчка:

pre-up iptables-restore < /etc/iptables.rules

Если на сервере ранее уже настраивался фаервол , может оказаться, что правила хранятся в файле с именем, отличным от /etc/iptables.rules.

Можно сказать reboot и проверить, что настройки держатся после перезагрузки сервера:

cat / proc/ sys/ net/ ipv4/ conf/ all/ forwarding
iptables -L -n

Сервер OpenVPN, разумеется, придется перезапустить руками.

Осталось сделать последний штрих на клиенте. Дело в том, что (1) запускать openvpn в отдельном терминале и следить, не упал ли он там, неудобно. Кроме того, (2) если на клиенте сказать:

nm-tool | grep DNS
sudo iptables -A OUTPUT -d 192.168.0.1 -j DROP
# ^ для удаления правила введите ту же команду с -D вместо -A

… где 192.168.0.1 — DNS вашего провайдера (выводится утилитой nm-tool), вы обнаружите, что резолвинг доменов сломался, а следовательно клиент все еще использует DNS провайдера. Можно убить двух зайцев, сказав:

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

… и настроив VPN через NetworkManager (иконку сети в правом верхнем углу Unity). Делается это несложно, фактически нужно повторить текстовый конфиг клиента при помощи галочек и полей ввода. Понять, какая галочка какой строчке в конфиге соответствует, очень легко. Главное — не полениться залезть во всякие продвинутые свойства сети и прочие разделы настроек. Если же вы где-то ошибетесь, проблему можно с легкостью диагностировать при помощи файла /var/log/syslog.

Несмотря на то, что заметка получилась довольно длинной, настройка OpenVPN действительно занимает всего лишь несколько минут. Безопасного и быстрого вам веб-серфинга! А также, как всегда, я буду искренне рад вашим вопросам и дополнениям.

Дополнение: Я столкнулся с такой проблемой, что OpenVPN не переподключался к серверу после выхода ноутбука из спящего режима. Исправить ситуацию помогла команда sudo pkill --signal SIGHUP --exact openvpn , выполняемая сразу после выходя из спящего режима. Для этого соответствующая команда была дописана в скрипт , который я использую для входа в спящий режим, откуда она вызывается с небольшой задержкой. Чтобы это работало, у пользователя должно быть право говорить sudo без пароля. Кроме того, в конфиге сервера OpenVPN мне пришлось убрать параметр keepalive .

Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищённые сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.

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

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

Запустите приложение OpenVPN и нажмите на меню для импорта профиля.

Соединение

Для установки соединения нажмите кнопку Connect . Вам будет задан вопрос, доверяете ли вы приложению OpenVPN. Ответьте OK для установки соединения. Для остановки соединения зайдите в приложение OpenVPN и выберите Disconnect .

Шаг 13. Тестирование VPN соединения

После того, как всё установлено и настроено, убедимся, что всё работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest .

Этот сайт вернёт IP адрес, назначенный вам вашим Интернет-провайдером. Для того, чтобы проверить, какие DNS сервера используются, нажмите на Extended Test .

Теперь установите соединение, используя ваш VPN клиент и обновите страницу в браузере. Выдаваемый вам IP адрес должен быть совершенно другим. Теперь для всех в Интернете вы используете этот новый IP адрес. Нажмите Extended Test ещё раз, чтобы проверить ваши настройки DNS и убедитесь, что теперь вы используете DNS сервера вашего VPN.

Шаг 14. Отзыв клиентских сертификатов

Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN&

Для этого зайдите в вашу директорию центра сертификации и введите команды:

  • cd ~/openvpn-ca
  • source vars
  • ./revoke-full client3

Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.

Переместите этот файл в директорию /etc/openvpn:

  • sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn
  • sudo nano /etc/openvpn/server.conf

Добавьте в конец файла строку crl-verify . Сервер OpenVPN будет проверять список отозванных сертификатов каждый раз, когда кто-то устанавливает соединение с сервером.

/etc/openvpn/server.conf

Crl-verify crl.pem

Сохраните и закройте файл.

Перезапустите OpenVPN для завершения процесса отзыва сертификата:

  • sudo systemctl restart openvpn@server

Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат.

Для отзыва дополнительных сертификатов выполните следующие шаги:

    Сгенерируйте новый список отозванных сертификатов используя команду source vars в директории ~/openvpn-ca и выполняя команду revoke-full с именем клиента.

    Скопируйте новый список отозванных сертификатов в директорию /etc/openvpn перезаписав тем самым старый список.

    Перезапустите сервис OpenVPN.

Эта процедура может быть использована для отзыва любых созданных вами ранее сертификатов.

Заключение

Поздравляем! Теперь вы можете безопасно выходить в Интернет, весь ваш трафик защищён от прослушки цензоров и злоумышленников.

Для конфигурации дополнительных клиентов повторите шаги 6 и 11-13 для каждого нового устройства. Для отзыва доступа того или иного клиента используйте шаг 14 .

Лучшие статьи по теме