Мониторинг загрузки интерфейса OpenVPN с помощью MRTG

()

Многие системные системный администраторы используют для удалённого доступа сотрудников в офис OpenVPN, который создаёт на сервере виртуальный tap-интерфейс.

Иногда возникает необходимость следить за трафиком, проходящим через OpenVPN, например с помощью MRTG. Если OpenVPN сервер и MRTG установлены на одном и том же сервере - задача решается с помощью несложных скриптов, которые уже описывались. Однако этот способ не подойдёт в том случае, если MRTG работает на отдельном сервере и наблюдает за интерфейсами офисного шлюза "издалека".

Далее будет показано как решить эту задачу для офисного шлюза, информацию о трафика через который снимает отдельный сервер мониторинга.

Как всегда начальные условия:

  • Офисный шлюз с внутренним адресом 192.168.2.1 под управлением Ubuntu Server 8.10, имеющий два интерфейса: внешний - eth0 и внутренний - eth1. На нём так же развёрнут OpenVPN-сервер, который использует интерфейс tap0.
  • Сервер мониторинга под управлением Debian Sid с IP-адресом 192.168.2.10.

Переходим к решению задачи. Для начала установим snmpd на офисном шлюзе:

apt-get install snmpd

Далее приводим файл /etc/default/snmpd к виду:

export MIBDIRS=/usr/share/snmp/mibs
SNMPDRUN=yes
SNMPDOPTS='-c /etc/snmp/snmpd.conf'
TRAPDRUN=no
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'
SNMPDCOMPAT=yes

Затем приводим файл к виду:

syslocation   Work
syscontact    user@some.host
sysservices   0
sysservices   12
rocommunity   public  192.168.2.10
syslocation:  Systemland, USA

И перезапускаем службу:

invoke-rc.d snmpd restart

Если у вас используются другие адреса - здесь и далее подставляйте свои значения.

Переходим к серверу мониторинга. Для начала установим на него mrtg:

apt-get install mrtg

Создадим начальную конфигурацию:

cfgmaker public@192.168.2.1 > /etc/mrtg.cfg

Далее выбросим из файла конфигурации всё то, что не относится к интерфейсам eth0 и eth1. Возможно вы так же захотите переопределить параметр WorkDir, определяющий место, куда MRTG будет складывать графики.

А вот теперь встаёт вопрос: что же делать с интерфейсом tap0? При сборе статистики по snmp к интерфейсам обращаются по их индексам, однако у tap0 индекс меняется с каждым перезапуском сервиса openvpn, а информация об имени интерфейса в snmp отсутствует.

Решение приходит в виде описанных ранее скриптов, которые с незначительными модификациями можно использовать и для решения этой задачи.

В модифицировнном вариате скрипт будет заходить на шлюз по SSH и уже там запускать утилиту ifconfig для получения информации об интерфейса tap0. Для этого нам понадобиться создать отдельного пользователя на шлюзе и настроить авторизацию по ключу.

Создаём на шлюзе пользователя:

adduser mrtg

Затем на сервере мониторинга от имени пользователя root гененируем новый ключ:

ssh-keygen -t dsa

Копируем его на шлюз:

ssh-copy-id -i ~/.ssh/id_dsa.pub mrtg@192.168.2.1

Теперь создаём скрипт, который будет забирать информацию со шлюза:

#!/bin/sh

IFACE="tap0"
INPUT=`ssh moose@192.168.2.1 /sbin/ifconfig ${IFACE} | grep bytes | awk '{print $2;}' | cut -d ':' -f2`
OUTPUT=`ssh moose@192.168.2.1 /sbin/ifconfig ${IFACE} | grep bytes | awk '{print $6;}' | cut -d ':' -f2`
DATE=`date +%s`
echo $INPUT
echo $OUTPUT
echo $DATE
echo $IFACE

И сохраняем его на сервер мониторинга под именем: /root/scripts/mrtg_get_openvpn_info.sh. Так же его нужно сделать исполняемым:

chmod +x /root/scripts/mrtg_get_openvpn_info.sh

После чего добавляем в файл конфигурации mrtg следующие строки:

Target[openvpn]: `/root/scripts/mrtg_get_openvpn_info.sh`
MaxBytes[openvpn]: 10000000
#XSize[openvpn]: 600
#YSize[openvpn]: 160
Title[openvpn]: OpenVPN
PageTop[openvpn]: <h1>OpenVPN traffic graph</h1>

Теперь у нас среди прочих графиков появится ещё и график загрузки интерфейса OpenVPN.

На этом всё. Приятной работы!

Ключевые слова: mrtg, openvpn, ssh, ifconfig.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности