Денис Колисниченко - Linux-сервер своими руками Страница 57
Денис Колисниченко - Linux-сервер своими руками читать онлайн бесплатно
Вот практически и все. Правда, еще можно добавить пару незначительных опций:
# определяем широковещательный адрес
option broadcast-address 192.168.2.255;
# включаем IP-Forwarding
option ip-forwarding on;
# можно добавить глобальную опцию:
server-identifier server.domain.ua;
Как обычно, дополнительную информацию можно получить, введя команду man dhcpd.conf. При настройке клиентов Windows следует активизировать режим «Получить IP-адрес автоматически» в свойствах TCP/IP (рис. 8.5). А при настройке Linux с помощью конфигуратора netconf — включить режим DHCP (см. рис. 8.6).
Рис.8.5. Настройка Windows-клиента
Рис. 8.6. Настройка Linux-клиента
Протокол DHCP подробно описан в RFC 1533, 1534, 1541, 1542, а протокол ВООТР описан в rfc 1532. Окончательный вариант конфигурационного файла приведен в листинге 8.9.
Листинг 8.9. Конфигурационный файл /etc/dhcpd.conf (окончательный вариант)# Подсеть 192.168.1.0, маска сети 255.255.255.0
subnet 192.168.1.0 netmask 255.255.255.0 {
# маршрутизатор по умолчанию
option routers 192.168.1.1;
# маска подсети 255.255.255.0
option subnet-mask 255.255.255.0;
# установка домена по умолчанию и сервера NIS, если таковой используется
option nis-domain "domain.ua";
option domain-name "domain.ua";
# задание широковещательного адреса
option broadcast-address 192.168.2.255;
# включение IP-Forwarding
option ip-forwarding on;
# глобальная опция server-identifier:
server-identifier server.domain.ua;
# адрес DNS-сервера, который будут использовать клиенты
option domain-name-servers 192.168.1.1;
# диапазон адресов для клиентов
# 192.168.1.50-192.168.1.250 range
192.168.1.10 192.168.1.254;
# сказать клиентам, чтобы отдали адрес через 21600 секунд (6 часов)
# после получения адреса
default-lease-time 21600;
# забрать адрес самому через 28800 секунд (8 часов)
max-lease-time 28800;
option netbios-name-servers 192.168.1.1;
option netbios-dd-server 192.168.1.1;
option netbios-node-type 8;
# описание трех клиентов (dhcp50, dhcp51, dhcp52)
# и их аппаратных адресов
host dhcp50 {
hardware ethernet 00:40:C7:34:90:1E;
# обратите внимание на то, что вы должны использовать IP-адрес
# из указанного ранее диапазона адресов 192.168.1.50-250.
fixed-address 192.168.1.50;
}
host dhcp51 {
hardware ethernet 00:40:C7:34:90:1F;
fixed-address 192.168.1.51;
}
host dhcp52 {
hardware ethernet 00:40:C7:34:90:2A;
fixed-address 192.168.1.52;
}
}
8.5. Подсчет трафика. Программа MRTG
Эта тема является одной из наиболее интересных. Хочу сразу заметить, что существует такое множество способов считать трафик, что можно было бы написать не одну книгу, рассматривая все из них.
Самым простым способом является подсчет с помощью программы ifconfig. Чтобы понять как все работает, введите команду:
cat /proc/net/dev
В результате вы увидите строки, изображенные на рис. 8.7. Для наглядности я ввел эту команду в ОС Linux со старым ядром, так как в новом ядре появились новые опции учета и они не умещаются в окне терминала, а при переносе строк теряется наглядность примера.
Рис. 8.7. Команда cat /proc/net/dev
Файл /proc/net/dev содержит информацию о работе сетевых устройств. На этом и основывается данный метод подсчета трафика. Для самого же подсчета удобнее использовать нижеприведенный сценарий stat:
#!/bin/sh
/bin/grep "$1" /proc/net/dev | /bin/awk –F ":" '{ print $2 }' | \
/bin/awk '{ print "In: " $1 "\nOut: " $9 ; }'
Символ \ используется как перенос в обычном тексте. Его обычно используют для повышения удобочитаемости сценариев. Интерпретатором он будет воспринят как пустой символ.
Скопируйте данный сценарий в каталог /usr/bin и сделайте его выполнимым:
ср ./stat /usr/bin
chmod 755 /bin/stat
Использовать данный сценарий можно так:
/bin/stat eth0
где eth0 — это нужный вам интерфейс.
Можно было бы добавить проверку на правильность указания сценариев, но это не касается самого подсчета трафика. Попробуйте пропинговать интерфейс eth0 по его IP-адресу и снова выполните сценарий.
Честно говоря, это самый простой способ и, скорее всего, для вас он окажется совершенно бесполезным. Я привел его лишь в демонстрационных целях — это как своеобразная программка "Hello, world!".
Теперь перейдем к более традиционному методу. В данном методе для подсчета трафика используется IpChains. Чтобы глубже понимать, о чем пойдет речь, я рекомендую прочитать сначала гл. 14, а потом вернуться к этой главе. Думаю, читатель меня простит за это неудобство — так уж получилось. Впрочем, я постараюсь объяснить все как можно подробнее и в этом разделе, во всяком случае, все должно быть понятно, а за разъяснениями опций ipchains читатель может обратиться к гл. 14.
Предлагаемый мною способ является не самым лучшим, но с его помощью я надеюсь подтолкнуть читателя на создание своего фундаментального продукта для подсчета трафика. Для того чтобы данный способ работал, необходимо включить опцию IP: accounting в конфигураторе ядра и перекомпилировать его. В большинстве случаев эта опция уже включена. Затем нужно установить IpChains. Когда все будет готово, установите следующее правило IpChains:
ipchains –A output –d AAA.ААА.АAА.ААА –j ACCEPT
Данное правило нужно установить для каждого адреса, учет которого вы хотите вести. А просмотреть статистику можно с помощью команды:
ipchains –L –v
Chain input (policy ACCEPT: 4195746 packets, 1765818402 bytes):
Chain forward (policy ACCEPT: 142999 packets, 29941516 bytes) :
Chain output (policy ACCEPT: 4182597 packets, 1309541595 bytes) :
pkts bytes target prot opt tosa tosx ifname source destination
4 308 ACCEPT all 0xFF 0x00 any anywhere AAA.AAA.AAA.AAA
Как вы заметили, это не полный листинг. Я выбрал основное, пропустив поля mark, outsize и ports, которые не представляют для нас интереса.
Здесь видно, что клиент ААА.ААА.ААА.ААА получил 308 байт или 4 пакета. В данном случае в качестве пакетов вступали пакеты протокола ICMP. Правило установлено таким образом, что учет ведется по всем интерфейсам (ifname=any), из любого источника, то есть адреса (source=anywhere) и учитываются все протоколы (prot=all). Аналогично можно установить правило для учета данных, полученных от клиента. Только в этом случае необходимо будет использовать цепочку input. Вам нужно установить это правило, потому что обычно считается не только исходящий, но и входящий трафик клиента, если ваш сервер, например, выступает в роли шлюза.
Можно также использовать данные, взятые из аппаратного маршрутизатора Cisco. Кстати, через Cisco работает популярная программа tacacs+. Эта программа используется для учета времени работы пользователей в системе. И именно эта программа используется рядом провайдеров при организации dialin-доступа. Программа доступна по адресу ftp.vsu.ru/pub/hardware/cisco/tacacs/tac+ia-0.96pre9.3.tar.gz
Очень полезна также программа useripacct. Она позволяет узнать о трафике каждого пользователя.
Считать трафик можно также программой trafshow, которую вы найдете на прилагаемом компакт-диске. Эта программа считает только локальный трафик (сколько байтов принял и передал данный компьютер и от кого он принял и кому передал). Поэтому, установив ее на шлюзе, можно вполне контролировать трафик всей сети (см. рис. 8.8). Кроме того, немного изменив исходный код trafshow, можно заставить ее отображать не только IP-адреса или доменные имена компьютеров вашей сети, но и МАС-адреса. Исходный код этой программки вы также найдете на компакт-диске.
Рис. 8.8. Программа trafshow
Как я уже писал, можно привести сотни способов учета трафика, а пользоваться вы все равно будете одним. Причем, в большинстве случаев, это будет способ, который вы «изобретете» сами, написав сценарий для обработки данных статистики.
К другим способам учета трафика можно отнести учет с использованием протокола SNMP. Именно по этому протоколу работает программа MRTG (http://www.switch.ch/misc/leinen/snmp/perl/). Программа MRTG предоставляет очень удобные средства для подсчета трафика: подсчет для всей сети и для отдельного узла, генерирование отчетов и диаграмм в формате HTML и многое другое.
Программа MRTG (The Multi Router Traffic Grapher) предназначена для мониторинга загрузки канала за сутки, неделю, месяц и год. Программа MRTG умеет рисовать красивые картинки в формате PNG, которые отображают состояние канала за определенный период времени.
Пример использования вы можете увидеть на сайте: http://www.stat.ee.ethz.ch/mrtg/
Для работы mrtgнам потребуется маршрутизатор, поддерживающий протокол SNMP. В этой же главе будет рассмотрен пример, позволяющий обойтись без маршрутизатора и вообще не использовать протокол SNMP. Общая конфигурация сети должна выглядеть примерно как на рис 8.9.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.