Stupid House

Настройка OpenVPN сервера на CentOS 8 и подключение MikroTik как клиента


Настройка OpenVPN сервера на CentOS 8 и подключение MikroTik как клиента

Поскольку VPS под FreeBSD, отработавшая три года, своими периодическими зависаниями поднадоела, было решено пересобрать всё заново. К сожалению FreeBSD, предлагаемая в шаблонах на aruba.it, не поддерживает IPv6, поэтому новая VPS будет создана на CentOS 8.

 

Установка и настройка OpenVPN сервер на CentOS 8

Устанавливаем пакеты OpenVPN и Easy-RSA:

$ sudo dnf install openvpn easy-rsa

Создаем папку easy-rsa и символьные ссылки из скрипта easyrsa:

$ sudo mkdir /etc/openvpn/easy-rsa
$ sudo ln -s /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa

Что бы не создавать новый файл vars, копируем из файла примера:

$ sudo wget https://raw.githubusercontent.com/OpenVPN/easy-rsa/master/easyrsa3/vars.example
$ sudo mv vars.example /etc/openvpn/easy-rsa/vars

Правим файл /etc/openvpn/easy-rsa/vars, раскомментируем и заполняем поля, которые относятся к информации о сертификате:

set_var EASYRSA_REQ_COUNTRY     "FR"
set_var EASYRSA_REQ_PROVINCE    "Freedom area"
set_var EASYRSA_REQ_CITY        "Freedom City"
set_var EASYRSA_REQ_ORG         "Freedom Co"
set_var EASYRSA_REQ_EMAIL       "no@mail.net"
set_var EASYRSA_REQ_OU          "Freedom Org"

Устанавливаем размер ключа 4096 bit:

set_var EASYRSA_KEY_SIZE 4096

Режим шифрования RSA:

set_var EASYRSA_ALGO rsa

Срок действия корневого сертификата в днях:

set_var EASYRSA_CA_EXPIRE 3650

Срок действия выпущенных сертификатов в днях:

set_var EASYRSA_CERT_EXPIRE 1095

Сохраняем файл vars. Теперь создаем структуру каталогов для ключей. Команда выполняется только один раз!

$ cd /etc/openvpn/easy-rsa/
$ ./easyrsa init-pki

Создание корневого сертификата, которым будут подписываться остальные (Certificate Authority):

$ ./easyrsa --vars=/etc/openvpn/easy-rsa/vars build-ca nopass

Опция nopass не требует при запуске пароль, но ключи в этом случае необходимо хранить надежно.

Создание сертификата OpenVPN сервера (Server Certificate):

$ ./easyrsa --vars=/etc/openvpn/easy-rsa/vars build-server-full openvpn-server nopass

Генерация ключа Diffie Hellman, для ключа в 4096 bit процесс может занять некоторое время:

$ ./easyrsa --vars=/etc/openvpn/easy-rsa/vars gen-dh

Создание сертификата клиента (Client Certificate). Для каждого клиента необходимо выпустить свой сертификат.

$ ./easyrsa --vars=/etc/openvpn/easy-rsa/vars build-client-full <client_name> nopass

Создаем пустой список отозванных сертификатов:

$ ./easyrsa gen-crl

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

$ sudo touch /etc/openvpn/server/server.conf

Заполняем файл конфигурации:

# Выставляем порт 443 что бы никто не догадался что мы используем VPN :)
port 443

# Протокол TCP т.к. MikroTik не умеет UDP
proto tcp
dev tun

# Сертификаты и ключи
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt
key /etc/openvpn/easy-rsa/pki/private/openvpn-server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem

# Используемый пул адресов
server 10.11.12.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/server/ipp.txt
client-config-dir /etc/openvpn/server/ccd

# Интерфейс OpenVPN должен использоваться клиентами по умолчанию (MikroTik это не касается)
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
cipher AES-256-CBC

# Максимальное количество подключенных клиентов
max-clients 10

# Понижение привилегий OpenVPN сервера после инициализации
user nobody
group nobody
persist-key
persist-tun

# Логирование
status /var/log/openvpn-status.log
log    /var/log/openvpn.log
verb 4

# Отозванные сертификаты
crl-verify /etc/openvpn/easy-rsa/pki/crl.pem

Создаем папку ccd и пустой файл ipp.txt:

$ sudo mkdir /etc/openvpn/server/ccd
$ sudo touch /etc/openvpn/server/ipp.txt

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

$ sudo systemctl -f enable openvpn-server@server.service
$ sudo systemctl start openvpn-server@server.service

 

Настройка NAT

По умолчанию пересылка пакетов отключена, для включения необходимо ввести команду:

$ sudo sysctl -w net.ipv4.ip_forward=1

Что бы маршрутизация работала после перезагрузки сервера в файл /etc/sysctl.conf добавляем строчку:

net.ipv4.ip_forward = 1

Для применения изменений:

$ sudo sysctl -p /etc/sysctl.conf

Включение NAT на интерфейсе eth0:

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

В цепочку INPUT фаервола разрешаем доступ подсети OpenVPN:

$ sudo iptables -A INPUT -s 10.11.12.0/24 -j ACCEPT

 

Настройка MikroTik в качестве OpenVPN клиента

Копируем на MikroTik созданный ранее сертификат клиента с ключом (client.crt и client.key).

mikrotik openvpn client files

В меню System -> Certificates последовательно импортируем сертификат и ключ, кнопка Import. Импортированный сертификат должен иметь атрибуты KT (K - ключ имеет Private Key, T - Trusted).

mikrotik certificates openvpn client

Создаем новое подключение OpenVPN. PPP -> + -> OVPN Client. В открывшемся окне на вкладке General произвольно заполняем поле Name. На вкладке Dial Out последовательно заполняем поля:

  • Connect To - адрес предварительно настроенного OpenVPN сервера
  • Port - 443, как ранее конфигурационном файле OpenVPN сервера
  • Mode - ip
  • User - произвольно, в настройках сервера мы не указывали пользователя, но в настройках MikroTik заполнить его необходимо
  • Profile - default
  • Certificate - в выпадающем списке выбираем ранее импортированный сертификат
  • Auth - sha1
  • Cipher - aes 256
  • Add Default Route - только если хотим, чтобы весь трафик шел в OpenVPN канал
mikrotik ppp openvpn client

После сохранения настроенное соединение должно подключиться к OpenVPN серверу.

Самое интересное, для чего все это строилось, в разделе IP -> Routes добавляем адреса, трафик с которых мы хотим пустить по OpenVPN соединению.

mikrotik route via openvpn

 

Дополнительные команды для работы с сертификатами

Отзыв сертификата:

$ ./easyrsa revoke <client_name>

Просмотр информации о сертификате:

  • *.crt - $ openssl x509 -in certificate.crt -text -noout
  • *.pem - $ openssl rsa -in privatekeyfile.key -check
  • *.pfx (p12) - $ openssl pkcs12 -info -in keystore.p12
  • *.csr - $ openssl req -text -noout -verify -in CSR.csr
Автор: muxa, 05.01.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии