null

Мониторинг Huawei HG8245H используя динамический DNS

Всеми нами любимый РосТелеком зачастую устанавливает пользователям GPON терминал от Huawei модели HG8245H. Однажды возникла необходимость осуществления банального мониторинга такого устройства с учётом отсутствия статического внешнего IP адреса. Мониторить мне было достаточно доступность устройства по ICMP.

Пожалуй, единственная проблема с которой сталкивается администратор в подобной ситуации, кроме, конечно, внешнего IP адреса, -- это способ, которым можно отследить изменение этого самого адреса устройства. Раза три в день оно перезапрашивает параметры своего PPPoE соединения и, как следствие, IP адрес меняется. Наиболее простым для меня решением была бы организация ICMP запросов с той стороны на сервер мониторинга. Только вот устройство не имеет ни telnet, ни ssh интерфейса, а значит, не предоставляет возможности поколдовать. Поэтому среди всех возможностей был выбран сервис динамического DNS. Только вот регистрироваться на "сомнительных" сервисах мне показалось избыточным, поэтому был написан простейший dyndns сервис. Устройство, регистрирующее смену IP адреса, отправляет GET update-REST запрос на сервер. В параметрах запроса указываются hostname, новый IP и иногда имя пользователя/пароль. В ответ устройство может не ожидать ничего, а может ожидать строчку "good hostname IP" или "bad hostname IP". На веб-сервере был создан location /dyndns/, в который положена страничка update.php следующего содержания.

<?php
$FILE = "/path/to/file";

if (!empty($_GET["myip"]) &&
   htmlspecialchars($_GET["hostname"]) == "hostname") {
   file_put_contents($FILE, htmlspecialchars($_GET["myip"])."\n");
   echo "good " . $_GET["hostname"] . " " . $_GET["myip"];
}
?>

Как видно, скрипт сравниваниет GET параметр "hostname" со строчкой "hostname" и, в случае совпадения, записывает "myip" в файл. После этого, на Huawei можно настроить dyndns провайдера указав, соответственно, IP сервера и hostname.

Со стороны Zabbix, был добавлен ExternalScript с вот таким содержимым:

#!/bin/sh

FILE=/path/to/file
LC_ALL=C
export LC_ALL

if egrep -q '([0-9]{1,3}\.){1,3}[0-9]{1,3}' "$FILE" ;then
   if ping -c1 "`head -1 "$FILE"`" >/dev/null 2>&1 ;then
      echo 1
   else
      echo 0
   fi
fi

Скрипт отправляет всего один ICMP запрос, поскольку мне заведомо известно, что потери между Zabbix и Huawei в принципе невозможны ^_^. Да и регулярное выражение, как видно, написано достаточно криво, потому что в тот файл кроме IP адресов попасть заведомого ничего не может. Но тем не менее. Далее в Zabbix был создан Item с типом "External check", в поле key которого указано имя скрипта. Для полноты картины, был создан также Item с типом "Zabbix agent", в котором ключём служит "vfs.file.time[/path/to/file]". Этот Item позволяет отслеживать изменение IP адреса. В результате, получаем мониторинг устройства, IP адрес которого динамически меняется.

korg

 

Коротко о себе

Работаю в компании Tune-IT, администрирую инфраструктуру компании и вычислительную сеть кафедры Вычислительной ТехникиСПбНИУ ИТМО.

Интересы: администрирование UNIX и UNIX-like систем и активного сетевого оборудования, написание shell- и perl-скриптов, изучение технологий глобальных сетей.
Люблю собирать GNU/Linux и FreeBSD, использовать тайлинговые оконные менеджеры и писать системный софт.