Сервер с динамическим IP через DNS от Сloudflare, с помощью ddclient
Для начала:
- Создаем учетную запись на cloudflare.com.
- Добавляем в этот сервис свой домен (например mydomen.tld).
- NS записи домена указываем на сервера этого сервиса.
- Далее воспользуемся интересным скриптом на Perl под названием ddclient. Он будет обновлять наш IP в настройках Сloudflare, используя API этого сервиса. Скрипт поддерживает множество сервисов и несколько способов определения IP.
Обновляем A-запись поддомена актуальным динамическим IP
- Добавляем A-запись поддомена в настройках Сloudflare, указывая любой IP и небольшой TTL (например home.mydomen.tld).
- Скачиваем ddclient (если нужно устанавливаем в системе).
- Настраиваем файл конфигурации
[/etc/ddclient/]ddclient.conf
(пример ниже). - Примеры запуска:
# Тестируем. Пытается определить IP разными способами. [sudo /usr/sbin/]ddclient -query # Все еще тестируем. Использует файл конфигурации # и выводит много информации о своей работе. [sudo /usr/sbin/]ddclient -daemon=0 -debug -verbose -noquiet # Запускаем и проверяем значение A-записи на странице Сloudflare, # а также nslookup DOMA.MYDOMEN.TLD [sudo /usr/sbin/]ddclient -daemon 300 -syslog
- Прикручиваем к автозапуску, к планировщику
Установка версии из репозитория для Ubuntu
Пример установки и настройки ddclient для Ubuntu:
# Возможно вам понадобиться установить дополнительные пакеты для Perl
# JSON::Any, Data::Validate::IP, IO::Socket::SSL
sudo apt-get install libjson-any-perl libdata-validate-ip-perl libio-socket-ssl-perl
# Скачиваем, копируем куда нужно и устанавливаем атрибут исполняемого файла
# Создаем нужные для работы папки
cd ~
wget https://raw.githubusercontent.com/wimpunk/ddclient/master/ddclient
sudo cp ddclient /usr/sbin/ddclient
sudo chmod +x /usr/sbin/ddclient
sudo mkdir /var/cache/ddclient
sudo mkdir /etc/ddclient
# Создаем файл конфигурации, пример ниже
sudo nano /etc/ddclient/ddclient.conf
# ПИШЕМ И СОХРАНЯЕМ КОНФИГУРАЦИЮ
# Добавляем в автозагрузку, используя пример с оф. сайта
wget https://raw.githubusercontent.com/wimpunk/ddclient/master/sample-etc_rc.d_init.d_ddclient.ubuntu
sudo cp sample-etc_rc.d_init.d_ddclient.ubuntu /etc/init.d/ddclient
sudo chmod +x /etc/init.d/ddclient
sudo update-rc.d ddclient defaults
sudo service ddclient start
Файл конфигурации
# /etc/ddclient/ddclient.conf
daemon=1h
syslog=yes
use=web, web=dnspark
ssl=yes
protocol=cloudflare
server=api.cloudflare.com/client/v4
zone=MYDOMEN.TLD
login=CLOUDFLARE_ACCOUNT_MAIL
# See API-KEY https://www.cloudflare.com/a/account/my-account
password=CLOUDFLARE_ACCOUNT_GLOBAL_API_KEY
DOMA.MYDOMEN.TLD
- Актуальное значение
server
есть в исходном коде скрипта. Где-то в документации оно было указано неверно. - Ссылка для получения
cloudflare-api-key
: https://www.cloudflare.com/a/account/my-account. - Параметры в файле конфигурации могут быть в одной строке, разделяемые запятой. Их также можно задать в командной строке при запуске
ddclient
. Если файл конфигурации не в стандартном месте, то путь можно также указать в командной строке. - Значение
use
задает способ определения актуального IP. Сloudflare не позволяет установить IP с которого обращаемся к API. Примеры, а подробнее в документации:# Через онлайн сервисы типа "YOUR-IP". # Есть предустановленные как web=dnspark, # для которых web-skip не нужен. use=web, web=PROVIDER|URL, web-skip=PATTERN # Выполнить команду и прочитает ее вывод. Смотри пример ниже. use=cmd, cmd=COMMAND, cmd-skip=PATTERN # Задать IP явно, например через командную строку или внутри скрипта. use=ip, ip=IP-ADDRESS # Работа с предустановленными роутерами. # Можно использовать: # - fw-skip=PATTERN # - fw-login=LOGIN # - fw-password=PASS # Web интерфейс роутера нужно переключить на английский. use=ROUTER_NAME, fw=IP-ADDRESS # Взять IP в настройках интерфейса. # Если мы не за NAT, а сессию к провайдеру поднял текущий комп. use=if, if=INTERFACE, if-skip=PATTERN # Все IP в тексте до этой строки-шаблона будут проигнорированы, # т.е. использован первый найденный после. nnn-skip=PATTERN
Определение WAN IP в роутере Linksys E900 через UPnP/SSDP
Если мы сидим за NAT и сессию к провайдеру подняли не с локального интерфейса. И при этом нет желания каждый раз за своим IP идти в интернет. А "запароленный" роутер становиться проблемой для ddclient при попытке добраться через HTTP до страницы с информацией о подключении. То можно воспользоваться UPnP в роутере. Например для Linksys E900 сделать так:
- Включить UPnP в настройках роутера.
- В файле конфигурации для удобства можно не указывать длинную строку для определения IP, а вынести ее в sh-скрипт:
use=cmd, cmd=/usr/sbin/wanip_linksys_e900_upnp.sh, cmd-skip=NewExternalIPAddress
- И сама команда для чтения данных из роутера внутри
wanip_linksys_e900_upnp.sh
:curl -H "SOAPAction: urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:GetExternalIPAddress></s:Body></s:Envelope>" http://192.168.1.1:1780/control?WANIPConnection
Интересно
Скрипт поддерживает немалое количество сервисов, позволяющих относительно легко менять A-запись для домена. У него есть свое сообщество, которое будет поддерживать список сервисов в актуальном состоянии. Код можно изучить и использовать при написании своих утилит.
Ссылки и документация
- https://github.com/wimpunk/ddclient
- https://sourceforge.net/p/ddclient/wiki/Home/
- https://www.cloudflare.com/technical-resources/#ddclient
- А также запуск
ddclient -help
. Наиболее актуально!
Файлы из статью:
Комментариев нет:
Отправить комментарий