www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> mpd5, msmtp, dynamic ip
Настройка mpd5, msmtp и Perl-скрипт для определения динамического IP-адреса сервера
Автор: Dorlas.
Данная задача у меня возникла по следующим причинам: Провайдер дает подключиться к безлимитному тарифу, НО не предоставляет статический IP-адрес. А посколько сервер будет стоять далеко от меня - мне необходимо всегда знать, какой у него IP-адрес сейчас (чтобы подключиться и поставить что-либо на закачку :)).
Идея возникла почти сразу - отсылать эту информацию на e-mail - реализация ниже:
1. Сначала подключим сервер к Интернет используя mpd5:
1.1. Установим VPN-клиент:
cd /usr/ports/net/mpd5/
make install clean
| 1.2. Теперь настроим автозапуск в /etc/rc.conf:
echo 'mpd_enable="YES"' >> /etc/rc.conf
| 1.3. Теперь создадим конфигурационный файл и пропишем его содержимое:
cd /usr/local/etc/mpd5/
touch mpd.conf
| Содержимое файла mpd.conf:
startup:
set user root air-admin
set console self 127.0.0.1 5005
set console open
set web self 127.0.0.1 5006
set web open
default:
load dialup
dialup:
create bundle static B1
set iface route default
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
create link static L1 pptp
set link action bundle B1
set auth authname "xxxxxxx"
set auth password "yyyyyyy"
set link max-redial 0
set link mtu 1460
set link keep-alive 20 75
set pptp peer zzz.zzz.zzz.zzz
set pptp disable windowing
open
| 1.4. Теперь осталось запустить стартовый скрипт и убедиться, что IP-адрес от провайдера мы получили:
/usr/local/etc/rc.d/mpd5 start
| 2. Теперь установим и настроим программу msmtp - с помощью нее мы сможем отправлять письма на Gmail-овский ящик (с использованием учетки от него же) :) Данные по настройки брались отсюда: ссылка
2.1. Установим msmtp:
cd /usr/ports/mail/msmtp/
make WITH_GNUTLS=YES
make install clean
| 2.2. Для работы с TLS создадим папку с сертификатом в домашнем каталоге:
cd ~
mkdir .certs
cd .certs
touch ThawtePremiumServerCA.crt
| 2.3. Содержимое сертификата:
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
| 2.4. Теперь создаем конфигурационный файл для msmtp:
cd ~
touch .msmtprc
chmod 600 .msmtprc
| 2.5. Его содержимое:
account default
host smtp.gmail.com
port 587
from vershinin.e@gmail.com
tls on
tls_starttls on
tls_trust_file ~/.certs/ThawtePremiumServerCA.crt
auth on
user vershinin.e
password **********
logfile ~/.msmtp.log
| 2.6. На этом этапе стоит проверить, работает ли Интернет и отсылка писем :) - пробуем:
echo "Subject: test mail" | msmtp vershinin.e@gmail.com
| Если пришло письмо - значит первые 2 этапа успешно завершили - теперь самое главное - написать скрипт детектирования смены IP-адреса - вариантов тут полным полно - я как всегда пошел сложным путем :)
3. Настроим журнализирование MPD:
3.1. Создаем файл mpd.log:
3.2. Добавляем в файл /etc/syslog.conf строки:
!mpd
*.* /var/log/mpd.log
| 3.3. Перезапускаем службу журнализирования:
4. Пишем скрипт - у меня он лежит тут: /root/Scripts/
cd /root/Scripts/
touch mail reconnect sending.pl
| Содержимое скрипта sending.pl (стиль конечно ужос - ну как смог :) ):
#!/usr/local/bin/perl
$if_up = `grep "IFACE: Up event" /var/log/mpd.log > /root/Scripts/reconnect`;
$reconnect = `cat /root/Scripts/reconnect`;
if ($reconnect ne "") {
$my_ip = `ifconfig ng0 | grep "inet" | cut -d " " -f 2`;
open (MAILFILE, '>/root/Scripts/mail');
print MAILFILE "To: vershinin.e\@gmail.com\n";
print MAILFILE "Subject: My new IP!\n\n";
print MAILFILE $my_ip;
close (MAILFILE);
`echo -n > /var/log/mpd.log`;
`cat /root/Scripts/mail | /usr/local/bin/msmtp vershinin.e@gmail.com`;
}
| Теперь поясню, как работает скрипт:
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 (например с максимальной частотой):
crontab -e
* * * * * /root/Scripts/sending.pl
| Теперь с интервалом в 1 минуту скрипт будет тестировать изменения в журнале и, в случае обнаружения смены IP-адреса, будет слать письмо :)
Отступление:
1) Почему использовал почту (ведь еще есть простой вариант с использованием ICMP - просто по Cron пинговать что-нибудь) - собственно этот вариант я тоже использую, но у него есть один недостаток - необходимо иметь то, что можно пинговать (и доступ туда) :) Мне же хотелось полностью автономный вариант.
2) Возможно возникнут вопросы, почему использовал Gmail и гемор с TLS :) Отвечаю - Gmail у меня есть на телефоне (в виде JAVA DIMP) - крайне удобная вещь, в Gmail есть нормальные правила (письма с IP-ками будут автоматически складываться в отдельную папку) и используя этот клиент я экономлю трафик (т.к. мне на телефон не будут качаться все письма - интересует лишь последнее :))
размещено: 2008-07-07,
последнее обновление: 2008-07-07,
автор: Dorlas
|
|
|
Комментарии пользователей [18 шт.]