Задача
Сделать статическое доменное имя для своего домешнего сервера с динамическим IP-адресом
Исходные данные
У меня есть домен rekby.ru, делегированный на DNS-сервера yandex, домашний сервер на ubuntu-сервер, интернет-провайдер билайн с l2tp-соединением.
Варианты
- dyndns.org им подобные
- Работа через Яндекс-API
Вариант 1 раньше был хорошо и удобен, потом интерфейс, регистрации и т.п. так замудрили, что стало сложно разобраться как там добраться до бесплатной DNS-записи, так что он не подошел.
Настройка автообновления IP на DNS-серверах yandex
Для начала создайте A-запись с нужным поддоменом и любым IP-адресом в интерфейсе pdd.yandex.ru
Потом нужно получить токен для доступа к API:
https://pddimp.yandex.ru/get_token.xml?domain_name=ВашДомен
там нужно авторизоваться своей учеткой яндекса, в ответ будет выдан xml из которого нужен только token, он там виден.
Затем нужно перейти на страницу
https://pddimp.yandex.ru/nsapi/get_domain_records.xml?token=ТокенСПрошлогоШана&domain=ВашДоменТут нужно посмотреть record_id вашего поддомена.
Скрипт bash для обновления IP-Адреса:
Дайте скрипту права выполнения и поставьте на выполнение после сразу после поднятия соединения или просто поставьте в CRON раз в 5 минут. Чаще смысла не имеет, т.к. TTL=900 секунд, т.е. 15 минут, меньше яндекс поставить не дает.#!/bin/bash TOKEN=ВашТокен RECORD_ID=ВашRecordID DOMAIN=ВашДомен SUBDOMAIN=ВашПоддомен LINE=`ifconfig ppp | grep --color=never "inet addr"` # extract IP from line: inet addr:2.93.172.129 P-t-P:85.21.208.191 Mask:255.255.255.255 LINE=( $LINE ) IPADDR=${LINE[1]} IPADDR=${IPADDR:5} wget -O /dev/null "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=$TOKEN&domain=$DOMAIN&subdomain=$SUBDOMAIN&record_id=7136651&content=$IPADDR&ttl=900" 2>/dev/null
Привет. можно задать пару вопросов по скрипту?
ОтветитьУдалитьПросто я выполняю скрипт для пробы
Удалитьwget -O /dev/null "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=xxx9f2031a7d8bcdfa431dxxx7dc84018c12edbf3a2554603b3a8fd04&domain=site.ru&subdomain=subdomain&record_id=6511554&content=192.168.1.1&ttl=900" 2>/dev/null
Но в яндексе ни чего не обновляется..(((
попробуйте сделать wget -O - ... чтобы чтобы цпуе выдал ответ на стандартный вывод и посмотрите что он напишет или сохраните его ответ в файл и посмотрите файл.
УдалитьВсе дело в том что я хочу заставить работать этот запрос на роутере dd-wrt там урезанный linux
УдалитьНа полноценной системе все прекрасно работает, но только с использованием ключа --no-check-certificate вместе с wget, а в роутере пишет что этот ключ неизвестен... можно ли как то заставить работать этот запрос по http и без проверки сертификата?
проверил, у меня на ddwrt wget вообще молчит о причине ошибки, но ip да - тоже не меняет и на ключ ругается.
УдалитьВообще у меня с настройками внутри ddwrt не сложилось - они не сохраняются при перезагрузке роутера, так что этот скрипт я запускаю с домашнего сервера. Можно запускать с домашнего компьютера или еще чего-то - с того к чему нужно обеспечивать доступ и где есть полная система с настройками, информацией обошибках, полными версиями wget и т.п.
Если домашние компьютеры под виндой - можно поставить cygwin, там вполне работает cron, wget и прочие удобные вещи.
Wget на роутере просто нужно запускать без опций -o и /dev/null а просто wget --no-check-certificate тогда отругается.
УдалитьУ меня нет домашнего сервера, хочу поднять втп на роутере вставив в него флешку, и лить бэкапы сайта туда...
Пришлось седня пока настроить no-ip org
тело коментария сожрало ковычки
Удалитьвот так нужно выполнять чтоб отругался:
wget --no-check-certificate ссылка
с ddwrt подробно, так что проконсультировать не смогу.
УдалитьИз общих соображений - попробовать самостоятельно скомпилировать туда wget из исходников с поддержкой этой опции или поставить что-то вроде curl и попробовать выполнять запросы через них.
В крайнем случае если вы программист - написать простенькую программку которая это будет делать на python, php, c
в общем решил вопрос подключение флешки и установки на нее wget-ssl после этого команда нормально отрабатывает и кстати вот вариант скрипта который работает:
Удалить#!/bin/bash
IPADDR=`ifconfig ppp0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'`
wget -O /dev/null "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=СЮДАПИШЕМСВОЙТОКЕН&domain=НАЗВАНИЕВАШЕГОДОМЕНАТОЧКАРУ&subdomain=НАЗВАНИЕПОДДОМЕНА&record_id=ИДЗАПИСИПОДДОМЕНА&content=$IPADDR&ttl=900" 2>/dev/null
Просто в том виде что у Вас не хочет он работать ни как
Возможно, у меня он работает на Linux Ubuntu :)
Удалитьтулза под винду для смены А-записи домена делегированного на яндекс есть тут http://dns-ip.ru/Home/DynDns/, там же описание по установке
ОтветитьУдалить