Linux Advanced Routing & Traffic Control HOWTO
Шрифт:
А теперь поясним некоторые моменты. Заданной по-умолчанию хеш-таблице присвоен идентификатор 800:: и вся фильтрация начинается отсюда. Затем выбирается IP-адрес отправителя, который находится в 12, 13, 14 и 15 байтах в IP-заголовке и указывается, что нас интересует только последний байт. После чего трафик передается
Все это выглядит довольно сложным, но действительно работает и дает ошеломляющую производительность. Обратите внимание, этот пример может быть оптимизирован еще больше и сведен к идеальному случаю, когда каждая цепочка содержит 1 фильтр!
12.5. Фильтрация трафика IPv6.
12.5.1. Почему не работают tc-фильтры в IPv6?
Дело в том, что в ядре Linux, модель маршрутизации и адресации IPv4 (замечательные особенности которой описывает этот HOWTO) строилась на основе Базы Политик Маршрутизации (RPDB — Routing Policy Database). К сожалению, модель IPv6 в Linux была реализована совершенно иным образом. Хотя они используют совместно некоторые средства, но основа основ — RPDB, не принимает участия в адресации и маршрутизации IPv6.
Надеюсь, что такое положение дел наверняка изменится, надо только подождать.
FIXME: : Ждем ваших замечаний и предложений по этому поводу, может кто-то работает над этим?
12.5.2. Маркировка пакетов IPv6 средствами ip6tables.
ip6tables имеет возможность пометить пакеты:
Но тем не менее, это крайне слабое утешение, поскольку пакет пройдет мимо RPDB.
12.5.3. Использование селектора u32 для пакетов IPv6.
Для передачи по сетям IPv4, трафик IPv6 обычно инкапсулируется в SIT–туннель. За дополнительной информацией по созданию такого рода туннелей, обращайтесь к разделу Тоннелирование IPv6. Это позволяет выполнять фильтрацию IPv4-пакетов, которые, в качестве полезной нагрузки, несут пакеты IPv6.
Следующий фильтр отберет все пакеты IPv6, инкапсулированные в IPv4:
Продолжим в том же духе. Предположим, что пакеты IPv6 передаются по сети IPv4, и не имеют набора опций. Тогда, для обнаружения пакетов ICMPv6 можно использовать следующий фильтр. 0x3a (58) — Next-Header для ICMPv6.
Фильтрация по адресу получателя потребует от нас дополнительных усилий. Например, следующий
Эту же методику можно использовать для отбора по адресу подсети, например 2001:
Глава 13. Параметры настройки сети в ядре.
В ядре имеется масса параметров, которые могут быть изменены под различные нужды. Хотя, заданные по-умолчанию параметры удовлетворяют потребности в 99% случаев, но не зря же мы назвали это руководство Advanced HOWTO!
Очень интересные настройки вы найдете в /proc/sys/net , загляните туда. Конечно же, изначально не все тонкости будут описаны здесь, но мы работаем над этим.
Между прочим, значительная часть настроек описана в файле Documentation/filesystems/proc.txt, в дереве каталогов с исходными текстами ядра.
13.1. Reverse Path Filtering.
Reverse Path Filtering — Проверка Обратного Адреса, хотя это слишком вольный перевод термина, но мне он кажется наиболее близким по смыслу. прим. перев.
По-умолчанию, маршрутизаторы перенаправляют все подряд, даже пакеты, которые не принадлежат вашей сети. В качестве примера можно привести утечку локального трафика в Интернет. Если у вас имеется интерфейс с маршрутом к нему 195.96.96.0/24, то вы наверняка не ожидаете получить на него пакеты от 212.64.94.1.