Узнать белый IP-адрес роутера с сервера, который за NAT-ом?
Приветствую!
Есть небольшая задачка, надеюсь, всезнающий Хабр поможет её решить.
Итак, есть ADSL роутер, который получает 1 белый IP-адрес (динамический) от провайдера. Далее имеем сервер с FreeBSD, который за NAT-ом с серым IP-адресом (статическим). На роутере настроен dynamic dns (dyndns.org). Периодически роутер переподключается к провайдеру, и IP-адрес меняется, однако сервис dyndns не обновляется, так как (я так полагаю), роутер и служба dyndns на нем так устроена, что информация будет синхронизироваться только 1 раз за 1 загрузку роутера. Грубо говоря, чтобы обновился IP-адрес модема на NS серверах dyndns, роутер надо перезагружать. Этот вариант неприемлем.
Что же интересует: нужно в каждый момент времени знать, какой же используется белый IP. Можно ли как-то с сервера с серым IP отправлять по крону белый IP роутера себе на почтовый ящик, к примеру, скриптом из консоли ssh? Если можно, то также интересует, как именно можно добыть этот белый IP? Может выполнить php cкрипт, как-то «грепнуть» IP, а далее уже отправить его на email или с помощью php-mail, или из консоли ssh с помощью sendmail?
В общем, буду рад любым предложенным решениям!
П.С. Если нужна еще какая-то дополнительная информация, предоставлю :)
1. Забрать внешний адрес с роутера по SNMP, если роутер это поддерживает;
2. забрать с консоли роутера, если он умеет telnet сервером быть;
3. забрать с веб-морды роутера curl`ом или wget`ом статусную страницу и распарсить внешний адрес.
все просто у меня модем на бридже и скрипт в кроне каждые 10 минут:
#!/bin/sh
#Скрипт отправляет на почту текущий динамический адрес
#Переменные
LAST_IP=`cat /root/last_ip`
INTERFACE="dsl1"
STRING=`ifconfig $INTERFACE | grep "inet addr"`
IP=`echo $STRING | gawk -F: '{print $2}' | gawk -F' ' '{print $1}'`;
#Узнаем IP и заносим его в файл /root/last_ip если ip совпадаеи с ip что в файле то он не перезаписываеться
if [ "$LAST_IP" != "$IP" ]; then
#Если отличаеться то записываеться
echo $IP > /root/last_ip
#Отправляем содержимое на email
cat | grep "" /root/last_ip | ssmtp -v -s 'ADSL' user@gmail.com
fi