Перейти к содержанию

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

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

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

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

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

На нашей, «ближней», стороне создаем OVPN-сервер, который будет слушать порт 1194 и ждать клиентов:
1. Для начала определяем пул адресов, выдаваемых клиентам (даже если режим работы — ethernet, и маршрутизации никакой нет и в помине — как минимум, можно будет получить доступ на устройство, что само по себе ценно.

1
 /ip pool add name=ovpn-pool ranges=192.168.100.2-192.168.100.31

2. Создаем бридж, который будет связывать наш OpenVPN-тоннель с другим L2-интерфейсом

1
/interface bridge name=vpn-bridge

3. Добавляем PPP-профиль, который будет использоваться нашим сервером.

1
 /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, да? Но у нас все гораздо проще)

1
 /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. Создаем инстанс сервера. Если не создадим сами — он создастся сам при подключении клиента.

1
/interface ovpn-server add name=ovpn-server user=ovpnuser
1
/interface bridge port add interface=ovpn-server bridge=vpn-bridge

Последней командой помещаем в бридж наш инстанс сервера.

Не забываем открыть в фаерволе нужный порт:

1
/ip firewall filter add action=accept chain=input comment="OpenVPN" disabled=no dst-port=1194 protocol=tcp

После этих манипуляций сервер готов к принятию клиентов. На самом клиенте потребуется настроить следующие параметры:

1
 /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-интерфейс в бридж:

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

А так же создать бридж и добавить туда нужные интерфейсы со стороны клиента:

1
/interface bridge name=vpn-bridge
1
/interface bridge port add interface=ether2 bridge=vpn-bridge
1
/interface bridge port add interface=ovpn-out1 bridge=vpn-bridge

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

17 комментариев

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

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

  2. snake snake

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

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

    • admin admin

      Обязательно добавлю, но чуть позже!

  4. Taras Taras

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

  5. Ol Ol

    а протокол rrcp (realtek remote control protocol) пропустит?

    • admin admin

      Сам не пробовал, но в целом — не вижу препятствий 🙂

  6. VecH VecH

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

    • admin admin

      Будет =) Да, в шестой ветки вообще многое изменилось.
      Генерировать сертификаты можно чем угодно, например сделать самоподписанные сертификаты с помощью openssl или онлайн-генератора

  7. aziz aziz

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

    • admin admin

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

  8. А можно ли через Mikrotik Openvpn-client подключиться к серверу где включено lzo-компрессия?

    • admin admin

      Если компрессия обязательна, то подключения не произойдет, увы

  9. Vova Vova

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

    • admin admin

      Спасибо за информацию, учту )

  10. Сергей Сергей

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

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

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

    • admin admin

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

Добавить комментарий

%d такие блоггеры, как: