10.10.2016

IPSec over L2TP между RouterOS и Apple iOS 10

В 10 версии iOS команда Apple наконец-то выпилила PPTP, чем сподвигла весь (не)цивилизованный ИТ-мир срочно учиться поднимать IPSec на своих бордерах. В том числе и меня.

"Поднять IPSec - что там сложного" - подумал я. Но не тут то было. По мануалам, хабрам и прочим ресурсам все отлично поднимается и работает между двумя микротиками, между микротиком и виндой, между микротиком и андроид. Но вот с iOS 10 ни в какую не хочет. Путем долгих ковыряний и трехэтажных словосочетаний, выяснил, что изменения для IPSec нужно применять в КОНСОЛИ! Не в графическом интерфейсе, а именно в консоли - ssh или встроенная в WinBox - без разницы. Но факт в том, что идентичные настройки в WinBox не позволяли поднять VPN между Mikrotik RouterOS и IPhone (по крайней мере в моем случае с RB751 на RouterOS 6.37.1 в связке с IPhone 6).



Привожу настройки L2TP и IPSec текстом и скрины из WinBox что должно получиться:

L2TP сервер
/interface l2tp-server server
set authentication=mschap2 default-profile=default enabled=yes

L2TP server

PPP профили дефолтные
> ppp profile print 
Flags: * - default 
 0 * name="default" use-mpls=default use-compression=default 
     use-encryption=default only-one=default change-tcp-mss=yes 
     use-upnp=default address-list="" on-up="" on-down="" 

 1 * name="default-encryption" use-mpls=default use-compression=default 
     use-encryption=yes only-one=default change-tcp-mss=yes use-upnp=default 
     address-list="" on-up="" on-down=""

ppp profile

Пользователь L2TP тоже ничем не отличается от простого L2TP/PPTP и иже с ними без айписека
/ppp secret
add local-address=192.168.222.16 name=user1 password=l2tppassword profile=default-encryption remote-address=192.168.222.18 service=l2tp
L2TP secret




Приступаем к IPSec. Все, что я делал с IPSec - делал через консоль. Из винбокса не заработало. что именно сделалось не так - не проверял. Можете проверить методом исключения.

Добавляем группу (дефолтная работает криво - особенность RouterOS):
/ip ipsec policy group
add name=l2tp
IPSec group


Корректируем proposal и добавляем новый:
/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-256-cbc,aes-128-cbc
add enc-algorithms=aes-256-cbc,aes-128-cbc name=L2TP pfs-group=none

IPSec proposal

Добавляем пира:
/ip ipsec peer
add enc-algorithm=aes-256,aes-192,aes-128,3des exchange-mode=main-l2tp generate-policy=port-strict passive=yes policy-template-group=l2tp secret=RouterOS

IPSec peer


Добавляем шаблон политики:
/ip ipsec policy
add dst-address=0.0.0.0/0 group=l2tp proposal=L2TP src-address=0.0.0.0/0 template=yes
IPSec policy

IPSec policy action



Ну и настройка IPhone:
IPhone


Спасибо Кириллу Васильеву за наводку

UPD: если имеются проблемы с подключением, попробуйте в /ip ipsec peer generate-policy установить port-override вместо port-strict 

UPD: как советуют в комментариях
В общем как ни странно вопрос решён, действительно помогло. А значит тем, кто кроме меня столкнулся с такой же проблемой, но не хочет прошиваться на релиз-кандидаты прошивок и ждёт официальную - им поможет отключение UPNP в роутере (в принципе его есть смысл юзать в домашнем варианте использования роутера, но и по работе в некоторых случаях он бывает полезен, в таком случае решение - только прошиваться на 6.41rc38)

38 комментариев:

  1. Сергей12.10.2016, 1:57

    Не удается подружить RouterOS 6.37.1 и IPhone 6s iOS 10. Выдает ошибку соединения "сервер не ответил" на микротике ipsec,error phase1. Порты 500, 1701 и 4500 открыты.

    ОтветитьУдалить
    Ответы
    1. Включите полное логирование IPSec и посмотрите на сообщения перед ошибкой. /system logging add topics=ipsec action=memory prefix=IPSEC

      Удалить
  2. Сергей12.10.2016, 5:10

    15:03:40 - phase1 negotiation failed due to time up ipмикротика[500]<=>ipизвне[500] туткучацифр
    15:03:40 - IPSEC: phase1 negotiation failed due to time up ipмикротика[500]<=>ipизвне[500] туткучацифр

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. Адреса белые на обеих сторонах? Если нет, то NAT Traversal стоит? Копайте в peer. Что-то согласовать не могут - аутентификацию или шифрование. И смотрите ещё выше логи

      Удалить
    3. И ещё, как я отметил, из интерфейса винбокса у меня не завелось. Делайте из консоли все операции. Не уверен, что в это проблема и где именно. Но факт есть факт

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Сергей12.10.2016, 7:00

    Адрес белый только на микротике. Выше в логах 236 байт друг другу посылают и куча цифр, больше ошибок нет. А у Вас на iphone белый адрес? Спасибо за ответы, по разбираюсь с peer.

    ОтветитьУдалить
  5. Сергей12.10.2016, 7:02

    Все операции делаю из консоли))

    ОтветитьУдалить
    Ответы
    1. попробуйте в /ip ipsec peer generate-policy установить port-override вместо port-strict

      Удалить
    2. Сергей14.10.2016, 0:00

      при подключении выдает: peer sent packet for dead phase2. И еще заметил почему то при включении L2TP сервера в /ip ipsec peer создается второе правило со статус (D) в котором ничего не изменить, generate-policy=port-strict (вместо измененного port-override) и policy-template-group=unknow вместо l2tp...

      Удалить
    3. вот вместо unknown должны стоять существующая группа. Нужно добавить новую группу в ip - ipsec - groups.
      Правило со статусом D (Dynamic) создается из-за того, что в peer мы указали Generate Policy=port-override (или port-strict). Если выставить Generate Policy=no, то для каждого клиента придется создавать свою политику, что не очень удобно.

      Удалить
    4. Сергей14.10.2016, 12:57

      ip-ipsec-groups группа создана l2tp, но когда появляется со статусом D (Dynamic) то unknown

      Удалить
    5. Сергей18.10.2016, 5:40

      смена port-override на port-strict не помогло, ошибка та же.
      Правило со статусом D, также без изменений, появляется группа unknown

      Удалить
    6. Анонимный28.01.2017, 6:59

      В IPSec Peers снимите Send Initial Contact
      на 99% айпишники на телефоне серые и посылка теряется.
      И надо перепроверить адресацию в PPP Secrets Local и Remote

      Удалить
  6. Спасибо за статью я решил свою проблему с IOS но осталось несколько вопросов. Какой конфиг клиента на mikrotik? Не сталкивались вы с тем что после перезагрузки клиента на Mikrotik поднимается L2TP без шифрования?

    ОтветитьУдалить
    Ответы
    1. Конфиг IPSec идентичный, только поменяны местами адреса. Сам L2TP поднимается без шифрования. Шифруется только трафик, указанный в policy IPSec. И только когда он есть. Пустите пинг с src-address входящим в src-address из policy на dst в dst-address из policy и посмотрите на Installed-SA в IPSec. Там должны появиться несколько строк

      Удалить
  7. Анонимный20.10.2016, 14:20

    Сделал все по инструкции как Вы писали и все равно на первой фазе даёт ошибку.

    Можете написать мне на почту Ваши контакты имеет у Вас получится помочь мне. Заранее спасибо, а то ОЧЕНЬ НУЖНО С ЯБЛОЧНЫМИ Решить.
    Мой E-mail: Vovcik81@mail.ru


    Жду Вашего письма с вашими контактами Viber, Skype,.... Для живого общения.

    Спасибо

    ОтветитьУдалить
    Ответы
    1. Ответил на почту

      Удалить
    2. Сергей21.10.2016, 2:18

      Вы как разберетесь в чем ошибка отпишитесь, плиз, может у меня в том же загвоздка...)

      Удалить
    3. Не смогли связаться и увидеть проблему

      Удалить
    4. Сергей07.11.2016, 10:40

      я пока так и не поборол ошибку(((

      Удалить
  8. а как дела обстоят с ОС SIRI? месяц цже мучаю, не получается поднять, причем с винды l2tp запускается без проблем, а те же данные вводишь н os siri, и ничего подобного.

    ОтветитьУдалить
    Ответы
    1. Впервые слышу о такой ОС. Если разработчики пошли по пути соответствия стандартам, то ничего сложного быть не должно. Нужно анализировать логи.

      Удалить
    2. devi1, извиняюсь, ошибся, это видимо был крик помощи ))) sierra, сиерра... операционка, что удалось решить подключение проходит но обмен трафиком не происходит. Это именно на маках, но если подключиться этим же пользователем с компьютера windows то все нормально работает, обмен открывается, RDP работает. Всю голову уже сломал (

      Удалить
  9. добрый день не могу настроить данную связку
    все уже перепробовал
    у меня провайдер билайн может что то еще надо настроить?

    ОтветитьУдалить
    Ответы
    1. Попробуйте без шаманства с IPSec - просто сделайте L2TP туннели и укажите IPSec key

      Удалить
  10. Анонимный06.09.2017, 6:54

    Настроил по инструкции, клиент подключается, инет ходит, но нет доступа к локальным ресурсам, ничего в локалке не пингуется, RDP не работает. Причем комп под виндой с этим же профилем работает на ура. И даже винда, запущенная в виртуальной машине на ноуте с iOS прекрасно видит локалку. Подскажите куда копать.

    ОтветитьУдалить
    Ответы
    1. Думаю, проблема в маршрутизации

      Удалить
  11. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  12. А у меня возникла другая проблема, третью неделю воюю с сабжем RouterBOARD 750G gr3 на последней ROS 6.40.4
    При любых вариантах настройки l2tp+ipsec (в том числе и из данной статьи). Поначалу все клиенты (win7, win10, ios, macos) коннектятся нормально и стабильно работают. Потом проходит некоторое время, кто то по своей либо не посвоей воле отключается, но обратно уже соединиться не может, роутер начинает швырять в логах:
    phase1 negotiation failed due to time up
    винда ругается на ошибки семисотых серий, айфоны матерятся на не ответивший сервер, и только с macos всё в порядке. Плюс возникают проблемы с маршрутизацией в офисе (отваливается один или оба телефона астериксовые).
    Перезагружаем роутер через System/Reboot - и всё снова на некоторое время начинает нормально работать. Пробовал делать сброс, настраивать с нуля, восстанавливать обратно бэкапы, без толку. При этом настроенные GRE туннели с шифрованием трафика ipsec от филиалов к этому девайсу работают стабильно. Где что можно ткнуть, чтобы не глючило со временем l2tp+ipsec?

    ОтветитьУдалить
  13. Добавлю, что помогает перезагрузка роутера ТОЛЬКО через System/Reboot, горячий вариант "выдернуть-вставить в розетку проблему не решает.

    ОтветитьУдалить
    Ответы
    1. Я не очень силён в IPSec, но ошибка на phase1 говорит о том, что пиры не могут установить соединение. А факт ребута указывает на то, что это соединение уже как-то числится в RouterOS. Возможно, туннель L2TP остался в апе, в то время как IPSec отвалился.

      Можете привести конфигурацию роутера: IPSec, PPP, routing ?

      Удалить
    2. Буквально сегодня утром прилетел ответ от саппорта Микротик, дословно от них:
      This is caused by UPnP mapping of UDP/4500 port which is used by IPsec service. Fix for this issue is already available in the latest release candidate version of RouterOS.
      Забэкапил роутер, потом сбросил, поставил последний релиз-кандидат (6.41rc38) и потом восстановил из бэкапа, теперь послежу пару дней, отпишусь по результатам, и если проблема не решится - заодно и конфиги кину.

      Удалить
    3. Вот оно как!
      Ну тестируйте. Только обязательно отпишитесь по результатам - уж больно интересно узнать чем закончится.

      Удалить
    4. В общем как ни странно вопрос решён, действительно помогло. А значит тем, кто кроме меня столкнулся с такой же проблемой, но не хочет прошиваться на релиз-кандидаты прошивок и ждёт официальную - им поможет отключение UPNP в роутере (в принципе его есть смысл юзать в домашнем варианте использования роутера, но и по работе в некоторых случаях он бывает полезен, в таком случае решение - только прошиваться на 6.41rc38)

      Удалить
    5. Спасибо за решение!

      Удалить