OpenVPN сервер на RouterOS - RDB IT Support
Налаштовуємо OVPN-сервер на ROS
1. Налаштування PKI
1.1. Сертифікат CA:
/certificate add name=CA country="UA" state="MSK" locality="MSK" organization="" unit="" common-name="CA" key-size=2048 days-val >
/certificate sign CA-crl-host=127.0.0.1 name="CA"
1.2. Сертифікат сервера:
/certificate add name=SRV country="UA" state="MSK" locality="MSK" organization="" unit="" common-name="srv-OVPN" key-size=2048 days-val > ;
/certificate sign SRV ca="CA" name="srv-OVPN"
Примітка: для сертифіката сервера key-usage краще не змінювати (а якщо дуже хочемо поміняти - то там написано що потрібно прописати в конфізі клієнта для цього).
Примітка: на відміну від SSTP - OVPN не перевіряє відповідність common-name сертифіката сервера fqdn'у цього сервера.
1.3. Шаблон для сертифікатів клієнтів:
/certificate add name=template-CL country="UA" state="MSK" locality="MSK" organization="" unit="" common-name="client-ovpn-template" key-size=2048 days-val >
1.3.1 Сертифікат першого клієнта:
/certificate sign CL-to-issue ca="CA" name="client-ovpn-1"
1.3.2. Сертифікат другого та наступних клієнтів:
3.1, але змінюємо значення параметрів.
Для першої команди це значення має бути унікальним в межах одного CA.
Для другої команди це значення має бути унікальним в межах одного мікротика.
1.4 У майбутньому для відкликання сертифікатів використовуємо команду:
certificate issued-revoke %cert-name%
Де %cert-name% — поле name= підписаного сертифіката, тобто PKI мікротика, що відображається.
2. Налаштування сервера OVPN
Примітка: можна налаштувати врежимі tun («ip» у ROS), а можна в режимі tap («ethernet» у ROS). Режим tun – звичайний тунель. Режим tap - емуляція повноцінного ethernet, зокрема в tap tap клієнтів можна об'єднати в режим мосту і вони будуть чудово один одного бачити. Теоретично в режимі tap можна запустити DHCP-сервер, але в поточній версії ROS це не реалізовано.
/ip pool add name=OVPN_srv_pool ranges=192.168.100.100-192.168.100.199
2tun.2. Створюємо PPP-profile для OVPN-сервера:
/ppp profile add name=OVPN_server local-address=192.168.100.1 remote-address=OVPN_srv_pool
Опціонально! Інші параметри на ваш смак і відповідно до ваших цілей. Наприклад: dns=192.168.100.1 use-ipv6=no
2tun.3. Налаштовуємо режим автентифікації користувачів:
/ppp aaa set accounting=yes
2tun.4. Додаємо користувачів:
/ppp secret add name=isp-user-1 password=8WeHJOiNDnIY26 service=ovpn profile=OVPN_server
/ppp secret add name=isp-user-2 password=FduuIixHWt95D1 service=ovpn profile=OVPN_server
2tun.5. Включаємо OVPN-сервер:
/interface ovpn-server server set auth=sha1 cipher=blowfish128 default-profile=OVPN_server mode=ip netmask=24 require-client-certificate=yes certificate=srv-OVPN enabled=yes port=443
/ip pool add name=OVPN_srv_pool ranges=192.168.100.100-192.168.100.199
2tap.1+. Створюємо міст для OVPN-підключень:
/interface br
Примітка: arp має бути включений, інакше клієнти один одного не побачать.
2tun.2. Створюємо PPP-profile для OVPN-сервера:
/ppp profile add name=OVPN_server local-address=192.168.100.1 remote-address=OVPN_srv_pool br >
Опціонально! Інші параметри на ваш смак і відповідновашими цілями. Наприклад: dns=192.168.100.1 use-ipv6=no
2tap.3. Налаштовуємо режим автентифікації користувачів:
/ppp aaa set accounting=yes
2tap.4. Додаємо користувачів:
/ppp secret add name=isp-user-1 password=8WeHJOiNDnIY26 service=ovpn profile=OVPN_server
/ppp secret add name=isp-user-2 password=FduuIixHWt95D1 service=ovpn profile=OVPN_server
2tap.5. Включаємо OVPN-сервер:
/interface ovpn-server server set auth=sha1 cipher=blowfish128 default-profile=OVPN_server mode=ethernet netmask=24 require-client-certificate=yes certificate=test-srv-OVPN enabled=yes port=443
Примітки для обох режимів:
2. RADIUS - аутентифікацію я не розглядаю просто тому, що не тестував. Можу лише припустити, що працюватиме вона тільки для username/password, а сертифікати будуть так само перевірятися на мікротиці.
3. Експорт сертифікатів для налаштування клієнтів
3.1. Експорт сертифіката CA:
/certificate export-certificate CA export-passphrase=""
Примітка: Нам потрібен лише сертифікат, закритий ключ НЕ потрібен, тому параметр export-passphrase="" повинен бути порожнім.
3.2. Експорт сертифікатів клієнтів:
/certificate export-certificate client-ovpn-1 export-passphrase=private-key-password1
/certificate export-certificate client-ovpn-2 export-passphrase=private-key-password2
Примітка: export-passphrase= – обов'язковий параметр для експорту закритих ключів; використовуємо для кожного клієнта свій пароль; НЕ використовуємо той же пароль, який вказували в пунктах 2.4 для користувачів!
3.3. Виймаємо отримані файли сертифікатів та ключів з мікротика будь-яким зручним способом (як правило, я тягаютуди-сюди файли прямо з винбокса).
1 Імпорт сертифікатів
1.1 Кладемо в мікротик файл сертифіката CA та файл сертифіката та файл ключа клієнта будь-яким зручним способом
1.2 Імпортуємо сертифікат CA
/certificate import file-name=cert_export_CA.crt passphrase=""
1.3 Імпортуємо сертифікат та ключ клієнта
/certificate import file-name=cert_export_client-ovpn-1.crt passphrase=""
/certificate import file-name=cert_export_client-ovpn-1.key passphrase=private-key-password1
2. Налаштовуємо клієнт
/interface ovpn-client add name=OVPN_client connect-to= port=443 mode= user=isp-user-1 password= 8WeHJOiNDnIY26 profile=default certificate= client-ovpn-1 auth=sha1 cipher=blowfish128 add- -route=disabled=no
Значення <> вказуєте відповідно до попередніх налаштувань та ваших потреб.
1. Отримуємо OVPN-дистрибутив із openvpn.net.
2. Встановлюємо, всі опції залишаємо за замовчуванням, у тому числі tap-інтерфейс, який знадобиться для будь-якого режиму налаштування.
3. Ідемо в OpenVPN\config (за замовчуванням C:\Program Files\OpenVPN\config) і створюємо там файл client.ovpn (або копіюємо з OpenVPN\sample-config).
4. Створюємо конфігурацію клієнта, або вносимо редагування з sample-config.
| # Режим, у якому працює OVPN сервіс client |
# Увага! Вказуємо лише один параметр із двох # Для режиму tup вказуємо параметр dev tun # Для режиму tap вказуємо параметр dev tap
# Цей параметр вказуємо тільки у разі використання режиму tap, а замість MyTap підставляємо ім'я tap інтерфейсу у windows (ipconfig /all, або мережеві підключення в панелі керування) dev-node MyTap
# Використовуваний протокол.ROS'овський OVPN-сервер працює тільки в режимі tcp proto tcp
# Цей параметр потрібен лише у разі використання більше одного сервера; При вказівці цього параметра при підключенні клієнт випадково вибирає один із зазначених серверів; remote-random
# Якщо вказано цей параметр, клієнт буде використовувати динамічний вихідний порт для підключення nobind
# Дозволяють клієнту зберігати налаштування тунелю при перепідключенні, а також не перечитувати файли ключів persist-key persist-tun
# Налаштування проксі ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #]
# Вимикає повідомлення про пакети, що повторюються ;mute-replay-warnings
# Шляхи до файлів сертифікатів # ca - сертифікат CA, яким видано сертифікат клієнта І сертифікат сервера # cert - сертифікат клієнта # key - закритий ключ сертифіката клієнта ca cert_export_CA.crt cert cert_export_client-ovpn-1.crt key cert_export_client-ovpn-1.key
# auth-user-pass повідомляє клієнту, що він повинен використовувати ім'я користувача та пароль для аутентифікації (але не замість сертифікатів, а разом із сертифікатами) # auth-user-pass говорить OVPN-клієнту використовувати логін та пароль (але не замість сертифікатів, а разом із сертифікатами) # user-pwd.txt вказує на файл, у якому зберігаються логін та пароль; перший рядок у файлі – логін, другий – пароль; за відсутності цього аргументу логін і пароль будуть запитуватися щоразу при підключенні # Примітка: У разі використання сертифіката із закритим ключем, до якого і так потрібно вводити ключ при кожному підключенні, я не вважаю за необхідне змушувати користувача пам'ятати ще й логін із паролем --auth-user-pass user-pwd.txt
# Повідомляє клієнту, що вінповинен перевіряти сертифікат сервера на предмет правильності використовуваних key-usage remote-cert-tls server
# Ключ для шифрування початку процесу аутентифікації (handshake), додатковий захід безпеки. Має сенс при використанні тільки логіна/паролю, без сертифікатів. ;tls-auth ta.key 1
# Завдання особливого методу шифрування, за замовчуванням використовується blowfish128. ;cipher x
# Використання lzo-стискання. OVPN не підтримується на ROS. ;comp-lzo
Рівень лога. Чим більше значення - тим докладніше.
# Блокування повідомлень, що повторюються, в лозі ;mute 20
# Вище були наведені параметри, які є в "рідному" прикладі конфіга для клієнта + 1 необхідний нам параметр # Нижче я наведу ще кілька, на мій погляд, корисних параметрів.
# Маршрут, що встановлюється під час запуску підключення # Маршрут вказує не на шлюз, а безпосередньо на підключення route 192.168.88.0 255.255.255.0
# Пауза перед встановленням маршрутів після встановлення підключення (в секундах) route-delay 5
# Якщо ми хочемо задати OVPN-підключення як основний шлюз route-gateway 192.168.100.1
Примітка: для застосування параметрів маршрутизації, прописаних у конфізі, сам сервіс OVPN, або OVPN GUI повинні бути запущені з правами адміністратора.