Документация по ОС FreeBSD Суббота, 18.05.2024, 18:07
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Настройка mpd5, msmtp и Perl-скрипт для определения динамического IP-адреса сервера [2008]
Данная задача у меня возникла по следующим причинам: Провайдер дает подключиться к безлимитному тарифу, НО не предоставляет статический 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:
touch /var/log/mpd.log

3.2. Добавляем в файл /etc/syslog.conf строки:
!mpd
*.* /var/log/mpd.log

3.3. Перезапускаем службу журнализирования:
/etc/rc.d/syslogd reload

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-ками будут автоматически складываться в отдельную папку) и используя этот клиент я экономлю трафик (т.к. мне на телефон не будут качаться все письма - интересует лишь последнее :))



Источник: http://www.lissyara.su/?id=1707
Категория: Net | Добавил: oleg (08.07.2008) | Автор: Dorlas
Просмотров: 1177 | Рейтинг: 4.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024