Linux-сервер своими руками — страница 42 из 119

етьем этаже.

Для работы MRTG необходимо установить и настроить сервер snmpd. Однако в большинстве случаев этого делать не нужно: корректная настройка данного сервера — это довольно нетривиальная задача, а лишняя «дыра» в системе безопасности нам не нужна. К тому же настройка сервера snmpd оправдывает себя, если вы хотите считать трафик этого компьютера не локальной программой mrtg, а удаленной, которая запущена на другом компьютере и получает данные от нашего сервера по протоколу SNMP.

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

Строка 1

Строка 2

Строка 3

Строка 4

• Строка 1 — это входящие байты (принятые).

• Строка 2 — исходящие байты (отправленные).

• Строка 3 — время, на протяжении которого работает устройство.

• Строка 4 — имя цели.

Где же взять эту программу? Написать самому! Сейчас я подробно опишу, как это сделать. Настоятельно не рекомендую вам сразу взять и использовать готовый листинг: вы не поймете самого главного — как именно происходит подсчет трафика. В результате ваша система подсчета трафика будет работать в таком режиме: программа будет считать трафик, a MRTG — строить графики.

Определим, откуда будем брать информацию о трафике. Операционная система Linux сама выполняет подсчет трафика. Вся информация, которая вам необходима, содержится в файле /proc/net/dev. Выполните команду:

cat /proc/net/dev

Результат выполнения этой команды вы уже видели в этой главе (рис. 8.7). Более новые ядра предоставляют больше информации о работе сетевых устройств, поэтому выполните данную команду для того, чтобы увидеть, какую информацию о сетевых устройствах предоставляет ваша система. Обычно первое информационное поле файла /proc/net/dev — это количество принятых байтов, а девятое — количество отправленных байтов.

Разрабатываемая программа должна найти нужный интерфейс и возвратить количество принятых и переданных байтов. Затем программа возвращает время, на протяжении которого работает устройство. Это время достаточно легко вычисляется с помощью программы uptime.

1:51pm up 2:10, 4 users, load average: 0.02, 0.04, 0.00

Программа uptime, кроме всякой другой информации, возвращает время, на протяжении которого система работает, то есть с момента загрузки операционной системы. В вышеприведенном примере видно, что машина непрерывно работала 2 часа и 10 минут. 2 часа и 10 минут — это значение, которое разрабатываемая программа должна вывести в третьей строке. Вы можете смело использовать это время, потому что в основном интерфейсы сервера «подымаются» при загрузке системы и разница между uptime системы и uptime интерфейса составит всего несколько секунд.

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

Создайте файл count (см. листинг 8.10) и поместите его в каталог /usr/bin (не забудьте сделать его исполнимым!).

Листинг 8.10. Программа count

#!/bin/bash

/bin/grep "$1" /proc/net/dev | /bin/awk –F ":" '{ print $2 } ' | /bin/awk '{ print $1 "\n" $9 }'

UPTIME=`/usr/bin/uptime | /bin/awk –F " " '{ print $3 }'`

echo $UPTIME

echo $1

Использовать программу нужно так:

count интерфейс

Например, count eth0.

Запустив программу, вы должны увидеть примерно следующие строки:

2738410

1235960

2:57,

eth0

Во второй строке программы происходит следующее: находится нужная нам запись с именем интерфейса, который мы указали в первом параметре при вызове программы ($1). Затем интерпретатор awk выводит значения первого и девятого полей, содержащие количество принятых и переданных байтов. В третьей строке программы вычисляется время uptime. Последние две строки выводят время uptime и название интерфейса. Предположим, что у вас имеется два интерфейса: локальный eth0 и выделенная линия (ррр0), идущая к провайдеру. При этом конфигурация сети несколько упростилась (см. рис. 8.10). 

Рис. 8.10. Конфигурация сети (2)


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

Листинг 8.11. Файл /var/WHW/html/mrtg/mrtg.cfg

WorkDir: /var/www/html/mrtg/ipc 

Options[_]: bits,growright 

Target[eth0]: `/usr/bin/count eth0` 

Title [eth0] : Local Ethernet 

MaxBytes[eth0]: 99999999 

PageTop[eth0] : Status of /dev/eth0 

Target [ppp0] : `/usr/bin/count ррр0` 

Title [ppp0] : Leased line 

MaxBytes[ppp0]: 99999999 

PageTop[ppp0] : Status of /dev/ppp0

Из листинга 8.11 видно, что у вас имеются две цели, для каждой из них заданы свои параметры. Нужно учитывать, что имя интерфейса, которое вы передаете программе count, должно совпадать с названием цели (eth0 и ррр0).

В качестве рабочего каталога я использовал /var/www/html/mrtg/ipc. От использования каталога /var/www/html/mrtg/ я отказался, поскольку в нем находится документация по mrtg.

Параметры MaxBytes, Title и PageTop являются обязательными. При их отсутствии mrtg попросит вас исправить ошибки в конфигурационном файле.

Теперь можете запустить программу mrtg командой:

mrtg /var/www/html/mrtg/mrtg.cfg

 В каталоге /var/www/html/mrtg/ipc должны появиться первые файлы-отчеты. Имя файла-отчета будет совпадать с именем цели. Первые два запуска mrtg будет «ругаться» на отсутствие предыдущих данных, но потом все будет работать как надо.

Если третий запуск прошел гладко, то есть без сообщений об ошибках, можно добавить mrtg в расписание демона crond. Для этого добавьте в файл /etc/crontab одну из следующих строк (какая кому нравится):

5,10,15,20,25,30,35,40,45,50,55,59 * * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg

или

0-59/5 * * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg

После этого желательно перезапустить демон crond:

/etc/init.d/crond restart

Программу mrtg можно запускать в режиме демона (не через crond). Для этого установите значение параметра RunAsDaemon равное yes. За более подробной информацией обратитесь к документации по mrtg. 

Рис. 8.11. Статистика для устройства ppp0


Теперь самое время проверить, как работает mrtg. Запустите браузер и введите адрес http://localhost/mrtg/ipc/eth0.html. В результате вы должны увидеть информацию о загрузке канала. Первые графики вы увидите примерно через час после первого запуска mrtg, в зависимости от настроек периода запуска mrtg.

8.6. Сетевая файловая система (NFS)

Сетевая файловая система позволяет монтировать файловые системы на удаленных компьютерах. При этом создается ощущение, что эти файловые системы являются локальными, если не считать, конечно, скорости соединения.

После монтирования вы сможете непосредственно обращаться к файлам этой файловой системы. Сетевая файловая система чем-то напоминает службу «Доступ к файлам и принтерам» сети Microsoft. Для того, чтобы компьютер мог предоставлять свои ресурсы для сетевой файловой системы NFS, на нем должен быть установлен и настроен NFS-сервер. Для того, чтобы компьютер имел доступ к ресурсам сетевой файловой системы, на нем должен быть установлен и настроен NFS-клиент. И тот и другой можно установить на одном компьютере, если этот компьютер и предоставляет свои ресурсы системе NFS, и использует ресурсы NFS.

Для использования NFS нужно убедиться, что у вас запущены сервисы netfs и nfslock, а в некоторых системах nfsd и mountd. Это можно сделать с помощью конфигуратора или просмотреть наличие соответствующих ссылок в каталоге /etc/init.d/rc.d.

Возможно, у вас не установлена поддержка NFS. В этом случае, установите пакет nf s-utils-0.2.1-2mdk.i586.rpm на сервере, а пакет nfs-utils-0.2.1-2mdk.i586.rpm — на клиенте.

8.6.1. Настройка сервера NFS

Напомню, что если у вас не установлена поддержка NFS, то для сервера необходимо установить пакет nfs-utils-0.2.1-2mdk.i586.rpm.

Для настройки сервера сетевой файловой системы NFS используется файл конфигурации /etc/exports. В нем указываются файловые системы, которые будут экспортированы для совместного использования (см. листинг 8.12). Обычно в качестве таковых используются файловые системы /home, /pub и некоторые другие.

Листинг 8.12. Файл /etc/exports

/pub(ro,insecure,all_squash) 

/home/den denhome.domain.com(rw) 

/mnt/cdrom(ro) 

/mnt/cdrom comp11.domain.com(noaccess)

Давайте разберемся в данной конфигурации. К каталогу /pub имеют доступ в режиме «только чтение» все компьютеры сети. К каталогу /home/den доступ в режиме чтения и записи имеется только с компьютера denhome.domain.com. К каталогу /mnt/cdrom доступ в режиме «только чтение» имеют все компьютеры, кроме comp11.domain.com.

При конфигурировании сетевой файловой системы могут использоваться опции, указанные в табл. 8.7.

Опции, задаваемые в файле /etc/exports Таблица 8.7

Опция Описание
secure Требует, чтобы запросы исходили из портов, принадлежащих только безопасному диапазону (с номерами < 1024). Данная опция включена по умолчанию
insecure Отключает опцию secure
ro Доступ в режиме «только чтение»
rw Доступ в режиме чтения и записи
noaccess Запрещает доступ к конкретной ветви экспортируемого дерева каталогов
link_absolute Оставляет все символические ссылки без изменений. Включена по умолчанию
link_relative Конвертирует абсолютные ссылки в относительные
squash_uidssquash_gids Указанные идентификаторы групп и пользователей будут конвертированы в анонимные
all_squash Все идентификаторы групп и пользователей будут конвертированы в анонимные. По умолчанию так не делается
no_all_squash Обратна опции all_squash. Активизирована по умолчанию
root_squash Преобразует запросы от пользователя root (uid=0) в запросы от анонимного пользователя. Благодаря этой опции, пользователь root не сможет пользоваться своими правами (правами пользователя root) при доступе к файловой системе. Данная опция установлена по умолчанию
no_root_squash Отменяет опцию root_squash и позволяет пользователю root пользоваться своими правами (правами пользователя root) при доступе к сетевой файловой системе из клиентской системы
anonuid=UID anonguid=GIDЗадают идентификаторы анонимных пользователей

8.6.2. Настройка клиента NFS

В предыдущем разделе было рассмотрено, как настроить сетевую файловую систему NFS. Теперь давайте рассмотрим как можно подмонтировать имеющуюся сетевую файловую систему к какому-либо клиенту. Напоминаю, что если на предполагаемом NFS-клиенте не установлена поддержка NFS, то на нем необходимо установить пакет nfs-utils-0.2.1-2mdk.i586.rpm.

Итак, вернемся к настройке NFS-клиента. Ниже приведен пример того, как можно подмонтировать к нему сетевую файловую систему. Монтирование осуществляется с помощью команды mount:

mount –t nfs –o timeo=30 nfsserver.domain.com:/home/den /home/den/remote/

Прежде всего, нужно указать тип файловой системы –t nfs. Параметр timeo задает время ожидания, равное 3 секундам. Интересующая нас файловая система находится на компьютере nfsserver.domain.com и смонтирована там как /home/den. Мы же подмонтируем ее к своему домашнему каталогу /home/den/remote/.

При монтировании сетевых файловых систем доступны опции, указанные в табл. 8.8.

Если на вашем компьютере запущен сервер DNS и сервер NFS, проследите за тем, чтобы сервер DNS запускался после запуска сервиса NFS. При соблюдении данного условия гарантируется корректная работа сервера NFS. Точно такое же замечание я сделал и в главе 10, посвященной DNS. Чтобы вы не подумали, что я повторяюсь, объясню: лучше дважды упомянуть, чем забыть или не обратить внимание.

Опции команды mount для сетевых файловых систем Таблица 8.8

Опция Описание
bgВ том случае, если первая попытка монтирования файловой системы NFS окажется неудачной, она будет автоматически повторяться в фоновом режиме
fgВ том случае, если первая попытка монтирования файловой системы NFS окажется неудачной, она будет автоматически повторяться в приоритетном режиме. Данная опция установлена по умолчанию
soft Задержка при выполнении операции, связанной с файлом, расположенным в сетевой файловой системе NFS (возникает при сбое сервера или отключении сети), будет приводить к отправке приложению сообщения об ошибке ввода/вывода. И хотя некоторые приложения могут корректно обрабатывать такую ошибку, но большинство из них все-таки такой возможностью не обладают. Не рекомендуется использовать данную опцию, так как она может привести к появлению испорченных файлов и потере данных
hard Задержка при выполнении операции, связанной с файлом, расположенном в сетевой файловой системе NFS, будет приводить к приостановке, а затем возобновлению процесса с прерванного места. Таким образом, будут предприниматься повторные попытки выполнения операции
tcp Монтирует сетевую файловую систему с помощью протокола TCP, а не UDP
rsize=1024 Задает размер информации, пересылаемый при чтении файлов за один раз. По умолчанию этот размер равен 1024 байт
wsize=1024 Аналогично rsize, но для операции записи
noexecЗапрещает выполнение программ или сценариев в монтируемой файловой системе

Для того чтобы сетевая файловая система монтировалась автоматически при загрузке системы, нужно внести определенные записи в файл /etc/fstab. Например, такая запись для рассмотренного выше примера может иметь примерно следующий вид:

nfsserver.domain.com:/home/den /home/den/remote/ nfs bg,hard, rw 1 0

8.7. Поисковый сервер ht:/Dig