Сегодня мы рассмотрим довольно изъезженную тему про поднятие 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 все также отлично подключается:
comment 0 التعليقات:
more_vertsentiment_satisfied Emoticon