Ubuntu подключение к vpn

Обновлено: 03.07.2024

Аббревиатуру VPN сейчас не слышали разве что только те, кто никогда не имел дела с компьютером. Что это такое, зачем оно нужно и как его настроить самостоятельно?

Что такое VPN и зачем это нужно?

VPN (Virtual Private Network) – виртуальная частная сеть, способ объединить в одну логическую сеть несколько компьютеров, физически находящихся на некотором расстоянии друг от друга.

Использовать VPN можно с разными целями – от организации сети для работы/игр до доступа в интернет. При этом вы должны понимать возможную юридическую ответственность за свои действия.

В России использование VPN не является наказуемым действием, исключая случаи использования с заведомо противоправными целями. То есть, если вы хотите зайти на сайт президента соседней страны (допустим, Сомали) и написать, какой он нехороший, скрыв при этом свой IP-адрес, это само по себе не является нарушением (при условии, что содержание высказывания не нарушает законы). А вот использовать эту технологию для доступа к запрещённым в России ресурсам является правонарушением.

То есть, играть с друзьями по сети и удалённо работать в сетью организации используя VPN – можно, читать всякие нехорошие сайты – нельзя. С этим разобрались. Теперь переходим непосредственно к настройке.

Настройка серверной части на Ubuntu Linux

Для серверной части лучше использовать Linux, с ним в этом плане проще работать. Наиболее простой вариант – PPTP, не требующий установки сертификатов на компьютеры клиентов, аутентификация проводится по имени пользователя и паролю. Его и будем использовать.

Вначале установим нужные пакеты:

Далее нам нужно задать диапазон адресов и несколько других основных настроек. Открываем для редактирования файл /etc/pptpd.conf:

Если нам нужно более 100 одновременных подключений, ищем параметр «connections», раскомментируем его и указываем нужное значение, например:

Если нам нужно передавать по виртуальной сети широковещательные пакеты, следует убедиться, что параметр bcrelay также раскомментирован:

После этого переходим в конец файла и добавляем настройки адресов:

Первый параметр указывает IP-адрес сервера в локальной сети, второй – диапазон выдаваемых клиентам IP-адресов (диапазон должен обеспечить возможность указанного количества подключений, лучше адреса выделить с запасом), третий указывает, по какому внешнему адресу прослушивать интерфейсы для приёма входящих подключений. То есть, при наличии нескольких внешних адресов прослушивать можно только один. Если третий параметр не указать, прослушиваться будут все доступные внешние адреса.

Сохраняем файл и закрываем. Дополнительные тонкие настройки указываем в файле /etc/ppp/pptpd-options:

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

Также проверяем, что опция proxyarp включена (соответствующая строка раскомментирована) и дополнительно для разрешения или запрета множественных подключений одного пользователя комментируем (разрешение) или раскомментируем (запрет) опцию lock.

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

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

Удалённый адрес можно указывать, если у пользователя есть внешний статический IP и только он будет использоваться, иначе лучше указать звёздочку, чтобы точно можно было принять подключение. Локальный нужно указать, если вы хотите, чтобы пользователю выделялся один и тот же IP-адрес в виртуальной сети. Например:

Для пользователя user1 подключения будут приниматься с любого внешнего адреса, локальный будет выделяться первый доступный. Для user2 будет выделять первый доступный локальный адрес, но подключения будут приниматься только с адреса 11.22.33.44. Для user3 подключения принимаются из любой точки, но локальный адрес всегда будет выделяться 10.10.10.10, который мы для него зарезервировали.

На этом настройка VPN-сервера закончена, перезапускаем его (под Linux перезагружать компьютер не нужно):

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

Клиентскую часть можно настроить под любой операционной системой, я буду использовать в качестве примера Ubuntu Linux 16.04.

На клиентском компьютере открываем сетевые соединения (на скриншотах приведено для Ubuntu + Cinnamon, для GNOME делается аналогично, в Kubuntu похоже и сложностей не вызовет). Нажимаем кнопку «Добавить» и выбираем PPTP-соединение:


Имя VPN-подключения можно оставить стандартное, а можно указать удобное и понятное для вас – это дело вкуса. Вводим в поле «шлюз» внешний IP-адрес сервера, к которому мы подключаемся (указан при настройке в опции «listen»), ниже имя и пароль. Справа в поле «Пароль» предварительно нужно выбрать вариант «Сохранить пароль для этого пользователя»):


Далее обязательно нажимаем кнопку «Дополнительно» и отмечаем опцию «Использовать шифрование MPPE», иначе сервер не примет ваше подключение:


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

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

Настройка доступа в интернет через VPN

На vpn-сервере вводим следующие команды:

где 10.10.10.1/24 – локальный адрес сервера и маска сети.

После этого сохраняем изменения, чтобы они работали и после перезагрузки сервера:

И применяем все изменения:

После этого у вас появится доступ в интернет. Если зайти на какой-либо сайт, отображающий ваш IP-адрес, вы увидите внешний адрес сервера, а не свой (если они не совпадают).

Напоминаю, что ответственность за последствия своих действий несёте только вы.

Вот прямые ссылки на страницы этих пакетов для Ubuntu 9.10 «Karmic Koala»:

Главное, не перепутайте архитектуру, если вы ставили amd64 версию Ubuntu, то вам нужен пакет для amd64 , если же i386 , то вам нужен пакет именно для этой архитектуры.

Итак, сохраните куда-нибудь два описанных файла для своей архитектуры, они имеют достаточно длинное название и расширение .deb . Вот как они выглядят у меня на рабочем столе:


Для установки просто щёлкните два раза на нужном файле левой кнопкой мыши, или же выделите его и нажмите Enter .

Сначала вам нужно поставить pptp-linux , запустив его установку вы увидите примерно такое окно:


Нажмите на кнопку «Install Package», у вас попросят ввести ваш пароль. После ввода начнётся процесс установки:


Дождитесь его окончания:


Теперь просто закройте программу установки. Таким же образом поставьте второй пакет - network-manager-pptp .

После этого зайдите в программу настройки соединений и перейдите на вкладку VPN:


Для добавления нового соединения нажмите кнопку «Add», появится окно настроек подключения:


Если у вас кнопка «Add» неактивна и нажать на неё не получается, значит, вы не поставили один из пакетов, про которые я писал в начале этой статьи.

Введите свой логин и пароль, а так же выставите необходимые настройки соединения, нажав на кнопку «Advanced…». Вы увидите примерно такое окошко:


Узнать о настройках можно у провайдера. Зачастую на его сайте можно найти инструкцию по подключению компьютера с Linux к интернету, в этом случае просто следуйте ей. Если что, обращайтесь в техподдержку провайдера за необходимыми настройками соединения 2) .

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


А для активирования подключения загляните в пункт «VPN Connections» списка соединений:


Надеюсь, вы разобрались во всём и смогли получить доступ к интернету, пора возвращаться обратно к описанию начальной настройки вашей Ubuntu:

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

Подготовка Ubuntu

Обновляем установленные пакеты:

apt-get update && apt-get upgrade

Устанавливаем утилиту для синхронизации времени:

apt-get install chrony

Разрешаем ее автозапуск и стартуем сервис:

systemctl enable chrony --now

Установим правильную временную зону:

timedatectl set-timezone Europe/Moscow

* в данном примере московское время.

Если в нашей системе используется брандмауэр, открываем порт, на котором будет слушать OpenVPN:

iptables -I INPUT -p udp --dport 443 -j ACCEPT

* в данной инструкции предполагается, что мы настроим VPN-сервер на UDP-порту 443, однако, по-умолчанию, OpenVPN работает на порту 1194.

Для сохранения правила используем iptables-persistent:

apt-get install iptables-persistent

Установка, настройка и запуск VPN-сервера

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

Установка OpenVPN

Устанавливаем необходимые пакеты следующей командой:

apt-get install openvpn easy-rsa

Создание сертификатов

Создаем каталог, в котором разместим готовые сертификаты для OpenVPN:

mkdir -p /etc/openvpn/keys

Создаем каталог, в который будем помещать все сгенерированные сертификаты:

Переходим в созданный нами каталог:

Скопируем в него шаблоны скриптов для формирования сертификатов:

cp -r /usr/share/easy-rsa/* .

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

и приведем его к следующему виду:

* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.

Запускаем отредактированный файл на исполнение:

Почистим каталог от старых сертификатов:

Для генерирования сертификатов необходим конфигурационный файл openssl.cnf — по умолчанию, он отсутствует, но есть файл openssl-1.0.0.cnf. Создаем на него симлинк:

ln -s openssl-1.0.0.cnf openssl.cnf

* в каталоге /etc/openvpn/easy-rsa может быть несколько разных версий конфигурационного файла openssl-x.x.x.cnf. Чтобы узнать точное имя файла, вводим команду ls /etc/openvpn/easy-rsa.

Следующие действия будут записеть от версии OpenVPN. Более новая позволяет создавать сертификаты на основе Easy RSA 3, старая работает на базе 2-й версии. Понять, какой вариант наш можно посмотрев на содержимое каталога easy-rsa:

Либо мы увидим в нем утилиту easyrsa (новая версия), либо набор утилит, начинающихся на build.

Рассмотрим процесс формирования сертификата с использованием как RSA3, так и RSA2.

а) Если используется новая версия (утилита easyrsa)

1. Инициализируем PKI:

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

* после вводим дважды пароль.

На запрос «Common Name» можно просто нажать Enter:

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

3. Создаем запрос на сертификат для сервера:

./easyrsa gen-req server nopass

* nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.

На запрос «Common Name» можно просто нажать Enter:

Common Name (eg: your user, host, or server name) [server]:

4. Генерируем сам сертификат:

./easyrsa sign-req server server

После ввода команды подтверждаем правильность данных, введя yes:

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

Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:

Готово. Ключ для сервера создан.

5. Формируем ключ Диффи-Хеллмана:

Создаем ta-ключ командой:

openvpn --genkey --secret pki/ta.key

Скопируем созданные ключи в рабочий каталог:

cp pki/ca.crt /etc/openvpn/keys/

cp pki/issued/server.crt /etc/openvpn/keys/

cp pki/private/server.key /etc/openvpn/keys/

cp pki/dh.pem /etc/openvpn/keys/

cp pki/ta.key /etc/openvpn/keys/

б) Если используется старая версия (утилиты build-)

1. Генерируем последовательность центра сертификации:

На все запросы нажимаем Enter.

2. Запускаем build-dh.bat (сертификат с использованием алгоритма Диффи-Хеллмана):

* команда может выполняться долго — это нормально.

3. Генерируем сертификат для сервера:

* где server — имя сертификата; на все запросы нажимаем Enter.

В конце подтверждаем два раза корректность информации вводом y:

Certificate is to be certified until Aug 8 21:12:24 2031 GMT (3650 days)
Sign the certificate? [y/n]: y

1 out of 1 certificate requests certified, commit? [y/n] y
Write out database with 1 new entries
Data Base Updated

Создаем ta-ключ командой:

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

Скопируем созданные ключи в рабочий каталог:

cp keys/ca.crt /etc/openvpn/keys/

cp keys/server. /etc/openvpn/keys/

cp keys/dh2048.pem /etc/openvpn/keys/dh.pem

cp keys/ta.key /etc/openvpn/keys/

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

Создаем конфигурационный файл:

И вставляем в него следующее:

local 192.168.0.15
port 443
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
tls-server
comp-lzo

  • local — IP-адрес, на котором будет обрабатывать запросы OpenVPN;
  • port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных. Порт 1194 является стандартным для OpenVPN).
  • proto — используемый транспортный протокол.
  • dev — виртуальный сетевой адаптер, который будет создан для работы OpenVPN.
  • ca — путь до сертификата корневого центра сертификации.
  • cert — путь до открытого сертификата сервера.
  • key — путь до закрытого сертификата сервера.
  • dh — путь до ключа Диффи - Хеллмана.
  • tls-auth — путь до tls-ключа.
  • server — задаем IP-адрес сервера в сети VPN.
  • ifconfig-pool-persist — путь к файлу для хранения клиентских IP-адресов.
  • keepalive X Y — каждые X секунд отправляется ping-запрос на удаленный узел. Если за Y секунд не получено ответа — перезапускать туннель.
  • max-clients — максимум одновременных подключений.
  • persist-key — не перезагружать ключи при повторной загрузки из-за разрыва соединения.
  • persist-tun — не изменять устройства tun/tap при перезапуске сервера.
  • status — путь до журнала статусов.
  • log-append — путь до файла лога с дополнительным выводом информации.
  • verb — уровень логирования событий. От 0 до 9.
  • mute — ограничение количества подряд отправляемых в лог событий.
  • daemon — работа в режиме демона.
  • mode — в каком режиме работает openvpn (сервер или клиент).
  • tls-server — указывает, что данный сервер работает с использованием TLS.
  • comp-lzo — использовать сжатие.

Создадим каталог для логов:

Разрешаем автоматический старт сервиса vpn и запускаем его:

systemctl enable openvpn@server --now

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

Сертификат должен быть сформирован на сервер, после чего перенесен на клиентское устройство. Рассмотрим процесс подробнее.

На сервере

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

* сертификаты будут скопированы в каталог /tmp для удобства их переноса на клиентский компьютер.

Переходим в каталог easy-rsa:

Создаем системные переменные, настроенные ранее в файле vars:

Как в случае формирования сертификата для сервера, наши следующие шаги зависят от версии RSA.

а) Для новой версии (easyrsa)

Создаем сертификат для клиента:

./easyrsa build-client-full client1 nopass

Вводим пароль, который указывали при создании корневого сертификата:

Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:

Скопируем ключи во временную директорию:

cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt pki/ta.key /tmp/keys/

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

chmod -R a+r /tmp/keys

б) Для старой версии (build)

Создаем сертификат для клиента:

* на все запросы отвечаем Enter.

В конце отвечаем на два вопроса утвердительно:

Certificate is to be certified until Aug 8 21:49:30 2031 GMT (3650 days)
Sign the certificate? [y/n]: y

1 out of 1 certificate requests certified, commit? [y/n] y
Write out database with 1 new entries
Data Base Updated

Скопируем ключи во временную директорию:

cp keys/client1. keys/ca.crt keys/ta.key /tmp/keys/

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

chmod -R a+r /tmp/keys

На клиенте

Клиент OpenVPN может быть установлен на Windows, Linux, Android и Mac OS. Мы рассмотрим пример работы с Windows.

Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:

Загрузка клиента openvpn для Windows

Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».

Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client1.crt, client1.key, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.

После переноса файлов, не забываем удалить ключи из временного каталога на сервере:

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

client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
tls-client
tls-auth ta.key 1
float
keepalive 10 120
persist-key
persist-tun
verb 0

* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы.
* подробнее про настройку клиента OpenVPN.

Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.

Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).

Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:

Запуск подключения openvpn-клиента к серверу

Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.

Доступ к локальной сети

Для настройки доступа к локальной сети, воспользуйтесь инструкцией Настройка доступа к локальной сети клиентам OpenVPN в Linux.

Аутентификация пользователей

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

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

Открываем конфигурационный файл openvpn:

И добавляем следующие строчки:

plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so login
tmp-dir /etc/openvpn/tmp

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

chmod 777 /etc/openvpn/tmp

systemctl restart openvpn@server

Создаем учетную запись для авторизации:

useradd vpn1 -s /sbin/nologin

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

В конфигурационный файл клиента добавляем:

Можно пробовать подключаться.

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

* где auth.txt — файл, в котором мы будем хранить логин и пароль.

Создаем текстовый файл auth.txt в той же папке, где находится файл конфигурации со следующим содержимым:

* где username — логин пользователя, а password — пароль.

Описанный метод аутентификации является базовым и требует наличие обычной системной учетной записи. Если необходима более сложная авторизация на базе LDAP, можно воспользоваться инструкцией

Автоматический запуск клиента

Если необходимо, чтобы клиент OpenVPN запускался при старте операционной системы Windows и подключался к серверу, просто открываем службы и находим OpenVPNService. Переводим его в режим автозапуска:

Настройка службы OpenVPN для автоматического старта

Статические IP для клиентов

На сервере для каждого клиента генерируем свой сертификат. Например, для client2 вводим следующие команды:

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

  • ca.crt
  • client2.crt
  • client2.key
  • dh2048.pem
  • ta.key

Также на сервере открываем следующий файл и заносим статический адрес для клиента:

* в данном примере клиент client будет получать IP 172.16.10.4, а client2 — 172.16.10.24.

В конфигурационном файле server.conf должна быть строчка:

systemctl restart openvpn@server

Теперь на клиенте не забываем указать правильные названия файлов в конфигурационном файле клиента:

cert client2.crt
key client2.key

Доступ в Интернет через VPN-сервер

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

Открываем на сервере конфигурационный файл:

push "redirect-gateway def1"
push "dhcp-option DNS 77.88.8.8"

systemctl restart openvpn@server

* сервер должен быть настроен в качестве шлюза. Подробнее в инструкции Настройка Интернет шлюза на Ubuntu.

Возможные проблемы при работе с OpenVPN

1. failed to start openvpn robust and highly flexible tunneling application on server

Описание: при запуске сервера получаем данную ошибку.

Причина: как правило, связано с отсутствием сертификата.

Решение: открываем лог /var/log/openvpn/openvpn.log и смотрим, с каким сертификатом проблема. Проверяем, что все файлы скопированы и что мы не забыли сгенерировать все сертификаты.

2. Постоянно разрывается соединение

Описание: с периодичностью от 1 до 5 минут постоянно рвется соединение с сервером. После нескольких минут переподключается.

Причина: как правило, конфликт IP-адресов. Такая ситуация возникает при случаях, когда подключение выполняется с нескольких компьютеров одновременно с одинаковыми данными авторизации (логином и паролем).

Решение: настройте клиента для подключения к серверу с уникальными логином и паролем.

3. ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

Описание: ошибка возникаем при попытке запустить сервис openvpn.

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

Решение: необходимо перед запуском сервиса openvpn создавать устройство tun. Для этого мы создадим скрипт, который будет создавать устройство при запуске сервера.

Создаем каталог, в который поместим скрипт:

Создадим сам скрипт:

/bin/mkdir /dev/net
/bin/mknod /dev/net/tun c 10 200

* данный скрипт создает каталог /dev/net, а в нем — устройство tun.

Создаем юнит для автозапуска скрипта:

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/scripts/tun.sh"

Перечитываем изменения в systemd:

Разрешаем автозапуск юнита tun и стартуем скрипт:

systemctl enable tun --now

Теперь можно запустить openvpn:

systemctl start openvpn@server

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

Настройка подключения VPN по L2TP/IPsec для ОС Ubuntu

Чтобы настроить VPN подключение по L2TP/IPsec на Ubuntu, потребуется установить L2TP зависимости. Для этого откройте терминал, нажав "CTRL+ALT+T" и введите поочередно следующие команды:


Далее откройте настройки сетевых соединений в правом верхнему углу рабочего стола и нажмите "Параметры соединения":



В открывшемся окне нажмите "+" для добавления новой конфигурации VPN:



Выберите пункт "Layer 2 Tunneling Protocol (L2TP)":




Чтобы ввести пароль, нажмите на вопросительный знак в конце поля "Пароль" и выберите "Запомнить пароль только для этого пользователя" или "Запомнить пароль для всех пользователей", в противном случае вам потребуется вводить пароль при каждом подключении VPN. Далее нажмите "Настройки IPsec":




Нажмите "Добавить" для сохранения созданного VPN подключения. Подключение VPN успешно настроено:


Для подключения передвиньте переключатель вправо:



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



В случае успешного подключения вы увидете значок "VPN" в верхней строке состояния:



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

Читайте также: