0

Mikrotik: сервер OpenVPN и Ubuntu в качестве клиента

07.02.2024

Задача:

  • Mikrotik в качестве сервера OpenVPN, Ubuntu в качестве клиента
  • Генерация сертификатов на Mikrotik

Настраиваем Mikrotik

Создаем сертификаты

Создаем сертификаты: CA, сервера OpenVPN, клиента OpenVPN как описано тут: Mikrotik: работа с сертификатами

Экспортируем сертификаты: ca.crt, client1.crt, client1.key (с паролем)

Создаем профиль

Открываем PPP / Profiles, создаем новый (не все из указанных опций нужны, смотрите сами):

  • Закладка General
    • Name: openvpn-profile
    • Local Address: 10.10.10.1
    • Change TCP MSS: Yes
  • Закладка Protocols
    • Use Compression: Yes
    • Use Encryption: Yes
  • Закладка Limits
    • Only One: No

Создаем пользователя

Открываем PPP / Secrets, создаем нового пользователя:

  • Name: ovpn-client1
  • Password: $ecretP@$$word
  • Service: ovpn
  • Profile: openvpn-profile
  • Remote-Address: 10.10.10.2 (или можно сделать через пул адресов)

Включаем OpenVPN

Открываем PPP / OVPN Server, включаем:

  • Enabled: включаем
  • Port: 1194
  • Mode: ip
  • Default-profile: openvpn-profile
  • Certificate: Выбираем сертификат сервера (не CA!)
  • Require Client Certificate: включаем для проверки сертификата клиента
  • Auth: sha1, остальное отключаем
  • Cipher: aes 256, остальное отключаем

Создаем интерфейс для клиента

Это необязательно, но так удобнее работать для разрешения трафика.

Открываем PPP / Interface и создаем OVPN Server Binding

  • Name: OVPN-Client1
  • User: ovpn-client1

Разрешаем трафик

Открываем порт OpenVPN чтобы клиенты могли подключаться.

Не забываем поднять правила вверх списка чтобы они не попадали под запреты!

Открываем IP / Firewall, создаем новое правило:

  • Chain: input
  • Protocol: 6 (tcp)
  • Dst. Port: 1194
  • Action: Accept

При необходимости можете ограничить интерфейс и адреса с которых будет идти подключение.

Разрешаем трафик через VPN, открываем IP / Firewall, создаем 3 новых правила (зачем именно так – отдельный вопрос):

  • Правило input
    • Chain: input
    • In. Interface: OVPN-Client1
    • Action: accept
  • Правило forward
    • Chain: forward
    • In. Interface: OVPN-Client1
    • Action: accept
  • Правило output
    • Chain: output
    • Out. Interface: OVPN-Client1
    • Action: accept

Настраиваем Ubuntu

Устанавливаем OpenVPN на Ubuntu

Подробно описано тут: Установка OpenVPN в Ubuntu

Настраиваем OpenVPN как клиент на Ubuntu

Копируем сертификаты ca.crt, client1.crt, client1.key (с паролем) на сервер в папку /etc/openvpn

Снимаем пароль с client1.key (иначе при запуске OpenVPN будет его требовать, а нам нужно чтобы все работало автоматически):

openssl rsa -in client1.key -out client1.key

Создаем конфигурационный файл /etc/openvpn/client.conf

XXX.XXX.XXX.XXX – адрес Mikrotik

client
dev tun
proto tcp
remote XXX.XXX.XXX.XXX 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-eku 'TLS Web Server Authentication'
cipher AES-256-CBC
auth SHA1
auth-nocache
auth-user-pass client1.txt
user nobody
group nogroup
route 10.10.10.0 255.255.255.0 10.10.10.1
verb 3
mute 20

Создаем файл /etc/openvpn/client1.txt с логином и паролем:

ovpn-client1
Password: $ecretP@$$word

Убираем права на файлы для всех пользователей кроме root:chown root:

chown root:root ca.crt client1.crt client1.key client1.txt client.conf
chmod 600 ca.crt client1.crt client1.key client1.txt client.conf

Запускаем клиента, смотрим логи, проверяем работу:

systemctl start openvpn@client

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

systemctl enable openvpn@client

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:398 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(845): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(418): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 398