Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
1.2. Теперь настроим автозапуск в /etc/rc.conf:
|
1.3. Теперь создадим конфигурационный файл и пропишем его содержимое:
|
Содержимое файла mpd.conf:
|
1.4. Теперь осталось запустить стартовый скрипт и убедиться, что IP-адрес от провайдера мы получили:
|
2. Теперь установим и настроим программу msmtp - с помощью нее мы сможем отправлять письма на Gmail-овский ящик (с использованием учетки от него же) :) Данные по настройки брались отсюда: ссылка
2.1. Установим msmtp:
|
2.2. Для работы с TLS создадим папку с сертификатом в домашнем каталоге:
|
2.3. Содержимое сертификата:
|
2.4. Теперь создаем конфигурационный файл для msmtp:
|
2.5. Его содержимое:
|
2.6. На этом этапе стоит проверить, работает ли Интернет и отсылка писем :) - пробуем:
|
Если пришло письмо - значит первые 2 этапа успешно завершили - теперь самое главное - написать скрипт детектирования смены IP-адреса - вариантов тут полным полно - я как всегда пошел сложным путем :)
3. Настроим журнализирование MPD:
3.1. Создаем файл mpd.log:
|
3.2. Добавляем в файл /etc/syslog.conf строки:
|
3.3. Перезапускаем службу журнализирования:
|
4. Пишем скрипт - у меня он лежит тут: /root/Scripts/
|
Содержимое скрипта sending.pl (стиль конечно ужос - ну как смог :) ):
|
Теперь поясню, как работает скрипт:
4.1. Ищем в /var/log/mpd.log строки IFACE: Up event - они означают, что MPD переустанавливал VPN-подключение (причин может быть несколько)
4.2. Результат поиска загоняем в файл reconnect
4.3. На основе переменной сравнения с файлом reconnect предпринимаем ряд действий, в случае, если VPN-соединение передергивалось:
* Определяем текущий IP-адрес и заносим его в переменную
* В файле mail формируем шаблон письма, содержащий новый IP-адрес сервера
* С помощью msmtp отправляем письмо с данными на e-mail
* Обнуляем журнал /var/log/mpd.log
Теперь остается только загнать скрипт /root/Scripts/sending.pl в Cron (например с максимальной частотой):
|
Теперь с интервалом в 1 минуту скрипт будет тестировать изменения в журнале и, в случае обнаружения смены IP-адреса, будет слать письмо :)
Отступление:
1) Почему использовал почту (ведь еще есть простой вариант с использованием ICMP - просто по Cron пинговать что-нибудь) - собственно этот вариант я тоже использую, но у него есть один недостаток - необходимо иметь то, что можно пинговать (и доступ туда) :) Мне же хотелось полностью автономный вариант.
2) Возможно возникнут вопросы, почему использовал Gmail и гемор с TLS :) Отвечаю - Gmail у меня есть на телефоне (в виде JAVA DIMP) - крайне удобная вещь, в Gmail есть нормальные правила (письма с IP-ками будут автоматически складываться в отдельную папку) и используя этот клиент я экономлю трафик (т.к. мне на телефон не будут качаться все письма - интересует лишь последнее :))
размещено: 2008-07-07,
последнее обновление: 2008-07-07,
автор: Dorlas
skif, 2008-07-08 в 11:01:17
а что нить типа no-ip.org?:) гораздо удобнее:)
Dorlas, 2008-07-08 в 11:17:23
Ну и опять получается зависимость от внешнего сервиса :)
Хотя идея хорошая - спасибо - опробую на досуге :)
mr_gfd, 2008-07-08 в 11:40:54
Думаю, что значительно более идеологически выдержано будет переписать скрипт, чтоб он слушал пайпу лога.
сейчас попробую соорудить что-то подобное.
artech, 2008-07-08 в 12:32:33
А почему бы просто не написать скрипт который будет получать текущий IP, сравнивать его со старым значением (сохранять скажем во внешний файл), и в случае несовпадения отправлять письмо. Все это дело, опять же, запихать в cron. Эффект тот же.
mr_gfd, 2008-07-08 в 12:33:44
[11:33][webserver][/home/mike/scripts]>cat ipgrep.pl
#!/usr/bin/perl -w
use strict;
use warnings;
my $file="~/mail";
#
# Listen for input
#
while (<>) {
if ($_ =~ /IFACE: Up event/;)
#my $ip = `/usr/bin/wget -o /dev/null -O - http://ip.dnsexit.com/`;
my @lines = `ifconfig wan0`;
foreach my $line (@lines) {
$line =~ /inet\s+(\d+.\d+.\d+.\d+)\s+(.*)/;
open (FH, ">$file") || die "File $file open error $!\n";
my $sysname = `uname -n`;
print FH "$sysname new IP is $line\n";
close FH;
#`echo "$sysname new IP is $line"| /usr/local/bin/msmtp 'user@gmail.com'`;
}
}
и это повесить на пайп к сислогу мпд. все упрощено до одного скрипта
Dorlas, 2008-07-08 в 12:45:21
Ну я верю, верю - что все хорошие программисты - и мой стиль режет глаз :) На уникальность не претендую - главное задачу решить и результата добиться :) В моем варианте все полностью работает :)
Как я уже написал - вариантов - тьма, каждый для себя выберет лучший :)
Кстати, для интересующихся, рекомендую разобраться с работой программы msmtp - если просто написать:
echo "my IP: $ip" | msmtp user@gmail.com - то эффекта не будет - письмо то Вы получите, НО там не будет полей: To:, Subject: и тела письма тоже не будет :) Когда разбирался, пришлось особым образом письмо формировать (см. статью).
mr_gfd, 2008-07-08 в 13:02:11
@Dorlas
Ничего не имею против )
как вариант использовать smtp шлюз провайдера и пайпу к стандартному mail - тогда выбор мыла не будет ограничен, и, в некоторых случаях, достаточно будет использовать mail2sms шлюз мобильного оператора.
PS: спасибо за поднятую тему - написал себе скрипт )
Осторожный, 2008-07-08 в 16:18:13
1) Запускать каждую минуту скрипт - это неправильно.
Правильнее слушать pipe от лога.
Или вообще написать отдельную утилиту на C не связанную с mpd5, которая мониторит смену IP-адреса и шлет письмо.
2) $my_ip = `ifconfig ng0 | grep "inet" | cut -d " " -f 2`;
Писать это в скрипте на perl - это извращение. Как минимум два лишних вызова grep и cut. Зачем, когда можно пропарсить вывод самим скриптом ?
3) Не очень понятно - провайдер выдает реальный IP-адрес или внутренний ?
gvf, 2008-07-08 в 16:52:01
А не проще строить туннель на свой сервак???
И ВСЕГДА работать с одним адресом?????
Какая разница с какого адреса будет построен VPN, главное что из блока провайдера и с заданным паролем.
Или я туплю....... или условия описаны не полностью.
rm, 2008-07-08 в 18:11:00
http://www.dyndns.com/services/dns/dyndns/
http://ru.wikipedia.org/wiki/Динамический_DNS
bp, 2008-07-09 в 0:31:47
ddclient дохнет периодически, так что письмо по любому не помешает.
abigor, 2008-07-09 в 5:23:08
если этот сервак в конторе которая под юр лицом работает, я бы не делал костылей, а просто принес счет на 300 рублей за статический ip и не парил моск
Dorlas, 2008-07-09 в 7:59:51
to Осторожный:
Провайдер выдает динамический белый IP-адрес.
Как я уже писал - реализаций может быть много - каждый сам себе писун :) :) :)
to abigor:
Провайдер хитрый и на безлимите статический IP-ник не дает - об этом написано в самом начале статьи. Плюс сервер будет стоять на квартире - физ. лиц.
to gvf:
Намного проще! - при условии, что есть еще один свой сервер со статическим IP-ом :) А если нет? И если он не твой, а конторы, где ты работаешь (и может быть не собираешься там работать всю жизнь)...
Я же написал - нужен автономный вариант - чтобы ни от кого/чего не зависеть :)
Про использование DDNS - штука хорошая, но она усложняет цепочку - и понижает надежность...
Ну вот сами вспомните - звонят Вам и говорят - не работает Интернет...тупо так - не работает :) Бывали случаи, что из-за DNS ??? Бывали....
Dorlas, 2008-07-09 в 12:28:36
Только что пришла интересная мысль - если все таки использовать DDNS - то имеет смысл проверять, схожим методом - не косячит ли работа DDNS (резолвить свое DDNS-имя и сравнивать с текущим IP-ом) :)
И вот если не текущий IP не совпадает с именем - слать на mail-письмо :)
Ну и тут пригодится статейка - msmtp и Perl/Shell :)
byteplayer, 2008-07-16 в 0:38:46
Но ведь в мпд есть ап- и даун- скрипты, которые можно указать и в качестве одной из переменных в скрипт передаётся локальный ай-пи интерфейса. Почему бы этим не воспользоваться?
Dorlas, 2008-08-01 в 10:35:16
Пару дней назад у Gmail изменился сертификат - теперь используется вот такой:
Equifax_Secure_CA.crt:
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
EwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1
cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4
MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgx
LTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0
eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2R
FGiYCh7+2gRvE4RiIcPRfM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO
/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuv
K9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAGA1UdHwRp
MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEt
MCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjAL
BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gjIBBPM5iQn9Qw
HQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMBAf8w
GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
AFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2u
FHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
-----END CERTIFICATE-----
Dorlas, 2008-08-19 в 16:19:05
Блин - сертификат опять поменяли :)
Минутное чтение man msmtp и следующие изменения в ~/.msmtprc:
tls_certcheck off
#tls_trust_file ~/.certs/ThawteSGCCA.cer
ram, 2010-02-14 в 16:27:03
1) По поводу
"bp, 2008-07-09 в 0:31:47
ddclient дохнет периодически.."
где то читал, что подвисания действительно есть и лечат кроном рестарт службы.
2) Так же некоторые компилят ядро с кучей "options NETGRAPH"
Надо ли?
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [18 шт.]