Задача: Сервер OpenVPN на Ubuntu, Microtik в качестве клиента, подключение Site-to-site
Что понадобится:
Примечание: Ubuntu 20.04 LTS
Ставим пакеты:
sudo apt install openvpn easy-rsa -y
Можно создать отдельного пользователя для генерации ключей, можно использовать существующего, можно все делать под root - выбирайте как больше нравится. Я создаю отдельного пользователя openvpn.
Создание пользователя:
useradd -m -s /bin/false openvpn
Далее все делаем от этого пользователя.
Создаем папки, даем на них права:
mkdir ~/easy-rsa ln -s /usr/share/easy-rsa/* ~/easy-rsa/ chown openvpn ~/easy-rsa chmod 700 ~/easy-rsa
Настраиваем конфигурацию, которая будет использоваться при генерации ключей:
cd ~/easy-rsa cp /usr/share/easy-rsa/vars.example vars
Далее в файле vars изменяем/добавляем описанные ниже строки.
Настройки для ключей, чтобы не запрашивало каждый раз:
set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "Moscow Region" set_var EASYRSA_REQ_CITY "Moscow" set_var EASYRSA_REQ_ORG "YOU_ORGANIZATION" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "OU_UNIT"
Длина ключа:
set_var EASYRSA_KEY_SIZE 2048
Вид ключа. Можно старый добрый RSA, можно новый и более короткий Elliptic curve. Для работы с Микротиками я оставляю RSA 2048
# The default crypto mode is rsa; ec can enable elliptic curve support. # Note that not all software supports ECC, so use care when enabling it. # Choices for crypto alg are: (each in lower-case) # * rsa # * ec set_var EASYRSA_ALGO rsa # Define the named curve, used in ec mode only: #set_var EASYRSA_CURVE secp384r1
Срок действия корневого CA сертификата:
set_var EASYRSA_CA_EXPIRE 7300
Срок действия выдаваемых для пользователей сертификатов:
set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_KEY_EXPIRE 3650
Если не планируете заморачиваться со списками отзыва ключей (например, делаем ключи только для редко сменяемого оборудования):
set_var EASYRSA_CRL_DAYS 3650
Инициализируем:
./easyrsa init-pki
Создаем CA. В процессе создания будет запрошен пароль - запишите его в надежном месте, он понадобится при любой операции по выдаче/удаление сертификатов!
./easyrsa build-ca
Создаем DH:
./easyrsa gen-dh
Создаем TA (TLS, но использовать с Микротиком не будем, а вот пользователей сможем дополнительно проверять):
openvpn --genkey --secret ~/easy-rsa/pki/ta.key
Создаем сертификат сервера (ключ nopass чтобы не требовался пароль):
./easyrsa build-server-full VPN-Server nopass
Создаем CRL (список отозванных сертификатов):
./easyrsa gen-crl
Копируем все сертификаты и ключи в папку настроек OpenVPN:
sudo cp -rp ~/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem} /etc/openvpn/server/ sudo cp -rp ~/easy-rsa/pki/issued/VPN-Server.crt /etc/openvpn/server/ sudo cp -rp ~/easy-rsa/pki/private/VPN-Server.key /etc/openvpn/server/
Создание выполняется следующей командой (my-user - имя пользователя, ключ nopass чтобы не требовался пароль):
./easyrsa build-client-full my-user nopass
Немного условий:
Создаем файл /etc/openvpn/mikrotik.conf со следующим содержимым:
ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/VPN-Server.crt key /etc/openvpn/server/VPN-Server.key dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem proto tcp dev tun topology subnet server 172.16.1.0 255.255.255.0 client-config-dir /etc/openvpn/ccd keepalive 10 60 persist-key persist-tun auth SHA1 # for OpenVPN < v.2.6.0 #cipher AES-256-CBC # for OpenVPN >= v.2.6.0 cipher AES-256-CBC data-ciphers 'AES-256-CBC' data-ciphers-fallback 'AES-256-CBC' user nobody group nogroup push "route 10.0.0.0 255.255.255.0" route 192.168.1.0 255.255.255.0 log-append /var/log/openvpn/openvpn-mikrotik.log status /var/log/openvpn/openvpn-mikrotik-status.log ifconfig-pool-persist /var/log/openvpn/ipp-mikrotik.txt verb 3 mute 20 mssfix 0
Создаем папку /etc/openvpn/ccd - там будут храниться индивидуальные конфиги для клиентов.
Создаем файл /etc/openvpn/ccd/my-user со следующим содержимым:
ifconfig-push 172.16.1.2 255.255.255.0 iroute 192.168.1.0 255.255.255.0
Смысл этих настроек следующий:
Копируем с сервера Ubuntu следующие файлы (на Windows это можно сделать при помощи WinSCP):
Заливаем сертификаты на Mikrotik: Files → Upload
Импортируем сертификаты через System → Certificates → Import в указанном порядке:
В итоге должно быть 2 записи:
Настраиваем профиль OVPN: PPP → Profiles → Добавить
Добавляем интерфейс OVPN Client:
Чтобы трафик ходил через наш интерфейс добавляем 3 правила: IP → Firewall → Filter Rules
Внимание: данные правила разрешают любой трафик через VPN!
Закладка General
Закладка Action:
Закладка General
Закладка Action:
Закладка General
Закладка Action:
Проверяем работу VPN.
Далее можно ограничить разрешения на трафик через VPN и принять прочие меры безопасности.