Более подробно об OpenVPN в Mikrotik

Возникла намедни служебная необходимость разобраться с реализацией OpenVPN в этом самом Mikrotik. Но обо всем по порядку.

1. Поддерживается практически полный функционал OpenVPN, за исключением UDP-транспорта и lzo-компрессии.
2. Зато умееет все остальное – TCP-траспорт, tun/tap-девайсы для l3/l2 тоннелей соответственно, сертификаты (без них, кстати, работать, скорее всего, не будет)

Подробнее, собственно, тут, но уже на басурманском.

Итак, сценарий – имеем клиента, подключенного через чужой интернет, которому нужно отдать L2-канал по каким-либо причинам. Клиент находится за NAT, так что айпишник его неизвестен. PPTP-соединение время от времени разваливается по непонятным причинам (возможно, из-за действий этого самого оператора, либо еще почему-то).

На нашей, “ближней”, стороне создаем OVPN-сервер, который будет слушать порт 1194 и ждать клиентов:
1. Для начала определяем пул адресов, выдаваемых клиентам (даже если режим работы – ethernet, и маршрутизации никакой нет и в помине – как минимум, можно будет получить доступ на устройство, что само по себе ценно.
/ip pool add name=ovpn-pool ranges=192.168.100.2-192.168.100.31
2. Создаем бридж, который будет связывать наш OpenVPN-тоннель с другим L2-интерфейсом
/interface bridge name=vpn-bridge
3. Добавляем PPP-профиль, который будет использоваться нашим сервером.
/ppp profile add change-tcp-mss=default comment="" bridge=vpn-bridge local-address=192.168.100.2 name="ovpn-profile" only-one=default remote-address=ovpn-pool use-compression=default use-encryption=required use-vj-compression=default
Обратите внимание на пункт bridge. Он определяет, в какой именно бридж по умолчанию будет затолкано ваше ovpn-подключение. Так что на каждого такого клиента придется заводить свой профиль.
4. Добавляем пользователей, которые смогут подключаться к нашему серверу (все ведь помнят про RADIUS, да? Но у нас все гораздо проще)
/ppp secret add caller-id="" comment="" disabled=no limit-bytes-in=0 limit-bytes-out=0 name="ovpnuser" password="ovpnpass" routes="" service=any profile="ovpn-profile"
Тут, думаю, пояснений так же не требуется, отмечу только, что нужно не забыть указать профиль, к которому относится клиент. К слову, пользователь с таким именем и паролем сможет подключаться и по PPPoE и по PPtP (определяется параметром service).
5. Теперь создаем сервер. Эти параметры являются глобальными для роутера, одновременно можно создать только один сервер
/interface ovpn-server server set auth=sha1,md5 certificate=router_cert cipher=blowfish128,aes128,aes192,aes256 default-profile=ovpn-profile enabled=yes keepalive-timeout=disabled max-mtu=1500 mode=ethernet netmask=24 port=1194 require-client-certificate=no
Подробнее:
auth – метод аутентификации. Возможны варианты.
certificate – сертификат сервера. Без него, скорее всего, работать не будет. Как создать, можно прочитать вот тут. Для краткости решим, что сертификаты таки есть (можно взять от любого OpenVPN-сервера или наделать самому).
cipher – Шифрование. а оно вам надо? Впрочем, можно не требовать и отключать на клиентах.
default-profile – профиль по умолчанию, с которым создается интерфейс, если не указано иное.
mode – режим работы: собственно, l2/l3.
require-client-certificate – запрашивать ли сертификат клиента. Опять же, если не планируется вывешивать сервер в полный паблик, а пароли достаточно надежны (кто сказал про паранойю?), то можно не запрашивать.
6. Создаем инстанс сервера. Если не создадим сами – он создастся сам при подключении клиента.
/interface ovpn-server add name=ovpn-server user=ovpnuser
/interface bridge port add interface=ovpn-server bridge=vpn-bridge
Последней командой помещаем в бридж наш инстанс сервера.

Не забываем открыть в фаерволе нужный порт:
/ip firewall filter add action=accept chain=input comment="OpenVPN" disabled=no dst-port=1194 protocol=tcp

После этих манипуляций сервер готов к принятию клиентов. На самом клиенте потребуется настроить следующие параметры:
/interface ovpn-client add name="ovpn-out1" connect-to=11.22.33.44 port=1194 mode=ethernet user="ovpnuser" password="ovpnpass" profile=default certificate=vpngate-client cipher=aes256 add-default-route=no cipher=none

На что еще просят обращать внимание – на соответствие времени на клиенте и сервере.

После этого на сервере необходимо добавить нужный нам L2-интерфейс в бридж:
/interface bridge port add interface=vlan10 bridge=vpn-bridge

А так же создать бридж и добавить туда нужные интерфейсы со стороны клиента:
/interface bridge name=vpn-bridge
/interface bridge port add interface=ether2 bridge=vpn-bridge
/interface bridge port add interface=ovpn-out1 bridge=vpn-bridge

На этом настройка тоннеля закончена, трафик должен ходить.

17 Comments

  1. >>certificate – сертификат сервера. Без него, скорее всего, работать не будет. Как создать, можно прочитать вот тут.

    интересно как их туда засунуть (на микротик)

  2. Если через WinBox – обычным copy-paste
    Если через консоль – то по ftp/scp (по вкусу)

  3. >а можно по шагам как сделать ovpn на mtik 6й версии только с сертификатом?
    меня тоже очень сильно интересует этот вопрос

  4. Мануал по поднятию openvpn сервера на RouterOS 6.7 будет? а то в ней видимо пункты касаемо сертификатов изменили
    и еще 1 вопрос, как эти сертификаты и в чем генерировать что бы RouterOS их принял

  5. Добрый день,
    уважаемый, RouterOS то подключить удалось без труда, а не пробовали ли клиентов с linux/ win систем подключать? С ходу у меня не получилось. Если есть готовый конфиг openvpn клиента – буду признателен если выложите сюда.
    Есть желание желание переместить сам сервер openvpn на маршрутизатор и избавиться от отдельного openvpn сервера и всех редиректов, доп.маршрутов и т.п., т.е. все входящие подключения из внешнего мира сосредоточить в единой точке на пограничном устройстве.

    1. Т.е. вы хотите держать сервер на Mikrotik, а подключать клиентов на linux/win? Дык на wiki микротика есть готовые конфиги, разве не подходят? У меня просто такой задачи не стояло

  6. кто использует RouteOS версии нижу 6.7 – не испортирует сертификаты. Обновитесь до псследней. Я обновлялся до 6.27 – испорт прошел нормально

  7. Здравствуйте, у Вас в статье упоминается VLAN10

    /interface bridge port add interface=vlan10 bridge=vpn-bridge

    Но в тексте статьи я не нашёл где он создаётся. Я могу предположить что в него входит ether1 и ether2. Так ли это?

    1. vlan10 – это сабинтерфейс одного из eth. Микротик, будучи роутером, позволяет вешать на физический интерфейс (eth) тэгированные сабинтерфейсы (vlan10)

Leave a Reply