Проверка IP LTE-интерфейса и отправка его на ddns

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

Модем подключен к микротику через USB в режиме LTE (Hi Link). На модеме используется локальная сеть сотового оператора без доступа в интернет. Микротик подключен к проводному интернету и использует его по дефолту. Задача такая - при изменении WAN IP модема (IP локальной сотовой сети) забирать его (telnet, ssh - ?) из модема и отправлять http-запросом на сервис DDNS (сервис доменных имен - используется no-ip.com). Пока такое получается только с ppp-клиентами - но там проще. PPP-технологию не хотелось бы использовать из-за ограниченности в скорости передачи данных - как правило до 25 мегабит/сек, но NDIS (режим сетевой карты в windows) микротик официально не поддерживает, остается только RNDIS (LTE-интерфейс в RouterOS). Есть модемы в Hi Link с возможностью встраивать ddns скрипты в их операционку (как пример - Huawei E3372S), но тут, как понимаете, ситуация нестандартная - на модеме нет прямого выхода в интернет.
Последний раз редактировалось Vita077 05 окт 2018, 06:08, всего редактировалось 1 раз.
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Т.е. у модема нет выхода в Интернет - и надо определить его внешний адрес, при этом достучаться к нему можно только по ssh или telnet? По http не получится забрать какую-нибудь маленькую страничку (не более 4 КБ)?
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

по ssh и telnet - это просто мои мысли по по поводу того каким способом можно забрать IP, я просто не владею знаниями каким способом можно ещё. Конечно, на таких модемах работает полноценный web-интерфейс. Вот пример страницы, которая по умолчанию у используемой модели находится по адресу - http://192.168.8.1/html/deviceinformation.html, такая страница, при сохранении в формате "только HTML" имеет размер 2,61kbt, что успешно укладывается в лимит 4kbt. Нужный параметр подчеркнут - http://ibn.im/VkDMRsetFL
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

/tool fetch url="http://192.168.8.1/html/deviceinformation.html" его нормально забирает, или там без авторизации не обойтись? Если там Simple Authorization - может, параметры user= и password= помогут?
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

web-интерфейс доступен без авторизации,
в терминале -
/tool fetch url="http://192.168.25.1/html/deviceinformation.html"
status: finished
downloaded: 2KiBC-z pause]
total: 2KiB
duration: 1s
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Вот сейчас надо изучить содержимое страницы и найти, где начинается и где заканчивается этот адрес, а потом что-то вроде

Код: Выделить всё

{
    :local result [/tool fetch url="http://192.168.25.1/html/deviceinformation.html" as-value output=user];
    
    :if ($result->"status" = "finished") do={
        :local data $result->"data";
        :local opentag "AAA>";
        :local closetag "<BBB";
        :put [:pick $data ([:find $data $opentag] + [:len $opentag]) [:find $data $closetag]]
    }
}
Где AAA> - текст перед адресом, <BBB - текст после адреса
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

Судя по исходному коду, страница формируется работой ява-скриптов. Могу увидеть код скрипта "deviceinformation.js" и в нем необходимый case 'WanIPAddress'. Что делать дальше с этим, пока не понимаю... - http://file.karelia.ru/z7nzjt/
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Я так понимаю, вас интересует файл http://192.168.25.1/config/deviceinformation/config.xml
Или http://192.168.25.1/api/monitoring/status - скорее даже это
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

http://192.168.25.1/api/monitoring/status - тут гораздо проще, при этом на странице отображается -
901 3 19 3 0 0 10.202.188.242 10.166.244.62 10.166.244.46 0 2 1 101 5 -1 0 hilink 0 0 0
10.166.244.62 и 10.166.244.46 - DNS серверы оператора, а искомое значение - 10.202.188.242 и теперь, как я понимаю скрипт будет иметь такой вид -
{
:local result [/tool fetch url="http://192.168.25.1/api/monitoring/status" as-value output=user];

:if ($result->"status" = "finished") do={
:local data $result->"data";
:local opentag "901 3 19 3 0 0 >";
:local closetag "< 10.166.244.62 10.166.244.46 0 2 1 101 5 -1 0 hilink 0 0 0";
:put [:pick $data ([:find $data $opentag] + [:len $opentag]) [:find $data $closetag]]
}
}
остается только передать это значение, который и отправит запросом на сервирс ddns. Остается разобраться как это сделать.
Открыть ссылку, правда, получилось 1 раз, после в браузерах и через /tool fetch url в микротике выскакивает ошибка -
<?xml version="1.0" encoding="UTF-8"?>
<error>
<code>125002</code>
<message></message>
</error>
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

В opentag и closetag вряд ли стОит записывать IP-адреса - они ведь могут и поменяться.

Ошибка выскакивает - а если открыть заглавную страницу?
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

имеете ввиду эту? - http://192.168.25.1/html/home.html тут все нормально - корректно отображается
как-то странно через раз. Более корректно страница http://192.168.25.1/api/monitoring/status отображается в IE v.11 - http://file.sampo.ru/t2rj94/ интересно понять причину появления ошибок. Ошибка пропадает, если предварительно зайти на главную страницу или вообще просто на http://192.168.25.1/ - хотя тоже через раз. Есть программка "API+HiLink", которая отрабатывает корректно, правда она настроена на дефолтный адрес 192.168.8.1 - http://file.sampo.ru/28d4j5/,
нашел тут - http://4pda.ru/forum/index.php?showtopi ... ry45767985
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Ну, значит, дёргаете главную, потом API, opentag "<WanIPAddress>", closetag "</WanIPAddress>" - и вот уже скрипт вытянул WAN Address :)
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

Дергать главную придется вручную? Как-то можно это вмонтировать в скрипт, чтобы автоматом, что то вроде сначала -
:local result [//tool fetch url="http://192.168.25.1/index.html" mode=http];
потом - :local result [/tool fetch url="http://192.168.25.1/api/monitoring/status" as-value output=user];
Ещё нашел - для того чтобы скрипт ошибку не выдавал, нужно в сторону curl смотреть, может так - /tool fetch сurl=..?
И далее, скрипт вытаскивает IP, как ему передать его в скрипт отправки на ddns? К примеру вот в этот - http://file.sampo.ru/vdsg2q/
Возможность прятать длинный текст под спойлер не вижу, поэтому текстовыми файликами скидываю.
И да, простите если утомил...
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Длинный текст скрипта отлично прячется в теги [code]

В том скрипте адрес определяется в строке ":local ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]" — вот сюда и надо вставить результат работы скрипта выше.

/tool fetch curl? Где вы про такое прочитали?
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

пока ничего в логах не вижу, страничка api в файл не выгружается, при попытке в терминале загружать странички последовательно, в файле "status" все та же ошибка - 125002. Чтобы избавиться от неё предлагают, как я предполагал, использовать "правильные" куки с первоначальным открытием главной страницы - https://vxlabs.com/stats-for-huawei-lte-routers/. Похоже микротик не может их обработать или получить, в отличие от браузеров. Или, как вариант, забирать ID со страницы - http://192.168.25.1/api/webserver/SesTokInfo и уже потом с ним заходить на страницу status - http://4pda.ru/forum/index.php?showtopi ... ry71117849
В общем, пока затык на ошибке 125002.
Правильно понимаю - должно в списке файлов появиться 2 файла - 1 - данные со статусом, 2 - после отработки скрипта с IP адресом?
пока скрипт имеет вид примерно такой -

Код: Выделить всё

{
:local result [/tool fetch url="http://192.168.25.1/html/home.html" keep-result=no];
:local result [/tool fetch url="http://192.168.25.1/api/monitoring/status" as-value output=user];
:if ($result->"status" = "finished") do={
:local data $result->"data";
:local opentag ""<WanIPAddress>";
:local closetag "</WanIPAddress>";
:put [:pick $data ([:find $data $opentag] + [:len $opentag]) [:find $data $closetag]]
}
}
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Судя по 4pda, токен надо пихать в заголовки запроса. RouterOS ни так, ни в куки не умеет, увы.

P.S. keep-result=no говорит, что файл сохранять не надо, поэтому по первой команде он не появится на роутере.
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

Я решил "отложить бубен и перестать танцевать". Ситуация в моем случае мало кому пригодиться, при прямом доступе в интернет через модем HiLink, пользователи просто прикрутят скрипт ddns к LTE-интерфейсу. В моем же случае можно взять Caller ID vpn-клиента,в поднятом туннеле через необходимый LTE-интерфейс HiLink модема, на VPN-сервере. Если не трудно, поправьте пожалуйста синтаксис в скрипте ddns, который приводил немного выше. Пока он отправляет локальный IP сервера к которому клиент подключается. Думаю куда корректно поставить переменную $"caller-id".
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Chupaka писал(а): 05 окт 2018, 00:43 В том скрипте адрес определяется в строке ":local ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]" — вот сюда и надо вставить результат работы скрипта выше.
Ну, либо caller-id :)
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

а можно явным образом готовую строчку написать? Простите, я что-то запутался...
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

:local ddnsip "$"caller-id""; - как-то так, видимо :)
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

Тут ему еще надо указать с какого интерфейса забирать, что-то вроде -
:local ddnsip "$"caller-id" find interface=$ddnsinterface'', пока ни так ни так не работает. Может надо ввести локальную переменную в описание глобальный переменных? Типа - :local "caller-id"
Дополнение - а не может быть, что переменная $''caller-id'' применима только для скриптов в профиле РРР? Что-то я её кручу-верчу по-всякому - ''не выходит каменный цветок''...
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Конечно только для скриптов в профиле PPP. Если хочется в Scheduler - надо забирать из /ppp active, видимо.
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

И как это примерно будет выглядеть в Scheduler? -
:local ddnsip [ /ip address get [/ppp active find where name=$ddnsinterface address=$"caller-id" ] address ]
в то же время параметр $"caller-id" только для РРР профиля, как значение передать другим параметром не знаю.
https://forum.mikrotik.com/viewtopic.php?t=61188
Аватара пользователя
Chupaka
Сообщения: 3870
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Chupaka »

Будет выглядеть как

Код: Выделить всё

:local ddnsip [/ppp active get [find name="ЛОГИН"] caller-id]
Это, я так понимаю, на стороне VPN-сервера надо выполнять.
Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

Re: Проверка IP LTE-интерфейса и отправка его на ddns

Сообщение Vita077 »

да, на стороне vpn-сервера. В данном случае caller id vpn-клиента и будет искомый ip hilink модема, который оператор сотовой связи ему присваивает при поднятии соединения. Вот его как раз и надо передать на сервер DDNS.
Ответить