Настраиваем VPN на Linux. Часть 2. OpenVPN-сервер.

OpenVPN – замечательная штука, ведь может работать в режиме и клиента, и сервера одновременно, а вся настройка производится правкой конфигов, которых всего два – server.conf [конфиг сервера] и openssl.conf [конфиг СА и настройки шифрования]. Оба файла можно найти в папке с примерами. Скопируем первый из них в главную директорию сервера:

 

# cp /usr/share/doc/openvpn/examples/server.conf /etc/openvpn

 

Или для клиента:

 

# cp -R /usr/share/doc/openvpn/examples/client.conf /etc/openvpn

 

В ArchLinux они лежат по другому пути:

 

# cp /usr/share/openvpn/examples/server.conf /etc/openvpn

# cp /usr/share/openvpn/examples/client.conf /etc/openvpn

 

Если файл имеет формат .gz – разархивируйте их командой:

 

# gzip -d server.conf.gz

 

openssl.conf уже лежит в папке /etc/openvpn/easy-rsa – его можно не трогать.

Файл client.conf – как ясно из названия, необходим клиенту, и на сервере не используется.

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

 

# nano /etc/openvpn/server.conf

 

# Уберите двоеточие перед параметром local

# И укажите здесь ip-адрес вашего сервера

local 192.159.12.13

 

port 1194

#Порт по умолчанию, используемый для службы VPN (рекомендуется не менять)

 

proto udp

# Пускать трафик по протоколу TCP или UDP (об отличиях прочитайте в разделе "Модель OSI")

 

dev tun

#dev tun переключает VPN на третий уровень OSI и работает с IP-пакетами.

#dev tap работает на втором уровне с фреймами и строит Ethernet-туннель.

#Об отличиях читайте в разделе "Модель OSI", но мы будем использовать #"dev tun"

#конфигурация proto udp и dev tun позволяет легко обходить NAT и увеличивает общую скорость соединения

#но, вместе с этим вы получаете все минусы протокола UDP, описанные в разделе "Модель OSI"

 

user root

group root

#пользователь и группа, под которыми работает сервис OpenVPN на вашем Linux-сервере, а также директория с конфигами

 

dh /etc/openvpn/dh1024.pem

#путь к файлу Диффи-Хеллмана.

 

ca /etc/openvpn/ca.crt

#путь к сертификату СА

 

cert /etc/openvpn/vpnserver.crt

#путь к сертификату, выданному сертификационным центром серверу

 

key /etc/openvpn/server.key

#путь к закрытому ключу сервера

 

crl-verify /etc/openvpn/crl.pem

#путь к файлу CRL

#вы ведь скопировали его из папки ./keys?

 

server 10.15.0.0 255.255.255.0

#адресное пространство, выделенное для машин, подключаемых к

#сети VPN-сервера.

 

client-to-client

#с помощью этой директивы можно дать возможность всем подключенным #VPN-клиентам видеть друг-друга

 

comp-lzo

#использовать ли компрессию VPN-трафика?

 

status /var/log/openvpn/openvpn-status.log 1

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

 

status-version 3

#подробность ведения логов статуса

 

log-append /var/log/openvpn/openvpn-server.log

#путь к файлу логов

#не забудьте создать папку для логов

# mkdir /var/log/openvpn

 

verb 3

# уровень подробности ведения логов

#0 - только фатальные ошибки

#1-4 - средняя информативность

#5 - информация о каждом полученном пакете

#6-11 - подробные логи для отладки

 

Если не желаете разбираться с параметрами, измените лишь три из них:

 

local [ip сервера]

 

И добавьте:

 

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 8.8.8.8"

push "dhcp-option DNS 8.8.4.4"

 

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

Если хотите изучить файл настройки подробнее, для более гибкой настройки – читайте man openvpn, или страницу документации на сайте OpenVPN:

https://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html

Также, вкратце рассмотрим openssl.cnf, лежащий в папке /easy-rsa – данный файл отвечает за настройки шифрования.

 

# cp /home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf /etc/openvpn/

 

dir = /etc/openvpn/easy-rsa/keys

# Директория по умолчанию для хранения конфигов сертификатов

[далее используется $dir - ссылка на путь по умолчанию]

 

certs = $dir # Где выданные сертификаты хранятся

crl_dir = $dir # Где хранится список отзыва сертификатов

new_certs_dir = $dir/certs_by_serial # Где хранятся новые сертификаты.

certificate = $dir/ca.crt # Сертификат сертификационного центра

serial = $dir/serial # Текущий список серийных кодов сертификатов

crl = $dir/crl.pem # Текущий CRL

private_key = $dir/private/ca.key # Файл закрытого ключа СА

default_days = 3650 # срок действия выданных сертификатов.

default_crl_days= 365 # срок действия файла CRL

default_md = md5 # какой алгоритм хэширования использовать по умолчанию

default_bits = 2048 #битовая длина ключа

 

Измените значения dir и default_days/bits/crl_days/md, остальные параметры можно оставить без изменений.

Настройка фаервола, автозагрузка и решение частых проблем:

Последний штрих – настройка фаервола. Просто добавьте в файл “/etc/rc.local” (скрипт автозагрузки при старте системы) строки:

 

iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

 

А в файле “/etc/sysctl.conf” раскомментаруйте строку:

 

net.ipv4.ip_forward=1

 

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

Для Debian 7 и ранее – прописать в конце /etc/rc.local :

 

openvpn /etc/openvpn/server.conf &

 

Для Debian 8 и ArchLinux:

 

# systemctl enable openvpn@server.service

 

Наиболее популярная проблема с OpenVPN на Linux с последней версией ядра связана с драйверами tun/tap – сервер не запускается, а в логах появляется сообщение:

 

Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-tun instead

 

Решить проблему можно внесением в файл “/etc/modprobe.d/dist.conf” строки:

 

alias netdev-tun tun

 

Если данный файл вы не обнаружите – создайте, пропишите в нем указанную строку, и перезагрузите ОС.

Но так как Linux – вещь непредсказуемая, внимательно изучайте логи на предмет сообщений об ошибках – решение, наверняка, уже найдено.

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

Что ж, раз сервер готов к работе – приступим к настройке клиента, и с этим всё ещё проще. В качестве клиента в нашем примере выступает машина с ArchLinux на борту. Установим на ней OpenVPN и Easy-RSA:

 

# sudo pacman -S openvpn

# sudo pacman -S easy-rsa

 

Скопируем клиентский конфиг OpenVPN в главную директорию:

 

# sudo cp /usr/share/openvpn/examples/client.conf /etc/openvpn

 

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

 

# sudo cp ~/lain.iwakura.Vorona.p12 /etc/openvpn

 

Теперь поправим конфиг. Первая директива говорит о том, что это OpenVPN должен работать в режиме клиента:

vpnlinux 13

В директиве remote укажите ip и порт вашего VPN-сервера:

 vpnlinux 14

Так как мы используем .p12 файл, а не сертификаты – заккоментируйте директивы #ca #cert и #key, а вместо них пропишите “pkcs12 [имя клиентского сертификата]”:

vpnlinux 15

Сохраните изменения, и вуаля! - клиент готов к работе. Включим VPN, активировав конфиг:

 

# openvpn /etc/openvpn/client.conf

 

vpnlinux 16

При подключении – у вас спросят пароль от сертификата. Вводите, подключайтесь, и теперь ваш трафик будет идти по защищенному туннелю через VPN-сервер

Итоги и дополнения

Как видите, собрать работоспособный VPN-сервер под Linux не так-то сложно, и весь процесс можно уместить в несколько команд:

  1. apt-get install openvpn easy-rsa – установка необходимого софта
  2. build-ca – генерируем СА
  3. build-key-server [имя] – выдаем сертификат серверу
  4. build-dh – создаем файл Диффи-Хеллмана
  5. list-crl – создаем CRL
  6. build-key-pkcs12 [имя] – генерируем сертификаты клиентам.
  7. Исправляем конфиг сервера по шаблону, и копируем сертификаты в корневой каталог сервера.
  8. Передаем сертификаты клиентам вместе с готовым файлом конфига, и готово!

Реализации OpenVPN есть под Android, IOS, MAC и Windows, и для подключения клиента вам даже не придется возиться с правкой конфигов – просто передать сертификат .p12 с паролем и указать IP сервера. Но и для Linux-клиентов, при желании, можно упростить процесс установки, путем написания скриптов подключения – пример такого скрипта лежит по пути:

 

# /usr/share/openvpn/examples/openvpn-startup.sh

 

Однако, в данной статье мы затронули лишь основы, и не упомянули о дополнительных мерах безопасности, настройке TLS, прокси-сервера совместно с VPN, и не рассказали о том, как настроить связь нескольких клиентов друг с другом – хотя, средствами OpenVPN это возможно, и если есть желание построить “VPN мечты” - внимательно изучайте руководство, или, хотя бы, страницу man.  

Компьютерный портал "Компаньон" © 2016.
В случае перепечатки материалов обязательна прямая ссылка на сайт cs-companion.ru.