Многие системные системный администраторы используют для удалённого доступа сотрудников в офис 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.
На этом всё. Приятной работы!