OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналoв типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL.
Первым шагом нужно подключить репозиторий EPEL:
yum install epel-release -y
Когда система обновится, нужно с помощью менеджера пакетов yum установить OpenVPN и Easy-RSA (он нам понадобится для реализации инфраструктуры PKI ключей на сервере VPN).
yum install openvpn easy-rsa –y
Скопируем все скрипты easy-rsa в каталог /etc/openvpn/:
cp -r /usr/share/easy-rsa /etc/openvpn/
Будем использовать редактор nano, установим его:
yum install nano
Перейдем в каталог /etc/openvpn/easy-rsa/3/ и создадим там файл vars:
cd /etc/openvpn/easy-rsa/3/
nano vars
Добавляем содержимое файла (вы можете его исправить под себя):
Прежде чем создавать ключ, нам нужно выполнить инициализацию каталога PKI и создать ключ CA.
./easyrsa init-pki
Создаем ключ CA:
./easyrsa build-ca
После запуска команды, нам нужно будет указать пароль, чтобы сертификаты и ключ сгенерировались. Пароль потребуется в дальнейшем для подписания сертификатов.
Создадим ключ сервера (название сервера server.vpn.ru, опция nopass — отключение пароля для server.vpn.ru):
./easyrsa gen-req server.vpn.ru nopass
В процессе выпуска сертификата, в графе Common Name нужно нажать Enter.
Подпишем ключ server.vpn.ru используя наш CA-сертификат:
./easyrsa sign-req server server.vpn.ru
При подписании сертификата потребуется пароль, который мы задавали при выпуске сертификата CA:
Как указано на скриншоте, в процессе нужно будет ввести yes и пароль от CA.
Чтобы убедиться, что сертификаты сгенерировались без ошибок, выполните команду:
openssl verify -CAfile pki/ca.crt pki/issued/server.vpn.ru.crt
pki/issued/server.vpn.ru.crt: OK
Все сертификата OpenVPN сервера созданы:
- Корневой сертификат расположен: ‘pki/ca.crt’
- Закрытый ключ сервера расположен: ‘pki/private/server.vpn.ru.key’
- Сертификат сервера расположен: ‘pki/issued/server.vpn.ru.crt’
Для генерации ключа клиента, нужно выполнить команду:
./easyrsa gen-req имяклиента nopass
Сгенерируем ключ клиента admin1:
./easyrsa gen-req admin1 nopass
Как и с ключом сервера, нужно его подписать, используя CA-сертификат:
./easyrsa sign-req client admin1
Сертификат для пользователя создан.
Дополнительно нужно сгенерировать ключ Диффи-Хеллмана, который будет использоваться при обмене ключей:
./easyrsa gen-dh
Он генерируется продолжительное время
После чего генерируем TLS сертификат:
openvpn --genkey --secret ta.key
Если мы в дальнейшем планируем отзывать клиентские сертификаты, нам необходимо сгенерировать CRL ключ:
./easyrsa gen-crl
Чтобы отозвать сертификат надо выполнить команду:
./easyrsa revoke admin1 — где admin1 это имя сертификата
Необходимые для работы сертификаты созданы, скопируем их в рабочие директории:
Сертификаты сервера:
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/server.vpn.ru.crt /etc/openvpn/server/
cp pki/private/server.vpn.ru.key /etc/openvpn/server/
cp pki/dh.pem /etc/openvpn/server/
cp ta.key /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Сертификаты клиента:
cp pki/issued/admin1.crt /etc/openvpn/client/
cp pki/private/admin1.key /etc/openvpn/client/
Перейдем к настройкам конфигурационного файла OpenVPN. Сначала создадим файл конфигурации OpenVPN server.conf:
cd /etc/openvpn/ && nano server.conf
Меняем содержимое файла на следующее:
# Указываем порт, протокол и устройство
port 1194
proto udp
dev tun# Указываем пути к сертификатам сервера
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.vpn.ru.crt
key /etc/openvpn/server/server.vpn.ru.key#Пути до CRL и DH ключей
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem# Указываем настройки IP сети, адреса из которой будет будут получать VPN клиенты
server 15.10.2.0 255.255.255.0
push "redirect-gateway def1"# Указываем назначаемые DNS сервера
push "dhcp-option DNS 77.88.8.8"
push "dhcp-option DNS 8.8.4.4"
# Разрешить подключаться разным клиентам, с одинаковым ключем
duplicate-cn
# TLS защита
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache# Другая конфигурация
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody# Путь до лог файла
log-append /var/log/openvpn.log
verb 3
После чего сохраняем файл. Стандартный UDP порта 1194 для VPN сервера, но для работы OpenVPN вы можете указать любой свободный порт на сервере.
Осталось настроить правила файервола, чтобы разрешить подключение и маршрутизацию между сегментами.
Используем iptables, выполнив следующие команды:
yum install iptables-services -y
iptables -t nat -A POSTROUTING -s 15.10.2.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -p tcp --destination-port 1194 -j ACCEPT
Запустим OpenVPN и добавим его в автозагрузку Linux:
systemctl start openvpn@server
systemctl enable openvpn@server
Проверим настройки Ip сетевого интерфейса:
ip a
Как видим, на устройстве tun0 добавлена указанная при конфигурации сеть.
Это минимальные настройки, которые нужно сделать для работы OpenVPN.
Далее нам необходимо создать на локальном компьютере файл client.ovpn и добавил в него следующее содержимое:
И поместить в локальную папку
C:\Program Files\OpenVPN\config\
Для дальнейшей настройки нам потребуются созданные ранее сертификаты клиента, безопасности и сервера. Их нужно скачать с сервера и поместить в C:\Program Files\OpenVPN\config\, после чего в конфигурационном файле клиента OpenVPN нужно указать путь к ним путь.
Для этого используем приложение WinSCP (SPPTP). Скачать приложение можно на официальном сайте https://winscp.net/eng/download.php.
Вот так должна выглядеть конечная директория C:\Program Files\OpenVPN\config\:
Скачиваем официальную версию бинарных файлов OpenVPN Community Edition с графическим интерфейсом управления, после чего подключаемся через ярлык OpenVPN: