Linux Advanced Routing amp; Traffic Control HOWTO Bert Hubert, Thomas Graf, Gregory Maxwell, Remco van Mook, Martijn van Oosterhout, Paul B Schroeder, Jasper Spaans, Pedro Larroy Глава 1. Посвящение. Глава 2. Введение. 2.1. Ограничения и лицензионное соглашение 2.2. Предварительные сведения 2.3. Что может предложить вам linux 2.4. Дополнительные замечания 2.5. Доступ к CVS и передача обновлений 2.6. Список рассылки 2.7. Структура документа. Глава 3. Введение в iproute2 3.1. Почему iproute2? 3.2. Краткий обзор iproute2 3.3. Необходимые условия 3.4. Текущая конфигурация 3.4.1. Просмотр списка сетевых интерфейсов с помощью утилиты ip 3.4.2. Просмотр списка ip-адресов с помощью утилиты ip 3.4.3. Просмотр списка маршрутов с помощью утилиты ip 3.5. ARP Глава 4. Правила — база политик маршрутизации 4.1. Простая маршрутизация по источнику. 4.2. Маршрутизация через несколько каналов/провайдеров. 4.2.1. Раздельный доступ 4.2.2. Распределение нагрузки. Глава 5. GRE и другие тоннели. 5.1. Несколько общих замечаний о тоннелях: 5.2. Тоннелирование IP в IP. 5.3. GRE тоннели. 5.3.1. Тоннелирование IPV4. 5.3.2. Тоннелирование IPV6. 5.4. Тоннели неядерного уровня. Глава 6. Тоннелирование IPV6 при помощьи Cisco и/или 6bone. 6.1. Тоннелирование IPV6. Глава 7. IPSEC: безопасная передача данных протоколами ip через Интернет 7.1. Пример ручного конфигурирования безопасного соединения между двумя хостами. 7.2. Пример автоматического конфигурирования безопасного соединения между двумя хостами. 7.2.1. Теория. 7.2.2. Пример. 7.2.2.1. Известные проблемы и недостатки. 7.2.3. Автоматизация с использованием сертификатов X.509 7.2.3.1. Создание собственного сертификата x.509. 7.2.3.2. Настройка и запуск. 7.2.4. Как сохранить настройки туннеля в безопасности. 7.3. Туннели ipsec 7.4. Другое программное обеспечение для работы с ipsec 7.5. Взаимодействие с другими операционными системами через ipsec. 7.5.1. Windows. 7.5.2. Check Point VPN-1 NG Глава 8. Маршрутизация групповых сообщений. Глава 9. Дисциплины обработки очередей для управления пропускной способностью 9.1. Понятие очереди и дисциплины обработки 9.2. Простые бесклассовые дисцплины обработки очереди. 9.2.1. pfifo_fast 9.2.1.1. Параметры и использование 9.2.2. Token Bucket Filter 9.2.2.1. Параметры и использование 9.2.2.2. Пример конфигурации 9.2.3. Stochastic Fairness Queueing. 9.2.3.1. Параметры и использование 9.2.3.2. Пример конфигурации 9.3. Какие типы дисциплин нужно использовать. 9.4. Терминология 9.5. Классовые дисциплины обработки очередей. 9.5.1. Порядок движения пакетов внутри полноклассовых дисциплин и классов. 9.5.2. Элементы дисциплины: корень, дескриптор, родительские элементы и элементы одного уровня. 9.5.2.1. Как выполняется классификация с помощью фильтров. 9.5.2.2. Как выполняется извлечение пакетов из очереди. 9.5.3. Дисциплина PRIO. 9.5.3.1. Параметры и порядок использования дисциплины PRIO. 9.5.3.2. Пример конфигурации. 9.5.4. Дисциплина CBQ. 9.5.4.1. Шейпинг в CBQ. 9.5.4.2. Характеристики классов в CBQ. 9.5.4.3. Параметры CBQ, управляющие характером заимствования. 9.5.4.4. Пример конфигурирования. 9.5.4.5. Прочие параметры настройки CBQ: split и defmap. 9.5.5. Hierarchical Token Bucket 9.5.5.1. Пример конфигурации. 9.6. Классификация пакетов с помощью фильтров. 9.6.1. Ряд простых примеров фильтрации. 9.6.2. Наиболее употребимые способы фильтрации. 9.7. Intermediate queueing device. 9.7.1. Пример конфигурирования. Глава 10. Распределение нагрузки по нескольким интерфейсам. 10.1. Предостережение. 10.2. Другие возможности. Глава 11. netfilter и iproute – маркировка пакетов. Глава 12. Расширенная фильтрация. 12.1. Классификатор u32. 12.1.1. Селектор u32. 12.1.2. Селекторы общего назначения. 12.1.3. Селекторы специального назначения. 12.2. Классификатор route. 12.3. Фильтры-ограничители трафика. 12.3.1. Способы ограничения. 12.3.1.1. Оценочная функция в ядре (estimator). 12.3.1.2. Token Bucket Filter. 12.3.2. Действия в случае превышения ограничения. 12.3.3. Примеры. 12.4. Хеш-фильтры. 12.5. Фильтрация трафика IPv6. 12.5.1. Почему не работают tc-фильтры в IPv6? 12.5.2. Маркировка пакетов IPv6 средствами ip6tables. 12.5.3. Использование селектора u32 для пакетов IPv6. Глава 13. Параметры настройки сети в ядре. 13.1. Reverse Path Filtering. 13.2. Малоизвестные настройки. 13.2.1. Параметры настройки IPv4. 13.2.2. Параметры настройки устройств. 13.2.3. Параметры сетевых политик. 13.2.4. Параметры маршрутизации. Глава 14. Специализированные дисциплины управления очередями. 14.1. bfifo/pfifo 14.1.1. Параметры и порядок использования. 14.2. Алгоритм Кларка-Шенкера-Чанга. 14.3. DSMARK. 14.3.1. Введение. 14.3.2. Что такое Dsmark и с чем его "едят"? 14.3.3. Основные принципы. 14.3.4. Как работать с Dsmark. 14.3.5. Как работает SCH_DSMARK. 14.3.6. Фильтр TC_INDEX. 14.4. Ingress qdisc. 14.4.1. Параметры и порядок использования. 14.5. Random Early Detection (RED) 14.6. Generic Random Early Detection. 14.7. Эмуляция VC/ATM. 14.8. Weighted Round Robin (WRR). Глава 15. Решебник. 15.1. Запуск нескольких сайтов с различными sla. 15.2. Защита от syn flood. 15.3. Ограничение пропускной способности для icmp-пакетов, с целью предотвращения dDoS атак. 15.4. Управление приоритетами для трафика различных типов. 15.5. Прозрачное проксирование с помощью netfilter, iproute2, ipchains и squid. 15.5.1. Схема движения пакетов после настройки. 15.6. Решение проблемы с Path MTU Discovery путем настройки MTU. 15.6.1. Решение 15.7. Решение проблемы с Path MTU Discovery путем настройки MSS. 15.8. Формирователь трафика: Низкая задержка, максимальная производительность. 15.8.1. Почему все так сложно? 15.8.2. Формирователь трафика на базе CBQ. 15.8.3. Формирователь трафика на базе HTB. 15.9. Ограничение скорости для отдельного хоста или подсети. 15.10. Пример подключения локальной сети к Интернет через nat, с организацией qos. 15.10.1. Начнем с оптимизации пропускной способности. 15.10.2. Классификация пакетов. 15.10.3. Дополнительная оптимизация 15.10.4. Выполнение настроек во время загрузки системы. Глава 16. Построение мостов и псевдо-мостов с proxy arp. 16.1. Бриджинг и iptables. 16.2. Бриджинг и шейпинг. 16.3. Псевдо-мосты с проксированием ARP. 16.3.1. ARP и проксирование ARP 16.3.2. Реализация Глава 17. Динамическая маршрутизация — OSPF и BGP. 17.1. Настройка ospf в zebra 17.1.1. Предварительные условия. 17.1.2. Конфигурирование. 17.1.3. Запуск zebra 17.2. Настройка BGP4 с помощью ZEBRA. 17.2.1. Конфигурация сети (пример). 17.2.2. Конфигурирование (пример). 17.2.3. Проверка конфигурации. Глава 18. Прочие возможности. Глава 19. Рекомендуемая литература. Глава 20. Благодарности.
3.1. Почему iproute2? Большинство дистрибутивов Linux, как и большинство ОС UNIX, в настоящее время используют довольно древние утилиты arp, ifconfig и route. Пока что эти инструменты работают достаточно адекватно, но иногда, на ядрах Linux версии 2.2 и выше, они могут вести себя довольно неожиданно.
Сетевая подсистема, в ядрах 2.2 и выше, была полностью переписана. Новый сетевой код дал увеличение производительности и более высокие эксплуатационные характеристики, что делает Linux еще более привлекательным на рынке операционных систем.
Фактически, реализация сетевой подсистемы в Linux, выполняющая классификацию, маршрутизацию и фильтрацию, оказалась даже более полной, чем в специализированных маршрутизаторах, межсетевых экранах и других устройствах управления трафиком.
По мере появления новых разработок, они "наслаивались" поверх существующих реализаций в существующих операционных системах. Это постоянное наслаивание привело к тому, что код, решающий задачи управления сетевым трафиком, временами проявлял весьма странное поведение.
Эта, заново переписанная, реализация сетевой подсистемы позволила достичь таких характеристик, которые раньше были просто недоступны.