Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #87, МАРТ 2006 г.

Нарезаем трафик ломтиками

Andrey Matveev

Хакер, номер #087, стр. 087-130-2


Вторая реализация - pppoe(4) - появилась относительно недавно (в версии 3.7), выполнена в виде драйвера и работает на уровне ядра. К ее преимуществам стоит отнести: скорость работы, существенно меньшую нагрузку на процессор, простоту настройки и автоматическое создание соединений при загрузке системы. Так что отличия в использовании довольно существенные. Взвесив все за и против, резонно будет остановить свой выбор на in-kernel pppoe.

Первым делом нужно убедиться, что псевдоустройство pppoe находится в боевой готовности:

% ifconfig -C

pppoe trunk vlan tun sl ppp lo gre gif carp bridge

В случае отрицательного ответа необходимо перекомпилировать ядро с включенной опцией:

pseudo-device pppoe 1 # PPP over Ethernet (RFC 2516)

Для настройки подключения к ADSL-провайдеру достаточно указать внешний сетевой интерфейс (vr0, файл /etc/hostname.vr0 можно даже не создавать), протокол опознавания (возможные варианты: pap, chap, none), имя пользователя (user) и пароль (password). Все! Разборки с динамически получаемыми IP-адресами и внесение необходимых записей в таблицу маршрутизации операционная система в ходе установки PPP-сессии берет на себя:

# vi /etc/hostname.pppoe0

pppoedev vr0

!/sbin/ifconfig vr0 up

!/usr/sbin/spppcontrol \$if myauthproto=chap myauthname=user \

myauthkey=password

!/sbin/ifconfig \$if inet 0.0.0.0 0.0.0.1 netmask 0xffffffff

!/sbin/route add default 0.0.0.1

up

После перезагрузки (shutdown -r now) на экране и в /var/log/messages можно увидеть сообщения ядра, извещающие об успешной настройке PPPoE-соединения:

pppoe0: phase establish

pppoe0: phase authenticate

pppoe0: phase network

Проверить состояние псевдоинтерфейса можно с помощью следующей команды:

% ifconfig pppoe0

pppoe0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1492

dev: vr0 state: session

sid: 0x6a5 PADI retries: 2 PADR retries: 0 time: 01:30:59

groups: pppoe egress

inet 85.140.23.73 --> 0.0.0.1 netmask 0xffffffff

inet6 fe80::240:63ff:fedc:176c%pppoe0 -> prefixlen 64 scopeid 0x7

[вся правда о TCP-соединениях]

Чтобы понять, как грамотно, без снижения надежности и безопасности хоста в целом, выжать максимум из доступного интернет-канала, необходимо обратить пристальное внимание на процедуру установки TCP-соединения. Мы примем такие соединения за основной трафик, так как подавляющее большинство сетевых служб при работе использует именно TCP.

За счет системных вызовов - socket(2), bind(2) и listen(2) - сервер ожидает обращения на выделенном порту. Клиент отправляет пакет с установленным флагом SYN и сообщает серверу начальный порядковый номер данных, используемый для синхронизации. Сервер подтверждает получение клиентского сегмента (ACK) и отправляет в ответ свой собственный SYN, при этом увеличивая значение поля Acknowledgment Number в TCP-заголовке на единицу. Клиент, получив сегмент SYN от сервера, отправляет ему ACK, чтобы завершить трехэтапное рукопожатие. С этого момента TCP-соединение считается успешно настроенным, в передаваемых пакетах используется только ACK, а SYN-флаги больше не устанавливаются.

Назад на стр. 087-130-1  Содержание  Вперед на стр. 087-130-3