Настройка OpenVPN на Ubuntu: серверная часть

1 комментарий
Настройка OpenVPN на Ubuntu

Введение

VPN виртуальная частная сеть, которая позволяет обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например, Интернет).

В нашем случае мы рассмотрим создание надежной и защищенной сети VPN на основе ненадежной сети Интернет при помощи продукта OpenVPN в рамках операционной системы Ubuntu 16.04.

OpenVPNсвободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL (https://ru.wikipedia.org/wiki/OpenVPN).

Установка необходимых пакетов

Команды будем выполнять от суперпользователя.

Приступим к установке ПО:

apt-get update

apt-get install easy-rsa openvpn

easy-rsa — программа которая служит для создания и ведения инфраструктуры открытых ключей (PKI) в командной строке (CLI). В нашем случае мы будем использовать ее для выполнения действий с ключами и сертификатами, необходимыми для работы OpenVPN.

Демон OpenVPN будет работать у нас от имени непривилегированного пользователя openvpn. Добавим его:

adduser --system --no-create-home --disabled-login --group openvpn

Создание инфраструктуры открытых ключей (PKI)

Далее займемся созданием ключей и сертификатов при помощи easy-rsa. Скопируем необходимые файлы в /etc/openvpn/ и перейдем в эту директорию:

cp -r /usr/share/easy-rsa/ /etc/openvpn/

cd /etc/openvpn/easy-rsa/

Далее для удобства создания сертификатов в /etc/openvpn/easy-rsa/vars изменим следующие строки:

Производить работу с текстовыми файлами вы можете, используя удобные Вам текстовые редакторы (например, vi или nano).

  • export KEY_COUNTRY="US" # Страна
  • export KEY_PROVINCE="CA" # Регион/Область
  • export KEY_CITY="SanFrancisco" # Город
  • export KEY_ORG="Fort-Funston" # Организация
  • export KEY_EMAIL="me@myhost.mydomain" # Электронный адрес
  • export KEY_OU="MyOrganizationalUnit" # Отдел в компании

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

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

. ./vars

и удалить существующие ключи:

./clean-all

Приступаем к созданию удостоверяющего центра (CA):

./build-ca

В ходе установки Вам потребуется проверить корректность данных, используемых для запроса на создание сертификата (certificate request). Если Вы предварительно изменили значения переменных в /etc/openvpn/easy-rsa/vars, то Вам достаточно будет просто нажимать Enter. Также, по желанию, Вы сможете указать пароль, который будет защищать приватный ключ удостоверяющего центра. Хорошо запомните его или запишите в надежном месте!

Аналогичным образом создаем остальные ключи и сертификаты.

Сертификат сервера OpenVPN, где «server» - имя сервера:

./build-key-server server

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

./build-dh

Ключ клиента, где «user_1» - имя клиента:

./build-key user_1

Ключ HMAC для дополнительной защиты от DoS-атак и флуда:

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

Сертификаты с ключами будут помещаться в директорию /etc/openvpn/easy-rsa/keys:

cd keys

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

mkdir /etc/openvpn/ccd

и перенести файлы:

# Клиентские

cp user_1.crt user_1.key ca.crt ta.key /etc/openvpn/ccd/

# Серверные

cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/

Создание конфигурационного файла и запуск OpenVPN

Создаем директорию для логов OpenVPN:

mkdir /var/log/openvpn/

И переходим к созданию конфигурационного файла:

vi /etc/openvpn/server.conf

Подробная информация по директивам в конфигурационном файле доступна в файле /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz.
 

# Пользователь и группа
user openvpn
group openvpn

# Порт, на котором висит openvpn
port 2216
# Протокол, который использует openvpn
proto udp
# Интерфейс, которой будет подниматься
dev tun

# Привязка ключей
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
tls-auth /etc/openvpn/ta.key 0 # 0 - использование на стороне сервера, 1 - на стороне клиента
# Файл отозванных сертификатов. Раскомментировать, когда такие сертификаты появятся.
# Создание сертификата доступно при помощи /etc/openvpn/easy-rsa/revoke-full
;crl-verify /etc/openvpn/crl.pem

# Тип шифрования
cipher AES-256-CBC
# Сжатие трафика
comp-lzo
# IP адреса, которые будут выдаваться клиентам (IP и маска)
server 10.10.0.0 255.255.255.0

# Будет производится пинг каждые 10 секунд, если пинга нет 120 сек, то будет выполнена попытка повторного подключения к клиенту
keepalive 10 120

# При падении туннеля не выключать интерфейсы, не перечитывать ключи
persist-key
persist-tun

# Директория с клиентскими сертификатами
client-config-dir ccd

# Лог статуса сервера
status /var/log/openvpn/status.log
# Лог подключения
log /var/log/openvpn/serv.log
# Уровень логирования от 0 до 9, чем выше тем больше информации
verb 3
# Защита от повторов (максимум 20 одинаковых сообщений подряд)
mute 20

# Cнятие ограничения на размер буфера сокета
sndbuf 0
rcvbuf 0

# Трафик идет через OpenVPN
push "redirect-gateway def1"
# Использование DNS сервера
push "dhcp-options DNS 8.8.8.8"

На этом настройка конфигурации OpenVPN закончена.

Включаем поддержку ipv4_forwarding. Для этого в /etc/sysctl.conf раскомментируем

#net.ipv4.ip_forward=1

после чего заново прочитаем файл:

sysctl -p

Помимо этого разрешаем маршрутизацию трафика через OpenVPN:

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

«eth0» - Ваш сетевой интерфейс для выхода в Интернет. Посмотреть его можно при помощи ifconfig.

Настраиваем iptables, чтобы после перезапуске ОС, настройки сохранились:

iptables-save > /etc/iptables.save

echo -e "\npre-up iptables-restore < /etc/iptables.save" >> /etc/network/interfaces

Перезапуск и проверка корректной работы OpenVPN

Перезапускаем демон:

service openvpn restart

И проверяем поднялся ли интерфейс tun:

ifconfig

Также Вам могут помочь логи, которые мы настроили, и syslog:

cat /var/log/openvpn/serv.log

tail -50 /var/log/syslog

При необходимости Вы можете запустить OpenVPN вручную и проверить, возникают ли ошибки при запуске:

openvpn --config /etc/openvpn/server.conf

Следующая строка в логе /var/log/openvpn/serv.log будет означать корректный запуск VPN:

Fri Dec 8 07:19:47 2017 Initialization Sequence Completed

Заключение

Теперь Вы знаете, как установить и настроить OpenVPN на Ubuntu 16.04. Более подробную информацию смотрите в документации OpenVPN.

Использовать OpenVPN можно на любом из тарифов VDS EVO: https://timeweb.com/ru/services/vds

Запуск своего сервера

Комментарии

Дмитрий Глущенко 0
18 янв в 2018
Спасибо, очень полезная статья.