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