Тематические термины: VPN, Ubuntu, OpenVPN.
Для удобства настройки заходим под суперпользователем:
Обновляем установленные пакеты:
apt-get update && apt-get upgrade
Устанавливаем утилиту для синхронизации времени:
apt-get install chrony
Разрешаем ее автозапуск и стартуем сервис:
systemctl enable chrony –now
Установим правильную временную зону:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере московское время.
Устанавливаем необходимые пакеты следующей командой:
apt-get install openvpn easy-rsa
Создаем каталог, в котором будем хранить сертификаты:
mkdir /etc/openvpn/easy-rsa
Переходим в созданный нами каталог:
cd /etc/openvpn/easy-rsa
Скопируем в текущий каталог шаблоны скриптов для формирования сертификатов:
cp -r /usr/share/easy-rsa/* .
Чтобы ускорить процесс создания ключей, откроем на редактирование следующий файл:
и приведем его к следующему виду:
export KEY_COUNTRY=”RU“export KEY_PROVINCE=”Sankt-Petersburg“export KEY_CITY=”Sankt-Petersburg“export KEY_ORG=”DMOSK COMPANY“export KEY_EMAIL=”[email protected]“export KEY_CN=”DMOSK“export KEY_OU=”DMOSK“export KEY_NAME=”name-openvpn-server.admins24.com“export KEY_ALTNAMES=”name-openvpn-server”
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
Запускаем отредактированный файл на исполнение:
Если скрипт выполнится без ошибок, мы увидим следующее:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Почистим каталог от старых сертификатов:
./clean-all
Для генерирования сертификатов необходим конфигурационный файл 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.
Генерируем сертификат корневого центра:
./build-ca
на все запросы нажимаем Enter, так как всю верную информацию мы ввели в файле vars.
Теперь последовательно вводим следующие команды для формирования остальных сертификатов.
Сертификат сервера:
./build-key-server server
Диффи – Хеллмана:
./build-dh
Для tls:
openvpn –genkey –secret keys/ta.key
Копируем каталог с созданными сертификатами и ключами в /etc/openvpn:
cp -r keys /etc/openvpn/
Создаем конфигурационный файл:
vi /etc/openvpn/server.conf
И вставляем в него следующее:
local 192.168.0.15port 443proto udpdev tunca keys/ca.crtcert keys/server.crtkey keys/server.keydh keys/dh2048.pemtls-auth keys/ta.key 0server 172.16.10.0 255.255.255.0ifconfig-pool-persist ipp.txtkeepalive 10 120max-clients 32persist-keypersist-tunstatus /var/log/openvpn/openvpn-status.loglog-append /var/log/openvpn/openvpn.logverb 4mute 20daemonmode servertls-servercomp-lzo
* где
Создадим каталог для логов:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn и запускаем его:
systemctl enable [email protected] –now
На сервере:
Генерируем сертификаты для клиента:
./build-key client1
На сервере скопируем ключи во временную директорию, выполнив последовательно 4 команды:
mkdir /tmp/keys
cp ca.crt client1.crt client1.key dh2048.pem ta.key /tmp/keys
chmod -R a+r /tmp/keys
* сертификаты скопированы в каталог /tmp для удобства переноса их на клиентский компьютер.
На клиенте:
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client.crt, client.key, dh2048.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.
После переноса файлов, не забываем удалить ключи из временного каталога на сервере:
rm -R /tmp/keys
Теперь возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
clientresolv-retry infinitenobindremote 192.168.0.15 443proto udpdev tuncomp-lzoca ca.crtcert client1.crtkey client1.keydh dh2048.pemtls-clienttls-auth ta.key 1floatkeepalive 10 120persist-keypersist-tunverb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы.* подробнее про настройку клиента OpenVPN.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
Для настройки доступа к локальной сети, воспользуйтесь инструкцией Настройка доступа к локальной сети клиентам OpenVPN в CentOS 7 (несмотря на то, что инструкция написана под CentOS, она во многом подойдет для Ubuntu).
Позволяет требовать от пользователя ввод логина и пароля при каждом подключении. Также идентификация каждого пользователя необходима для уникальной идентификации каждого из них и выдачи разных IP-адресов.
Открываем конфигурационный файл openvpn:
И добавляем следующую строчку:
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
* как путь, так и название файла openvpn-plugin-auth-pam.so могут отличаться. Это зависит от версии Linux и OpenVPN. Чтобы найти путь до нужного файла, можно воспользоваться командой find / -name “openvpn-*auth-pam*” -print.
Перезапускаем сервер:
systemctl restart [email protected]
Создаем учетную запись для авторизации:
useradd vpn1 -s /sbin/nologin
passwd vpn1
В конфигурационный файл клиента добавляем:
auth-user-pass
Можно пробовать подключаться.
Если необходимо настроить авторизацию, но автоматизировать вход клиента, открываем конфигурационный файл последнего и строку для авторизации меняем на:
auth-user-pass auth.txt
* где auth.txt — файл, в котором мы будем хранить логин и пароль.
Создаем текстовый файл auth.txt в той же папке, где находится файл конфигурации со следующим содержимым:
usernamepassword
* где username — логин пользователя, а password — пароль.
Переподключаем клиента.
Описанный метод аутентификации является базовым и требует наличие обычной системной учетной записи. Если необходима более сложная авторизация на базе LDAP, можно воспользоваться инструкцией
настройка OpenVPN сервера с аутентификацией через LDAP (написана на базе Linux Ubuntu).
Если необходимо, чтобы клиент OpenVPN запускался при старте операционной системы Windows и подключался к серверу, просто открываем службы и находим OpenVPNService. Переводим его в режим автозапуска:
На сервере для каждого клиента генерируем свой сертификат. Например, для client2 вводим следующие команды:
./build-key client2
После чего переходим к каталог keys, где находятся новые сертификаты и копируем их на клиентский компьютер. Полный список файлов, которые необходимо копировать:
Также на сервере открываем следующий файл и заносим статический адрес для клиента:
vi /etc/openvpn/ipp.txt
client,172.16.10.4client2,172.16.10.24
* в данном примере клиент client будет получать IP 172.16.10.4, а client2 — 172.16.10.24.
В конфигурационном файле server.conf должна быть строчка:
ifconfig-pool-persist ipp.txt
Теперь на клиенте не забываем указать правильные названия файлов в конфигурационном файле клиента:
cert client2.crtkey client2.key
Пробуем подключиться.
Настройка делает так, что клиенты VPN-сервера начинают использовать последний как шлюз по умолчанию. Таким образом, весь трафик идет через наш сервер.
Открываем на сервере конфигурационный файл:
и добавляем:
push “redirect-gateway def1”push “dhcp-option DNS 77.88.8.8”
* сервер должен быть настроен в качестве шлюза. Подробнее в инструкции Настройка Интернет шлюза на Ubuntu.
Описание: при запуске сервера получаем данную ошибку.
Причина: как правило, связано с отсутствием сертификата.
Решение: открываем лог /var/log/openvpn/openvpn.log и смотрим, с каким сертификатом проблема. Проверяем, что все файлы скопированы и что мы не забыли сгенерировать все сертификаты.
Описание: с периодичностью от 1 до 5 минут постоянно рвется соединение с сервером. После нескольких минут переподключается.
Причина: как правило, конфликт IP-адресов. Такая ситуация возникает при случаях, когда подключение выполняется с нескольких компьютеров одновременно с одинаковыми данными авторизации (логином и паролем).
Решение: настройте клиента для подключения к серверу с уникальными логином и паролем.
Описание: ошибка возникаем при попытке запустить сервис openvpn.
Причина: не загружается модуль tun.
Решение: необходимо перед запуском сервиса openvpn создавать устройство tun. Для этого мы создадим скрипт, который будет создавать устройство при запуске сервера.
Создаем каталог, в который поместим скрипт:
mkdir /scripts
Создадим сам скрипт:
vi /scripts/tun.sh
/bin/mkdir /dev/net/bin/mknod /dev/net/tun c 10 200
* данный скрипт создает каталог /dev/net, а в нем — устройство tun.
Создаем юнит для автозапуска скрипта:
vi /etc/systemd/system/tun.service
[Unit]After=network.target
[Service]Type=oneshotExecStart=/bin/sh -c “/scripts/tun.sh”
[Install]WantedBy=multi-user.target
Перечитываем изменения в systemd:
systemctl daemon-reload
Разрешаем автозапуск юнита tun и стартуем скрипт:
systemctl enable tun –now
Теперь можно запустить openvpn:
systemctl start [email protected]
Перезагружаем сервер, чтобы убедиться а работе сервиса после старта компьютера.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies