Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Пример реализации в FreeBSD
Денис Пеплин
Среди прочих задач системного администратора «написание скриптов» занимает немало места. Но существует эта задача не сама по себе, а в качестве средства автоматизации, призванного свести объем рутинной работы к минимуму. Вместе с тем сам язык, на котором пишутся скрипты (а в данной статье пойдет речь о Bourne shell), достаточно развит, чтобы перевести скрипты из разряда «набора команд» для оптимизации в разряд небольших программ, выполняющих в системе полезные функции. Более того, во многих случаях применение именно этого языка наиболее оправданно, поскольку позволяет упростить до предела изначально сложные задачи.
Довольно часто с помощью скриптов решается задача учета трафика. Они могут применяться не только для обработки выходных данных, но и для настройки параметров учета. В качестве примера можно привести программу ipa, которая считает трафик по правилам ipfw или ipf. Если количество правил невелико и меняется редко, то и сами правила и параметры настройки ipa несложно добавить вручную. Другое дело, если количество правил достигает нескольких десятков или больше, и они часто меняются.
Крайний случай такой ситуации – динамическое распределение IP-адресов. Причём это не обязательно dhcp: в условиях офиса не всегда за каждым пользователем закреплено отдельное рабочее место, и распределение адресов по пользователям приобретает некоторую динамичность.
В таких условиях в большинстве случаев наиболее целесообразным выглядит установка прокси-сервера (например, Squid+ntlm) и учет проходящего через него трафика. С точки зрения иерархии сети трафик проходит через прикладной уровень стека TCP/IP и подсчитывается именно там. Действительно, это самый очевидный способ: такое понятие, как «пользователь», появляется именно на прикладном уровне. На сетевом уровне никаких пользователей нет, есть лишь IP-адреса.
Именно поэтому попытки посчитать трафик по пользователям на сетевом уровне приносят лишь проблемы. Ведь адрес нельзя закрепить именно за пользователем, можно лишь закрепить его за отдельным компьютером и надеяться, что пользователь не пересядет на другое место, а на его место не сядет другой. Применение dhcp в этом случае также нужно исключить.
Не совсем стандартный путь – применение информации, полученной с прикладного уровня, для учета трафика на сетевом уровне. Объем этой информации должен быть минимален: необходимо лишь связать имя пользователя с IP-адресом компьютера, на котором он работает. Для первоначального конфигурирования потребуется список вида:
user1 192.168.0.11
user2 192.168.0.123
...
Для последующей динамической перенастройки достаточно зафиксировать факт входа в сеть (выхода из сети) и все те же имя и адрес. Если обозначить вход/выход знаками +/-, получится список вида:
+ user3 192.168.0.98
- user2 192.168.0.123
...
Его можно обобщить и на случай первоначального конфигурирования, тогда перед каждой строкой будет знак “+”.
Сам процесс динамического переконфигурирования системы учета трафика таким образом разделяется на два этапа: сбор информации согласно приведенному выше протоколу и собственно настройка системы учета. Наличие минимального одностороннего протокола не только позволяет разделить скрипт на две части, но даже в случае необходимости разнести эти части по разным серверам в случае, если программное обеспечение, регистрирующее вход пользователей, и шлюз во внешнюю сеть располагаются на разных серверах.
Разделение скрипта на части полезно еще и по соображениям сохранения простоты каждой из частей. Несмотря на то что скриптовый язык довольно развит, при написании скриптов рекомендуется придерживаться так называемого принципа KISS (Keep It Simple Stupid). Чем примитивнее скрипт, тем меньше вероятность того, что в нем допущены ошибки. Сложные конструкции не приветствуются.