====== Microtik: Клиент Site-to-site OpenVPN с Ubuntu ====== Задача: Сервер OpenVPN на Ubuntu, Microtik в качестве клиента, подключение Site-to-site Что понадобится: * Сервер на Ubuntu с белым адресом (или проброшенным портом) * Mikrotik * 15 минут времени ===== Сервер OpenVPN на Ubuntu ===== Примечание: Ubuntu 20.04 LTS ==== Установка ==== Ставим пакеты: sudo apt install openvpn easy-rsa -y ==== Настройка конфигурации OpenVPN ==== Можно создать отдельного пользователя для генерации ключей, можно использовать существующего, можно все делать под 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 "you@email.com" 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 ==== Создание CA и прочих сертификатов: ==== Инициализируем: ./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 ==== Настройка конфигурационного файла OpenVPN ==== Немного условий: * Для VPN у нас будет использоваться подсеть 172.16.1.0 255.255.255.0 * Сеть за сервером Ubuntu: 10.0.0.0 255.255.255.0 * Сеть за Mikrotik: 192.168.1.0 255.255.255.0 Создаем файл /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 Смысл этих настроек следующий: * В файле mikrotik.conf указали отправлять на сторону клиента маршрут до сети за сервером OpenVPN на Ubuntu (push "route 10.0.0.0 255.255.255.0") * Там же прописали маршрут до сети клиента (route 192.168.1.0 255.255.255.0) * В файле my-user явно указали какой IP назначить данному клиенту (ifconfig-push 172.16.1.2 255.255.255.0) * Там же явно указали какая сеть у данного клиента (iroute 192.168.1.0 255.255.255.0) ===== Mikrotik - настройка клиента ===== ==== Импортируем сертификаты ==== Копируем с сервера Ubuntu следующие файлы (на Windows это можно сделать при помощи WinSCP): * ~/easy-rsa/pki/ca.crt * ~/easy-rsa/pki/issued/my-user.crt * ~/easy-rsa/pki/private/my-user.key Заливаем сертификаты на Mikrotik: Files -> Upload Импортируем сертификаты через System -> Certificates -> Import в указанном порядке: * ca.crt * my-user.crt * my-user.key В итоге должно быть 2 записи: * ca.crt со статусом "Т" * my-user.crt со статусом "КТ" ==== Настраиваем подключение ==== Настраиваем профиль OVPN: PPP -> Profiles -> Добавить * Вкладка General * Name: ovpn-profile * Change TCP MSS: yes * Вкладка Protocols * Use IPv6: no * Use MPLS: no * Use compression: no * Use Encryption: yes Добавляем интерфейс OVPN Client: * Закладка General * Name: OVPN-VPN-Server * Закладка Dial Out * Connect to: указываем адрес нашего сервера Ubuntu OpenVPN * Port: 1194 * Mode: ip * User: my-user (пользователь, которому мы сделали сертификат) * Profile: ovpn-profile * Certificate: выбираем наш импортированный сертификат пользователя my-user * Verify Server Certificate: включить * Auth: Sha1 * Cipher: aes 256 * Use Peer DNS: отключить * Add Default Route: отключить, но если надумаете весь трафик гнать через данный VPN то следует включить ==== Настраиваем разрешения для нового интерфейса ==== Чтобы трафик ходил через наш интерфейс добавляем 3 правила: IP -> Firewall -> Filter Rules Внимание: данные правила разрешают любой трафик через VPN! === Правило Input === Закладка General * Chain: input * In. Interface: OVPN-VPN-Server Закладка Action: * Action: accept === Правило Ouput === Закладка General * Chain: output * Out. Interface: OVPN-VPN-Server Закладка Action: * Action: accept === Правило Forward === Закладка General * Chain: forward * Out. Interface: OVPN-VPN-Server Закладка Action: * Action: accept Проверяем работу VPN. ===== Что дальше ===== Далее можно ограничить разрешения на трафик через VPN и принять прочие меры безопасности.