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

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

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

Сообщение Vita077 » 05 окт 2018, 14:08

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

Аватара пользователя
Chupaka
Сообщения: 2167
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka » 05 окт 2018, 17:33

Конечно только для скриптов в профиле PPP. Если хочется в Scheduler - надо забирать из /ppp active, видимо.

Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

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

Сообщение Vita077 » 05 окт 2018, 18:19

И как это примерно будет выглядеть в 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
Сообщения: 2167
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka » 07 окт 2018, 18:02

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

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

:local ddnsip [/ppp active get [find name="ЛОГИН"] caller-id]
Это, я так понимаю, на стороне VPN-сервера надо выполнять.

Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

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

Сообщение Vita077 » 07 окт 2018, 18:07

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

Аватара пользователя
Chupaka
Сообщения: 2167
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka » 07 окт 2018, 18:07

Тогда - так, как я и написал. Опять же, ничего не мешает этот скрипт выполнять из PPP-профиля, а не дёргать по Scheduler'у

Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

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

Сообщение Vita077 » 07 окт 2018, 18:18

пока не работает, полный скрипт имеет такой вид, смущает строка local ddnsinterface "имя vpn-интерфейса" - что все-таки тут указывать логин или имя интерфейса, имя в ROS указывается в угловых скобках <vpn-клиент>. По идее с вашей модификацией переменная local ddnsinterface уже и не нужна. Плюс наверное можно убрать действие "Из полученного на интерфейс IP исключаем маску"

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

 # Параметры подключения к NO-IP.comlocal ddnsinterface
:local ddnsuser "user name"
:local ddnspass "password"
:local ddnshostname "...ddns.net" 
:local ddnsinterface "имя vpn-интерфейса"

# Описание глобальных переменных
:global ddnslastip
:local str
:local ddnsip
:local ip
:local caller id

:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }

:local ddnsip [/ppp active get [find name="...ddns.net"] caller-id]

:if ([ :typeof $ddnsip ] = nil ) do={
   :log info ("ServiceDNS: No ip address on $ddnsinterface .")
} else={

# Из полученного на интерфейс IP исключаем маску
   :for i from=( [:len $ddnsip] - 1) to=0 do={ 
      :if ( [:pick $ddnsip $i] = "/") do={ 
       :set ddnsip [:pick $ddnsip 0 $i];
      } 
   }

  :if ($ddnsip != $ddnslastip) do={

    :log info ("ServiceDNS: $ddnshostname -> $ddnsip")

# Отправляем новый IP адрес на сервер No-IP с помощью HTTP запроса
    :local str "/nic/update?hostname=$ddnshostname&myip=$ddnsip"
    /tool fetch url="http://dynupdate.no-ip.com/$str" mode=http user=$ddnsuser password=$ddnspass \ dst-path=("/ServiceDNS.".$ddnshostname)
    :delay 1 

# Сохраняем результаты в лог файлах
    :local str [/file find name="ServiceDNS.$ddnshostname"];
    :log info [/file get $str contents];
    /file remove $str
    :global ddnslastip $ddnsip

  } 

}
Последний раз редактировалось Vita077 07 окт 2018, 18:25, всего редактировалось 1 раз.

Аватара пользователя
Chupaka
Сообщения: 2167
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka » 07 окт 2018, 18:24

Она не должна смущать хотя бы потому, что эта переменная нигде не используется, потому что мы ведь выше выбрали другой способ получения адреса - из caller-id.

name="...ddns.net" - вы уверены, что имя пользователя, под которым клиент подключается к серверу, у вас оканчивается на ddns.net?..

":local caller id" - эта конструкция создаёт переменную caller и присваивает ей строку с текстом "id" - это именно то, что предполагалось делать?..

Vita077
Сообщения: 33
Зарегистрирован: 28 сен 2018, 12:38

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

Сообщение Vita077 » 07 окт 2018, 18:28

да, у меня логин клиента к vpn-серверу имеет вид такой же что и доменное имя ddns - сделано умышленно, чтобы не писать комментарии к логинам - так наглядно понятно для каких целей он создан
":local caller id" - если так, я уберу её, local ip тоже не нужна теперь

Аватара пользователя
Chupaka
Сообщения: 2167
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka » 07 окт 2018, 18:44

В лог что-нибудь пишется при выполнении скрипта?

Ответить