Подключение к серверу openvpn linux. Установка и настройка клиента OpenVPN в Ubuntu

Постоянные читатели этого блога, скорее всего, уже пару-тройку раз в своей жизни настраивали 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 .

Сделавшим мою работу по связыванию распределённых локальных сетей воедино. Первым опытом стала настройка сервера под 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 .

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

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

Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через 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 .

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

После установки OpenVPN скопируйте файл.ovpn в следующую папку: C:\Program Files\OpenVPN\config
После запуска OpenVPN программа автоматически увидит профиль и сделает его доступным.

OpenVPN надо всегда запускать от имени администратора, даже в тех случаях, когда вы уже зашли под административным аккаунтом. Для этого надо нажать правой кнопкой мыши на значке программы и выбрать «Запуск от имени администратора». А значит, обычным пользователям для запуска OpenVPN придется вводить административный пароль.

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

Соединение

При запуске OpenVPN Windows будет всегда спрашивать, можно ли программе вносить изменения в ваш компьютер, и вам нужно нажимать «Да». Запуск клиента OpenVPN не устанавливает соединение автоматически, а помещает программу в область уведомлений (системный трей) для того, чтобы вы могли включать и выключать использование VPN.

После того, как вы запустили OpenVPN, вам нужно установить соединение. Сделать это можно следующим образом: нажмите правой кнопкой на иконке OpenVPN в области уведомлений, в контекстном меню выберите client1 и нажмите «Соединиться» (Connect).

Пока будет работать соединение, вы будете видеть его лог в окне статуса.

Отсоединиться от VPN можно таким же способом: нажав правую кнопку мыши на иконке OpenVPN в трее, вам нужно выбрать клиентский профиль и нажать «Отсоединиться» (Disconnet).

Linux

Установка

Если вы используете Linux, то есть несколько возможных инструментов, которые вы можете использовать (в зависимости от конкретной системы, которую вы используете).

Если это Ubuntu или Debian, то для установки используйте такие команды:

$ sudo apt-get update $ sudo apt-get install openvpn

Для CentOS надо сначала установить EPEL репозитории и затем установить OpenVPN

$ sudo yum install epel-release $ sudo yum install openvpn

Настройка

Проверьте, есть ли в вашем дистрибутиве скрипт /etc/openvpn/update-resolv-conf:

$ ls /etc/openvpn

$ nano client1.ovpn

Раскомментируйте три строчки, которые добавляли ранее в DNS настройках:

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

В случае с CentOS поменяйте group c nogroup на nobody:

Затем сохраните и закройте файл.

Теперь вы можете использовать VPN при помощи команды openvpn:

$ sudo openvpn --config client1.ovpn

После этого вы подключитесь к серверу.



Есть вопросы?

Сообщить об опечатке

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