Сегодня мы рассмотрим довольно изъезженную тему про поднятие OpenVPN сервера на Mikrotik. Но в отличие от множества мануалов, которые можно найти в сети мы будем настраивать именно TUN (в терминологии Mikrotik - IP), а не TAP (Ethernet) сервер, причем таким образом, чтобы к нему могли подключаться как Windows клиенты, так и клиенты на Android. Большинство мануалов в сети, например, этот предполагают поднятие OpenVPN сервера в Mode: Ethernet. Однако при таком варианте настройки Windows клиенты будут подключаться к нему без проблем, а вот при попытке подключения с Android ничего не получится, т.к. два распространенные клиента под Android - OpenVPN Connect и OpenVPN for Android не умеют работать с TAP-интерфейсом.
Вообщем, наша цель - создать такой сервер, чтобы мы без проблем коннектились к нему и из под Windows, и из под Android и не испытывали при этом никаких проблем. Предполагается что вы уже знакомы с генерацией сертификатов для OpenVPN-сервера и можете сгенерировать их либо в самом Mikrotik'е, либо с использованием OpenSSL. Последний вариант, кстати, хорошо расписан в этой статье. Поэтому здесь мы подробно не будем останавливаться на этом.
Настраиваем OpenVPN следующим образом:
Теперь давайте разберемся ... у нас используется tun интерфейс, при этом должна использоваться маска подсети /30 (почему так - описывать здесь не буду, почитайте мануалы по OpenVPN) ... Что же такое маска /30 (255.255.255.252), чтобы было нагляднее - давайте я приведу вам пример нескольких подсетей с такой маской, включая адреса хостов:
Сеть 1:
Т.о. мы получаем что при использовании tun-адаптера local и remote address должны быть из одной подсети /30, так, для клиента android01 мы прописали local address 172.16.0.1, а remote address 172.16.0.2, для android02 - 172.16.0.5 и 172.16.0.6 соответственно. Теперь напишем клиентский конфиг:
Вообщем, наша цель - создать такой сервер, чтобы мы без проблем коннектились к нему и из под Windows, и из под Android и не испытывали при этом никаких проблем. Предполагается что вы уже знакомы с генерацией сертификатов для OpenVPN-сервера и можете сгенерировать их либо в самом Mikrotik'е, либо с использованием OpenSSL. Последний вариант, кстати, хорошо расписан в этой статье. Поэтому здесь мы подробно не будем останавливаться на этом.
Настраиваем OpenVPN следующим образом:
Стандартный для OpenVPN TCP порт 1194 мы изменили на 8888, также не забываем что нам нужно разрешить на него входящие подключения в firewall'е. В mode выставляем ip, что соответствует tun интерфейсу, а в netmask - ставим 30. Как все это будет работать - вы поймете чуть позже.
В openvpn-profile мы ничего не настраиваем, т.е. Local Address и Remote Address оставляем пустыми. Вместо этого мы будем назначать адреса вручную в PPP -> Secrets для каждого клиента в отдельности. Предположим что у нас их два, один - смартфон на Android (android01), второй - клиент на Windows (правда назвал я его зачем-то android02):
Сеть 1:
Сеть: | 172.16.0.0/30 | ||
Кол-во хостов: | 4 | ||
Базовый адрес сети: | 172.16.0.0 | ||
Широковещательный адрес сети: | 172.16.0.3 | ||
Первый адрес хоста: | 172.16.0.1 | ||
Последний адрес хоста: | 172.16.0.2 | ||
Маска сети: | 255.255.255.252 |
Сеть 2:
Сеть: | 172.16.0.4/30 | ||
Кол-во хостов: | 4 | ||
Базовый адрес сети: | 172.16.0.4 | ||
Широковещательный адрес сети: | 172.16.0.7 | ||
Первый адрес хоста: | 172.16.0.5 | ||
Последний адрес хоста: | 172.16.0.6 | ||
Маска сети: | 255.255.255.252 |
Т.о. мы получаем что при использовании tun-адаптера local и remote address должны быть из одной подсети /30, так, для клиента android01 мы прописали local address 172.16.0.1, а remote address 172.16.0.2, для android02 - 172.16.0.5 и 172.16.0.6 соответственно. Теперь напишем клиентский конфиг:
client dev tun proto tcp remote openvpn-server-ip 8888 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert android01.crt key android01.key verb 3 pull auth-user-pass auth.cfg redirect-gateway def1 dhcp-option DNS 8.8.8.8 dhcp-option DNS 8.8.4.4 tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
Обратите внимание, здесь в auth-user-pass задается имя файла с логином и паролем auth.cfg (файл состоит из двух строк, на первой логин, на второй пароль), redirect-gateway def1 - нужна для переопределения основного шлюза, т.е. чтобы при подключении к OpenVPN-серверу весь траффик шел через него, и последняя строка tls-cipher задает используемый тип шифрования. Без нее мы получим проблему с TLS failed при соединении, которая подробно описана вот здесь (вообще на форуме Mikrotik'a очень много тем про ошибку TLS при подключении, но решения так нигде и не приведено, по-крайней мере сходу оно не находится, причем как утверждают там же на ранних версиях RouterOS все работало, а вот после обновления версии прошивки почему-то перестало).
Проверяем подключение в OpenVPN Connect и OpenVPN for Android:
Как видно, все работает. Под Windows, с использованием OpenVPN 2.3.8 x86_64-w64-mingw32 все также отлично подключается:
Проверяем подключение в OpenVPN Connect и OpenVPN for Android:
Как видно, все работает. Под Windows, с использованием OpenVPN 2.3.8 x86_64-w64-mingw32 все также отлично подключается:
А в какой версии routeros это проверялось? В 6.32.2 по данному методу не удалось подружить android и микрот.
ОтветитьУдалитьRouterOS 6.27. А что именно не получилось?
УдалитьПроблема была с ключем пользователя. Пересоздал - все заработало. Спасибо за статью)
Удалитьа если не использовать сертификаты клиента?
ОтветитьУдалитьА смысл в этом? Т.е. в чем сложности создать клиентские сертификаты?
УдалитьА есть ли возможность назначать конкретные ip пользователям с конкретными сертификатами? Чтобы дальше была возможность фаерволом доступ граничить: простым смертным - только на определенный хост, админу - везде? На linuxовом шлюзе у меня это делается профилями в /etc/openvpn/ccd через ifconfig-push
ОтветитьУдалитьIP можно из пула выдавать, а пользователям присваивать разные профайлы, в которых определять AddressList и доступы в файрволе прописывать по AddresList'ам
ОтветитьУдалитьРебята, я три дня сопрягал андройды и винды. Задолбался. Настроил по инструкции с этого сайта, только маску сделал 27 и выдачу адресов из пула. И всё работает. Спасибо, низкий поклон.
ОтветитьУдалитьНизкий поклон, друзья.
ОтветитьУдалитьtls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
Вот эта строчка помогла.