книги хакеры / журнал хакер / 117_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
|
|
|
|
|
|
C |
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
||||||
|
- |
|
|
|
|
d |
|
|
|
|
- |
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
i |
|
|
|
|
F |
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
o |
|
|
P |
D |
|
|
|
|
|
|
|
o |
||
|
|
|
NOW! |
r |
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
|
ХАКЕР.PRO |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
to>>BUY |
|
|
|
|
|
|
|
to BUY |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
m |
|
|
w |
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
o |
|
|
w Click |
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
.c |
|
|
|
|
. |
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
e |
|
|
|
|
|
p |
df |
|
|
|
e |
|
||||
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Сергей «grinder» Яремчук |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/ grinder@ua.fm / |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сетевое |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
граффити |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
ИнтересныевозможностисетевойподсистемыNetgraph |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
Стандартные настройки сети в FreeBSD обычно не вызывают особых про- |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
блем. В интернете полно документации, процесс конфигурирования описан |
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
вдоль и поперек. Но при объединении нескольких сетей в одну, подсчете |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
трафика и балансировке нагрузки приходится изрядно попотеть. К счастью, |
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
есть элегантный выход — использовать netgraph. |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
1996 — 2008 |
большинство операций выполняется на уровне ядра системы и, тем самым, |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
Сетевая подсистема netgraph была создана в 1996 году Джулианом Элис- |
повышается скорость работы. |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
чером и Арчи Коббсом, как попытка исправить ограниченную поддержку |
Несмотря на то, что сегодня насчитывается уже шесть десятков узлов, |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
некоторого оборудования и протоколов в FreeBSD. Первые варианты были |
нормальная документация по использованию netgraph отсутствует. Можно |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
доступны в специальной версии FreeBSD 2.2, собираемой для компании |
отметить несколько устаревший документ «AllaboutNetgraph» (русский |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
Whistle InterJet, а дебют в основном дереве состоялся в FreeBSD 3.4. Сегод- |
перевод находится по адресу citrin.ru/daemonnews/netgraph.html), напи- |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
ня netgraph — это часть ядра ОС. Основная идея подсистемы — модульность |
санный разработчиками. В нем рассказано об общих принципах работы и |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
и комбинация простых инструментов для реализации более сложного |
дано несколько примеров, но его чтение хоть и дает некоторое понимание |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
решения. |
процесса, в конкретной ситуации помочь не сможет. В итоге остается |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
Netgraph строится на взаимодействии узлов (nodes), которые посредством |
справочная страница netgraph(4) и связанные с ним man’ы, описывающие |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
крючков (hooks) создают пару захвата (одну для каждого узла). Крючок |
особенности узлов, плюс несколько примеров в /usr/share/examples/ |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
узла формируется в момент связывания и определяет, как узел может |
netgraph. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
быть подключен. Данные идут в двух направлениях вдоль ребер (edges) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
от узла к узлу. Когда узел получает пакет данных, он его обрабатывает и |
Поддержка ядром |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
затем отправляет другому узлу. Узел может быть источником/потребителем |
Как правило, специально включать поддержку netgraph в ядре не требу- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
данных, например, если он связан с аппаратной частью, или может просто |
ется. Все необходимое доступно в виде модулей ( в чем можно убедиться |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
добавлять/удалять заголовки, выполнять мультиплексирование и т.п. |
во время работы того же MPD при помощи команды/sbin/kldstat). |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
Поначалу количество узлов было небольшим, но с каждой новой верси- |
Просмотреть все имеющиеся KLD-модули узлов можно, введя команду: |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
ей их количество увеличивалось. Для FreeBSD 6.х уже были доступны |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
модули, обеспечивающие поддержку: PPPoE, ATM, ISDN, Bluetooth, HDLC, |
# ls /boot/kernel/ng_*.ko |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
EtherChannel, Frame Relay, L2TP и др. Система построена так, что добавить |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
новый модуль очень легко. В FreeBSD 7.0 появились новые узлы: ng_car |
Сюда же относится модуль netgraph.ko, который является основным. |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
(алгоритмы ограничения трафика и rate-лимитов), ng_deflate (поддержка |
При пересборке ядра следует включить группу параметров: |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
Deflate сжатия для PPP) и ng_pred1 (Predictor-1 сжатие для PPP). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
Многие программы завязаны на netgraph. Например, реализация PPP для |
# grep NETGRAPH /usr/src/sys/conf/NOTES |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
FreeBSDMPD(mpd.sf.net) использует интерфейс netgraph, благодаря чему |
options |
NETGRAPH |
# поддержка netgraph |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
140 |
|
|
xàêåð 09 /117/ 08 |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|