DDNS через API Yandex



  • Приветствую уважаемый форум!

    Есть PfSense 2.4.2-RELEASE-p1  с двумя каналами Интернет.
    За шлюзом в локальной сети есть сервис, на который проброшены порт с внешних белых IP обоих каналов.
    Есть записи в DNS-зоне домена, которая размещена на Яндексе, типа
    gw.domen.ru - 1.1.1.1 (ISP1)
    gw.domen.ru - 2.2.2.2 (ISP2)

    Хочется изменять эти записи в зоне через API Яндекса при срабатывании dpinger (падении канала), чтобы клиенты сервиса получали IP рабочего на данный момент канала.

    Заглянув в Dynamic DNS, понял, что если и можно, то только через Custom настройку.

    Никто не поделиться своим подобным опытом? Можно вообще использовать эту форму для API?

    Если нет, то в принципе, могу с помощью CURL отправлять нужную строчку в API Яндекса, но не могу найти/понять, по какому событию/логу это делать?
    Заранее благодарен за любую наводку
    Александр



  • IMHO, конечно, но Яндекс DNS - не самый простой\лучший выбор для DDNS, да и создавался он не для этого.
    Хотя народ и использует его так, как хотите вы:
    Собственно API:
    https://tech.yandex.ru/pdd/doc/reference/dns-edit-docpage/
    https://habrahabr.ru/sandbox/102896/
    https://toster.ru/q/20548

    Можете оставить свои записи DNS, если они привязаны к статическим IP, а для DDNS использовать специальные бесплатные сервисы:
    Старый, проверенный. Использую сам:
    http://freedns.afraid.org/

    https://www.duckdns.org/install.jsp
    есть инструкция для pfSense

    http://freemyip.com/help
    Недавно рекомендован werter,  есть инструкция для pfSense
    и т.д.



  • Спасибо за ответ

    Пока не хоте бы рассматривать использование сторонних сервисов.
    Хочется подойти к задаче иначе.
    В принципе, строка, которую надо отправить на Яндекс DNS известна. Это, что-то типа:

    
    curl -H 'PddToken: 123456789ABCDEF0000000000000000000000000000000000000' -d 'domain=domain.com&record_id=1&subdomain=www&ttl=14400&content=127.0.0.1' 'https://pddimp.yandex.ru/api2/admin/dns/edit'
    
    

    Мне бы понять, по какому событию запускать эту строчку? Предположим, dpinger обнаруживает, что за одним из шлюзов нет интернета (не пингуется хост, который указан в качестве Monitoring IP для этого шлюза) - как отследить это событие и по его наступлению запустить скрипт с искомой строкой?
    Я пока вижу только парсить лог по определенной записи, но, честно говоря, для меня это будет сложновато.



  • Мне бы понять, по какому событию запускать эту строчку?
    Я пока вижу только парсить лог по определенной записи
    Мануал говорит, что:
    Whenever an interface changes in some way, DHCP lease renew, PPPoE logout/login, etc, the IP will be updated.

    Что мешает попробовать без парсинга? Для начала не с Яндексом, а с любым иным бесплатным?



  • Попробовал на FreeDNS - что-то не так..
    У меня оба шлюза объеденены в группу

    В Dyn DNS ставлю:
    Interface to monitor - группу шлюзов
    не прописываю ничего, кроме URL Update - туда пишу Direct Link для апдейта записи с http://freedns.afraid.org/dynamic/

    запись на afraid обновляется до IP основного шлюза
    После того, как я делаю Mark this gateway down на основном шлюзе - запись на afraid остается с тем же IP (на данный момент выключенного канала)



  • Мне вообще не понятен смысл нахождения группы шлюзов в настройках DDNS как и попыток привязать к нему этот сервис.
    Поправьте, но IMHO, 1-й WAN, 1-й IP, первое имя;  2-й WAN, 2-й IP, второе имя



  • Не могу так поправить - такая комбинация мне не нужна.
    Еще раз повторю, чего хочу получить:

    1. в штатном режиме
      1.1.1.1 - gw.domen.ru - ISP1
      2.2.2.2 - gw.domen.ru - ISP2

    далее при падении ISP1 надо получить
    2.2.2.2 - gw.domen.ru
    2.2.2.2 - gw.domen.ru

    или

    при падении ISP2
    1.1.1.1 - gw.domen.ru
    1.1.1.1 - gw.domen.ru

    Если подобрать "ключик" к API Яндекса, то решение довольно простое - по ID записи меняем ее на другой IP

    Как такое изобразить с помощью DDNS pfSense я пока не понимаю…


Log in to reply