Кто-нибудь создавал скрипт для MikroTik, чтобы обновлять запись в Azure DNS? Нужно сделать curl-запрос: HTTPS POST, чтобы получить /token через OAuth Client credentials grant с app id и app secret. Потом обновить запись в Azure DNS по инструкции .
И ещё вопрос: как обнаружить смену публичного IP-адреса и тогда запустить скрипт, а не использовать расписание? Я пытаюсь сделать альтернативу /ip cloud.
Amm0
Guest
0
10.02.2022 19:11:00
Да, в V7 поддерживаются сертификаты (аутентификация x509) с помощью /tool/fetch. Но обычно это отличается от OAuth2... Однако, если бы у Azure была возможность выдать вам X.509 сертификат для Mikrotik (и сертификат был бы авторизован для доступа к DNS), то вы бы были вполне готовы для этого. Но, возможно, сначала придётся использовать OAuth2 на Windows/PowerShell, чтобы сгенерировать сертификат. Просто я недостаточно хорошо знаю Azure, чтобы помочь дальше.
hkusulja
Guest
0
08.01.2022 23:05:00
Извините, но я не вижу, чтобы DynDNS и другие использовали такой метод аутентификации OAuth2 с кодовым потоком. Можете привести ссылку? Спасибо.
Amm0
Guest
0
09.01.2022 00:42:00
Не уверен, что кто-то использует /tool/fetch с OAuth2, возможно, это возможно, но довольно сложно, так как обычно требуется браузер. Если у вас версия 7, клиентские сертификаты могут быть вариантом. В V7 есть возможность разрешить клиентский сертификат на /tool/fetch. Это позволяет Mikrotik взаимодействовать с облачными сервисами, такими как Azure или AWS. По сути, вы используете сертификат на Mikrotik для доступа к Azure вместо OAuth2. Технически IoT extra-package не обязателен, но вы можете следовать инструкциям Mikrotik по получению сертификата Azure: . Использовать MQTT и пакет IoT необязательно. После установки сертификата и регистрации IoT-устройства в Azure, вы можете вызывать их API (при условии, что ACL на стороне Azure это разрешает) через /tool/fetch. Пример AWS IoT содержит хороший скрипт HTTP /tool/fetch, показывающий использование клиентского сертификата (аналогично Azure): . Хотя это и не обязательно, можно просто установить IoT extra-package, представьте, что в Azure есть правила, которые могут принимать MQTT-сообщения для создания DNS-записи. Mikrotik IoT MQTT очень упрощает отправку сообщений в Azure — а уже на стороне Azure сможете создавать или обновлять DNS-записи. И HTTP, и MQTT с сертификатом не требуют повторной аутентификации... Проблема с OAuth2 в том, что в плановом скрипте Mikrotik вы не всегда можете быть рядом, чтобы ввести необходимый пароль при прохождении OAuth2, ведь выданные токены имеют срок действия.
hkusulja
Guest
0
10.01.2022 09:50:00
Обновление службы Azure DNS — это простой HTTP-запрос, но в заголовках обязательно должен быть Authorization bearer token. Чтобы получить этот токен, нужно использовать client id и secret. Вместо секретного ключа также можно применить клиентский сертификат. Этот процесс называется OAuth2 code flow. Мне не нужно задействовать IOT / MQTT и подобное. Так что, может кто-то уже написал скрипт для аутентификации в Azure и последующего внесения изменений в Azure (например, в Azure DNS) с помощью /tool/fetch? Спасибо!
Amm0
Guest
0
10.01.2022 17:55:00
Я не эксперт по Azure, использую MS только для Office365. И пока не видел, чтобы кто-то на форумах пользовался Azure REST… Я хорошо знаком с AWS, поэтому думал, что можно обойтись подходом с сертификатами. Но с Azure дело в том, что они хотят использовать OAuth2 и, кажется, не поддерживают X509 сертификаты.
Теперь понятно, почему у Mikrotik нет примера HTTP для Azure, но есть для AWS: OAuth2 через /tool/fetch — это довольно сложно. Но на самом деле всё сводится к тому, как именно Microsoft реализует OAuth2. В теории, можно использовать ПК для получения OAuth-токена. Но проблема в том, что токены OAuth2 обычно истекают, иногда через несколько часов, чаще через дни или месяцы. По той же причине раньше было сложно использовать Let’s Encrypt на Mikrotik до версии V7, где добавили прямую поддержку.
Я не нашёл, когда именно истекают токены OAuth в Azure… Но есть документация, как сгенерировать токен через curl, что должно быть примерно похоже на fetch, можно попробовать: Нужно учесть, что контент — JSON, а заголовки идут в HTTP-формате с двоеточиями. Более подробная инструкция здесь:
Понятно, что у тебя есть свои причины использовать Azure, но хочу заметить: в AWS Route53 подход с клиентскими X509 сертификатами на V7 довольно простой. В основном, следуешь инструкции Mikrotik по IoT. Неважно, используешь ли MQTT — главное, что AWS выдает IoT Core сертификат для Mikrotik. Нужно просто корректно назначить ACL в AWS IAM для IoT сертификата, чтобы разрешить вызовы DNS REST API AWS Route53.
В Mikrotik команда /tool/fetch тоже очень простая — достаточно указать “certificate=” в /tool/fetch. Хотя сертификаты истекают, в AWS ты сам контролируешь срок их действия. Взять X509 сертификат — не всегда просто, но использовать их — очень легко. Раньше на Mikrotik до V7.1 клиентская аутентификация через X509 вообще была невозможна.
Но да, подход AWS вряд ли подойдет для Azure. В Google Cloud, похоже, такая же проблема, и решения тоже нет:
hkusulja
Guest
0
10.02.2022 06:29:00
Azure AD поддерживает OAuth2 с использованием секретного ключа или сертификата. Значит, ты говоришь, что теперь RouterOS тоже поддерживает отправку сертификата, что замечательно.