Установка и настройка OpenVPN на CentOS 7.

Установка и настройка OpenVPN на CentOS 7.

В данном руководстве рассматривается установка и настройка OpenVPN сервера под управлением CentOS 7.

OpenVPN-cервер имеет внешний IP-адрес 1.1.1.1 , подключаемые устройства будут получать адреса из сети 10.8.0.0/24

При данной схеме клиенты подключаются на адрес 1.1.1.1 , во внешний мир они также будут выходить с адреса 1.1.1.1. Если на сервере присутствует несколько внешних IP-адресов, то схему можно видоизменить: клиенты подключаются на 1.1.1.1, во внешний мир выходят с 1.1.1.2 ( не путать с double vpn ).

 

Итак, в наличии имеется свежеустановленный сервер на CentOS 7.

Выполняем обновление:

# yum update

# yum upgrade

Производим установку пакетов, в том числе вспомогательных:

# yum install epel-release

# yum install mc net-tools htop openvpn easy-rsa

Отключаем SELINUX:

# setenforce 0

Также проверяем файл /etc/selinux/config , если параметр SELINUX установлен в  enforcing — меняем на disabled ( SELINUX=disabled ).

Пакет easy-rsa требуется нам для создания собственного центра сертификации. Для безопасности его можно разместить на другом сервере, для простоты демонстрации создание ключей и сертификатов будем производить на этом же сервере. Для удобства работы создаём символическую ссылку на каталог с easy-rsa в /etc/openvpn:

# ln -s /usr/share/easy-rsa/3 /etc/openvpn/easy-rsa

Для настройки переменных центра сертификации создаём файл vars:

# touch /etc/openvpn/easy-rsa/vars

и вносим в него следующие строки:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="EKB"
export KEY_CITY="EKB"
export KEY_ORG="SYSAD"
export KEY_EMAIL="info@sysad.su"
export KEY_CN="IT"
export KEY_OU="IT"
export KEY_NAME="openvpn.sysad.ru"

И выполняем:

# ./vars

Сейчас всё готово к созданию центра сертификации. Выполняем инициализацию:

# cd /etc/openvpn/easy-rsa/

# ./easyrsa init-pki

В результате должны увидеть на экране результат работы:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

Создаём корневой сертификат:

# ./easyrsa build-ca

При запросе скрипта

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:

дважды задаём пароль.

На запрос

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

можно нажать клавишу Enter.

Создаем ключ Диффи-Хеллмана:

# ./easyrsa gen-dh

Для создания сертификата сервера на первом этапе создаём файл запроса:

# ./easyrsa gen-req server01 nopass

И затем создаём сертификат сервера:

# ./easyrsa sign-req server server01

На вопрос Type the word ‘yes’ to continue, or any other input to abort вводим: yes

И затем пароль, который использовался для создания корневого сертификата.

Для создания ta ключа используем команду:

# openvpn --genkey --secret pki/ta.key

Приступаем к настройке OpenVPN сервера.

Копируем файлы ca.crt, dh.pem, server01.crt, server01.key, ta.key в /etc/openvpn

Создаём файл конфигурации server.conf со следующим содержимым:


local 1.1.1.1
port 1194
proto udp
dev tun

ca ca.crt
cert server01.crt
key server01.key
dh dh.pem
tls-auth ta.key 0

server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120

cipher AES-256-CBC
auth SHA256

user nobody
group nobody

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

# for udp only
explicit-exit-notify 1

Включаем автозапуск OpenVPN сервера:

# systemctl enable openvpn@server

Стартуем сервис:

# systemctl start openvpn@server

Проверяем лог-файлы и наличие интерфейса tun0:

# ip a

Если в вводе команды ip a присутствуют нижеследующие строки, значит сервис успешно стартовал:


3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
<pre>

 

Для того, чтобы сервер мог транслировать пакеты с клиента во внешний мир выполняем следующие действия.

В файл /etc/sysctl.conf добавляем строку

net.ipv4.ip_forward=1

Для вступления изменений в силу выполняем:
# sysctl -p

Включаем и активируем сервис iptables, отключая при этом firewalld.

# yum install iptables-services -y
# systemctl mask firewalld
# systemctl enable iptables
# systemctl stop firewalld
# systemctl start iptables
# iptables --flush

Включаем маскарадинг:

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

и сохраняем правила iptables:

# iptables-save > /etc/sysconfig/iptables

Для настройки клиента потребуется создание клиентских сертификатов, ключей и файла конфигурации. Автоматизируем этот процесс.

В каталоге /etc/openvpn/client создадим файл make_config.sh со следующим содержимым:

#!/bin/bash

# First argument: Client identifier

cd /etc/openvpn/easy-rsa
/etc/openvpn/easy-rsa/easyrsa gen-req ${1} nopass
/etc/openvpn/easy-rsa/easyrsa sign-req client ${1}

cp /etc/openvpn/easy-rsa/pki/private/${1}.key /etc/openvpn/client/${1}.key
cp /etc/openvpn/easy-rsa/pki/issued/${1}.crt /etc/openvpn/client/${1}.crt
cp /etc/openvpn/easy-rsa/pki/ca.crt  /etc/openvpn/client/ca.crt
cp /etc/openvpn/easy-rsa/pki/ta.key  /etc/openvpn/client/ta.key

cd /etc/openvpn/client

KEY_DIR=/etc/openvpn/client
OUTPUT_DIR=/etc/openvpn/client
BASE_CONFIG=/etc/openvpn/client/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Создадим файл шаблона для клиентского конфига base.conf:

client
dev tun
proto udp
remote 1.1.1.1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
verb 3
key-direction 1

 

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

# /etc/openvpn/client/make_config.sh client01

где client01 желаемое имя файла конфигурации. На выходе получим client01.ovpn со встроенными ключами. Данный файл нужно перенести на клиентский компьютер и поместить в соответствующий каталог.

На этом настройка завершена.

Nicko

Добавить комментарий