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 
 есть инструкция для pfSensehttp://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 - 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 я пока не понимаю… 
- в штатном режиме
- 
 сделал feature request: 
 https://redmine.pfsense.org/issues/11294
- 
 Добрый день! я попробовал использовать yandex dns. это не сработало. Я использую действительный токен который работает с acme плагином pfsense. логи после принудительного обновления.  ps 
 я видел что https://redmine.pfsense.org/issues/11294 закрыта изза того что некому протестировать. если от меня нужны какие-то тесты или дополнительные логи. я могу это сделать.
- 
 @antonfn Поставьте в настройках Dynamic галочку DNS Verbose и приаттачьте лог к новому багрепорту. Как сделать багрепорт: 
 https://docs.netgate.com/pfsense/en/latest/development/bug-reports.htmlразберёмся! 
- 
 @antonfn что у вы видите при выполнении curl -H 'PddToken: <мойтокен>' https://pddimp.yandex.ru/api2/admin/dns/list?domain=<мойдомен>?
- 
 Если я обращаюсь к своему основному домену (например example.com) с запросом указанным выше, то получаю перечисление записей домена и параметры записей. я бы хотел уточнить, на основном домене(example.com) у меня есть А запись.(ddns.example.com) которой я хотел бы управлять с помощью ddns. я правильно заполняю поля Hostname ? (делаю на примере рабочей конфигурации godaddy)  
- 
 @antonfn верно, можете посмотреть как работает DDNS: 
 https://github.com/pfsense/pfsense/blob/master/src/etc/inc/dyndns.class#L886- Сначала он получает список поддоменов с https://pddimp.yandex.ru/api2/admin/dns/list?domain=example.com
- Если поддомен существует то сохраняет значение record_id
- Если поддомен существует то изменяет его запись использую record_idчерезhttps://pddimp.yandex.ru/api2/admin/dns/edit
- Если поддомен не существует то добавляет через https://pddimp.yandex.ru/api2/admin/dns/add
 Но у вас судя по логам ошибка PddToken.
 Запросы черезcurlвыдают правильные данные?
- Сначала он получает список поддоменов с 
- 
 @viktor_g 
 запрос через curl выдает правильные данные. там присутствует ddns.example.comнашел перечисление ошибок. https://yandex.com/dev/domain/doc/reference/domain-settings-setsign.html как я понял. до токена дело не доходит. он не передается 
- 
 @antonfn установите пакет System Patches: 
 https://docs.netgate.com/pfsense/en/latest/development/system-patches.htmlи попробуйте этот патч: yandexpddfix.diff 
- 
 
- 
 Багрепорт: https://redmine.pfsense.org/issues/12331 Исправление будет включено в следующую стабильную версию и ближайшие 2.6-DEVELOPMENT снапшоты 

