OpenVPN - открытая программная реализация протокола VPN. Отличительной особенностью данного продукта является возможность создания зашифрованных туннелей, при этом существуют реализации под большинство популярных ОС, в том числе и для мобильных платформ.
Особенность репозитория CentOS такова, что OpenVPN в него не входит. Зато этот пакет можно получить используя репозиторий EPEL (Enterprise Linux), который управляется Fedora Project. Из данного репозитория, кстати, можно получить и другие пакеты, которые не входят в стандартный репозиторий CentOS. Установим командой:
yum install epel-release
Приступаем к установке OpenVPN. Устанавливаем пакет:
yum install openvpn easy-rsa -y
Приступаем к настройке сервера. Копируем server.conf:
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
Важно обратить внимание на “*”. Если выполнялась только одна попытка установить, то версию программы можно заменить символом “звездочки”. Если же было несколько попыток установки, возможно придется указать путь до файла полностью.
Перед генерацией ключей, внесем несколько изменений в файл конфигурации сервера.
1. Открываем server.conf любым редактором.
nano /etc/openvpn/server.conf
2. Находим строку “Diffie hellman parameters.” и ищем:
dh dh2048.pem
Если указано именно, так, то изменения вносить не нужно. Нюанс новой версии пакета заключается в том, что параметру уже соответствуют значения. В старых версиях там просто “dh”. Приводим к виду, как у нас.
3. Далее ищем строку “# Certain Windows-specific network settings”. раскомментируем один из параметров ниже (удалим символ “точка с запятой” (;) в начале строки). Должно получиться примерно так:
push "dhcp-option DNS 8.8.8.8"
DNS-сервер можно указать свой, по желанию. Также, можно раскомментировать вторую строку, чтобы передавать клиентам еще и альтернативный DNS-сервер.
4. Для безопасности сервера будем запускать от пользователя nobody и группы nogroup. Раскомментируем строки:
user nobody
group nobody
Приступаем к созданию сертификатов.
С помощью установленного ранее пакета easy-rsa создадим ключи сервера и клиента.
1. Создаем директорию, в которой будут лежать ключи:
mkdir -p /etc/openvpn/easy-rsa/keys
2. В только что созданную директорию easy-rsa копируем скрипты:
cp -r /usr/share/easy-rsa/3.0/* /etc/openvpn/easy-rsa
3. Переходим в каталог /etc/openvpn/easy-rsa/3/ и создаем скрипт vars
cd /etc/openvpn/easy-rsa/
nano vars
Важно! Версия easy-rsa может быть другой, а следовательно путь необходимо будет скорректировать.
4. В открытый файл добавляем следующие строки:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "MyOrg"
set_var EASYRSA_REQ_EMAIL "openvpn@mydomain.net"
set_var EASYRSA_REQ_OU "CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"
Сохраняем файл и закрываем редактор.
5. Разрешаем исполнение файла:
chmod +x vars
6. Инициализируем PKI директорию и создадим CA сертификат:
./easyrsa init-pki
./easyrsa build-ca
Важно! При создании CA-сертификата скрипт запросит ввод пароля минимум из 4 символов. Введенный пароль следует запомнить.
7. Создаем ключ сервера.
./easyrsa gen-req server nopass
Если не указывать атрибут “nopass”, то при создании ключа, скрипт запросит пароль.
8. Подписываем сертификат сервера:
./easyrsa sign-req server server
Первым действием скрипт поинтересуется в нашей уверенности, отвечаем “Yes”. Затем запросит пароль, который был указан при создании CA-сертификата.
9. Проверяем, подписался ли сертификат:
openssl verify -CAfile pki/ca.crt pki/issued/ server.crt
10. Генерируем дополнительный ключ сервера ta.key:
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
Пользовательские сертификаты.
Процесс создания пользовательского сертификата идентичен созданию сертификата сервера.
1. Создаём без парольной защиты:
./easyrsa gen-req client01 nopass
2. Подписываем сертификат:
./easyrsa sign-req client client01
3. Проверяем подпись:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Диффи-Хеллман.
Создаем сертификат:
./easyrsa gen-dh
В итоге будет создан файл dh.pem, а в конфиге dh2048.pem. Переименуем его позже, при копировании ключей.
Переносим сертификаты.
Копируем файлы ключей сервера. Для этого последовательно выполняем:
cp pki/ca.crt /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/
Копируем ключи клиента:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
Копируем файл ключа Диффи-Хеллмана:
cp pki/dh.pem /etc/openvpn/dh2048.pem
Важно! Целевое имя файла намеренно изменено под имя в конфиге.
Настраиваем маршрутизацию.
Для ускорения настройки, работы будут выполняться с iptables, а не c FirewallD. Последовательно выполняем:
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush
Перед дальнейшей настройкой следует заглянуть вы названия интерфейсов с помощью команды:
ifconfig -a
Добавляем правило для NAT:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <имя_интерфейса> -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
Как пример:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
Разрешаем форвардинг пакетов между сетевыми интерфейсами. Для этого редактируем системный файл sysctl.conf:
nano /etc/sysctl.conf
В начале файла вставляем строку:
net.ipv4.ip_forward = 1
Сохраняем файл, закрываем редактор и перезапускаем сетевую службу командой:
systemctl restart network.service
Запускаем OpenVPN-сервер.
Для начала добавим службу в автозагрузку:
systemctl -f enable openvpn@server.service
Запускаем OpenVPN:
openvpn /etc/openvpn/server.conf
Настройка клиента.
Сервер настроен, осталось выполнить настройку клиента, чтобы он мог подключиться.
Независимо от используемой ОС, будь то мобильная, серверная или домашняя версии, Linux или Windows, всегда понадобятся 4 файла:
- ca.crt;
- client.crt;
- client.key;
- client.ovpn
Первые 3 файла расположены в директории /etc/openvpn/client/, а client.ovpn придется создать. Для этого перейдем в каталог, где лежат все ключи клиента:
cd /etc/openvpn/client/
Создадим файл:
nano client.ovpn
Заполним следующим содержимым:
client
dev tun
proto udp
remote <IP_ADDRESS> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca ca.crt
cert client01.crt