Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Скрипт Dyndns Netcup

    Скрипт Dyndns Netcup

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт Dyndns Netcup, RouterOS
     
    dima1002
    Guest
    #1
    0
    14.11.2021 09:01:00
    Привет, может кто-то помочь мне подправить скрипт? Мне нужен скрипт с Dyndns для netcup.  
    https://www.netcup-wiki.de/wiki/API_Clients#Dynamisches_DNS  
    https://github.com/hazzl/netcup-ddns  

    :global DOMAIN = "DOMAIN"  
    :global CUSTOMERNO = "NUMBER"  
    :global APIKEY = "KEY"  
    :global APIPASSWD = "APIPASS"  

    :global cjson = require "luci.jsonc"  
    :global https = require "ssl.https"  
    :global ltn12 = require "ltn12"  
    :global socket = require "socket"  
    :global http = socket.http  

    global function send_command(coms, ids)  
    global postbod  
    global resbod = {}  
    global post = {}  
    coms.param.apikey = APIKEY  
    coms.param.customernumber = CUSTOMERNO  
    if (ids) then  
    coms.param.apisessionid = ids  
    end  
    postbod = cjson.stringify(coms)  
    post = {  
    method = "POST",  
    url = "https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON",  
    headers = {  
    ["content-length"] = tostring(#postbod)
    },  
    source = ltn12.source.string(postbod),  
    sink = ltn12.sink.table(resbod)  
    }  
    https.request(post)  
    return cjson.parse(table.concat(resbod))  
    end  

    global function clear()  
    global t = {}  
    t.param = {}  
    return t  
    end  

    global com, id, response, ip4, modified  

    response = {}  
    http.request{url = "http://v4.ident.me", sink = ltn12.sink.table(response)}  
    ip4 = table.concat(response)  
    if ip4 == "" then -- что-то пошло совсем не так. Сдаюсь.  
    return  
    end  

    response = socket.dns.toip(DOMAIN)  
    if ip4 == response then  
    return  
    end  

    global logfile = io.open("ddns.log", "a")  
    io.output(logfile)  
    io.write(os.date() .. " новый IP " .. ip4 .. "\n")  

    com = clear()  
    com.action = "login"  
    com.param.apipassword = APIPASSWD  
    response = send_command(com, id)  
    id = response.responsedata.apisessionid  

    com = clear()  
    com.action = "infoDnsRecords"  
    com.param.domainname = DOMAIN  
    response = send_command(com, id)  
    modified = false  
    for _, v in pairs(response.responsedata.dnsrecords) do  
    if v.type == "A" and v.hostname ~= "mail" and v.destination ~= ip4 then  
    v.destination = ip4  
    modified = true  
    end  
    end  

    if modified then  
    com = clear()  
    com.action = "updateDnsRecords"  
    com.param.domainname = DOMAIN  
    com.param.dnsrecordset = response.responsedata  
    response = send_command(com, id)  
    print(response.longmessage)  
    else  
    print("все записи актуальны")  
    end  

    com = clear()  
    com.action = "logout"  
    response = send_command(com, id)  
    io.close(logfile)
     
     
     
    Amm0
    Guest
    #2
    0
    01.12.2021 19:41:00
    Похоже на код на LUA! Если у тебя роутер, который это поддерживает, всё равно стоит срочно обновить его из-за уязвимостей в безопасности. Языки скриптов меняли ещё до моего времени (возможно, в версии V5). MikroTik создали свой собственный язык скриптов в замену, и он используется уже больше 5 лет.

    Но в версиях V6 и V7 RouterOS можно использовать IP > Cloud для DDNS, а затем в своём DNS добавить CNAME на этот адрес. Конечно, можно написать скрипт, который будет напрямую общаться с твоим DDNS-провайдером, но это более сложное решение. /ip/cloud с CNAME — довольно простой вариант.
     
     
     
    dima1002
    Guest
    #3
    0
    30.07.2023 16:50:00
    И где здесь ошибка? К сожалению, это тоже не работает.

    /system script  
    add name=Netcup  
    policy=read,write,test  
    :global apikey "KEY"  
    :global apipassword "PASSWORD"  
    :global customerid "CUSTOMERNR"  
    :global theinterface "WAN1"  
    :global ddnshost "subdomain.domain.de"  
    :global ipddns [:resolve $ddnshost];
    :global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
    :if ([ :typeof $ipfresh ] = nil ) do={
     :log info ("NetcupDDNS: Нет IP-адреса на интерфейсе $theinterface.")  
    } else={  
     :for i from=( [:len $ipfresh] - 1) to=0 do={
       :if ( [:pick $ipfresh $i] = "/") do={
         :set ipfresh [:pick $ipfresh 0 $i];
       }  
     }  
     :if ($ipddns != $ipfresh) do={  
       :log info ("NetcupDDNS: IP-Netcup = $ipddns")  
       :log info ("NetcupDDNS: IP-Fresh = $ipfresh")  
       :log info "NetcupDDNS: Нужно обновить IP, отправляю ОБНОВЛЕНИЕ...!"  
       :global jsonRequestBody "{json request body with new IP and other necessary info}"  
       /tool fetch url="https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON" http-method=post http-data=$jsonRequestBody mode=https dst-path=("/Netcup.".$ddnshost)  
       :delay 1  
       :global str [/file find name="Netcup.$ddnshost"];
       /file remove $str  
       :global ipddns $ipfresh  
       :log info "NetcupDDNS: IP обновлён на $ipfresh!"  
     } else={  
       :log info "NetcupDDNS: изменений не требуется";  
     }  
    }
     
     
     
    Amm0
    Guest
    #4
    0
    30.07.2023 18:05:00
    Не могу сказать, работает ли этот скрипт. НО способ добавления кода неправильный… нужно обернуть скрипт в source=“”, чтобы добавить его через CLI, и строки должны быть экранированы… «команда» типа add и её аргументы тоже должны идти вместе (например, на одной строке). В общем, проще использовать webfig или winbox, чтобы просто скопировать и вставить скрипт в поле «source» в интерфейсе. В командной строке приходится разбираться с экранированием и переносами строк. А если скопировать через UI, потом можно сделать «/system script export» через CLI — он покажет всё нужное экранирование, чтобы использовать где-то ещё (например, как ниже).

    Так вот:

    /system script add name=Netcup policy=read,write,test source=":global apikey \"KEY\"\r\n:global apipassword \"PASSWORD\"\r\n:global customerid \"CUSTOMERNR\"\r\n:global theinterface \"WAN1\"\r\n:global ddnshost \"subdomain.domain.de\"\r\n:global ipddns [:resolve \$ddnshost];\r\n:global ipfresh [ /ip address get [/ip address find interface=\$theinterface ] address ]\r\n:if ([ :typeof \$ipfresh ] = nil ) do={\r\n:log info (\"NetcupDDNS: Нет IP-адреса на \$theinterface.\")\r\n} else={\r\n:for i from=( [:len \$ipfresh] - 1) to=0 do={\r\n:if ( [:pick \$ipfresh \$i] = \"/\") do={\r\n:set ipfresh [:pick \$ipfresh 0 \$i];\r\n}\r\n}\r\n:if (\$ipddns != \$ipfresh) do={\r\n:log info (\"NetcupDDNS: IP-Netcup = \$ipddns\")\r\n:log info (\"NetcupDDNS: IP-Fresh = \$ipfresh\")\r\n:log info \"NetcupDDNS: Нужно обновить IP, отправляем UPDATE...!\"\r\n:global jsonRequestBody \"{json request body with new IP and other necessary info}\"\r\n/tool fetch url=\"https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON\" http-method=post http-data=\$jsonRequestBody mode=https dst-path=(\"/Netcup.\".\$ddnshost)\r\n:delay 1\r\n:global str [/file find name=\"Netcup.\$ddnshost\"];\r\n/file remove \$str\r\n:global ipddns \$ipfresh\r\n:log info \"NetcupDDNS: IP обновлён на \$ipfresh!\"\r\n} else={\r\n:log info \"NetcupDDNS: изменений не требуется\";\r\n} }"
     
     
     
    dima1002
    Guest
    #5
    0
    30.07.2023 19:02:00
    Скрипт теперь запускается без ошибок. Но IP-адрес не обновляется.
     
     
     
    Amm0
    Guest
    #6
    0
    30.07.2023 19:14:00
    Да, в скрипте есть такие вещи: :global jsonRequestBody "{json request body с новым IP и другой необходимой информацией}". Это тоже не сработает. Не знаю, откуда у тебя этот скрипт, но, возможно, была какая-то помощь по его настройке для твоего провайдера… ведь, кажется, в скрипте нужно указать несколько конкретных деталей.
     
     
     
    Amm0
    Guest
    #7
    0
    30.07.2023 19:25:00
    Я скорее думаю, что лучше использовать встроенную поддержку DDNS через /ip/cloud. Потом добавьте CNAME в настройках домена на Netcup, который будет указывать на DNS-имя облака Mikrotik (например, .mynetname.com). Смотрите https://help.mikrotik.com/docs/display/ROS/Cloud#Cloud-DDNS
     
     
     
    tsc23
    Guest
    #8
    0
    22.09.2023 12:04:00
    Привет! Я написал скрипт для RouterOS с небольшой помощью с этого форума. Можете смело пользоваться: https://github.com/toscdesign/netcup-ddns-for-mikrotik
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры