Установка и настройка 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 со встроенными ключами. Данный файл нужно перенести на клиентский компьютер и поместить в соответствующий каталог.
На этом настройка завершена.
Добавить комментарий