Продвинутая конфигурация сети [205.2]

Рейтинг: 78.5% · 14 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Продвинутая конфигурация сети [205.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2] (вы здесь)
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 16. Продвинутая конфигурация сети [205.2]

Базовый ip addr и один шлюз по умолчанию хватает на простом хосте. Но как только сервер смотрит в две сети, агрегирует интерфейсы ради отказоустойчивости или вы ловите плавающий сбой в проде, нужен инструментарий посерьёзнее. В этом уроке разбираем policy routing с несколькими таблицами маршрутизации, мосты и туннели, агрегацию каналов (bonding и его наследника team) и набор для анализа трафика: tcpdump, tshark, netcat и socat. Всё через современный пакет iproute2, потому что ifconfig и route в 2026 - легаси, которое во многих дистрибутивах даже не ставится по умолчанию.

Изображение

Как это работает

Ядро Linux принимает решение о маршруте не по одной таблице, а по набору правил (ip rule). Каждый пакет прогоняется сверху вниз по списку правил, и первое подходящее правило указывает, в какой таблице маршрутизации искать маршрут. По умолчанию есть три таблицы: local (приоритет 0, локальные и широковещательные адреса, трогать нельзя), main (приоритет 32766, ваши обычные маршруты) и default (приоритет 32767). Это и есть policy routing - маршрут выбирается не только по адресу назначения, но и по источнику, метке, интерфейсу.

Зачем это надо. Классика - сервер с двумя провайдерами. Ответ на пакет, пришедший через провайдера B, должен уйти обратно через B, иначе провайдер с проверкой обратного пути (reverse path filter) его выкинет. Решается двумя дополнительными таблицами и правилами by source address.

Мост (bridge) - это виртуальный коммутатор второго уровня внутри ядра. Он объединяет интерфейсы в один широковещательный домен, обучается MAC-адресам и форвардит кадры. Основа сети контейнеров и виртуалок: docker0, virbr0 - это всё бриджи.

Агрегация каналов объединяет несколько физических NIC в один логический ради пропускной способности или резерва. Старый механизм bonding живёт в модуле ядра и настраивается через драйвер. Более новый teaming вынес логику в userspace-демон teamd, что гибче, но в энтерпрайзе bonding по-прежнему доминирует, и LACP (802.3ad) - стандарт для связки с управляемым коммутатором.

Команды и примеры

Policy routing для двух аплинков. Создаём именованные таблицы в /etc/iproute2/rt_tables, затем наполняем их и навешиваем правила.

Код: Выделить всё

# справочник таблиц (добавить строки)
echo "100 isp1" >> /etc/iproute2/rt_tables
echo "200 isp2" >> /etc/iproute2/rt_tables

# маршрут по умолчанию в каждой таблице
ip route add default via 203.0.113.1 dev eth0 table isp1
ip route add default via 198.51.100.1 dev eth1 table isp2

# трафик с адреса eth0 уходит через isp1, с eth1 - через isp2
ip rule add from 203.0.113.10 table isp1
ip rule add from 198.51.100.10 table isp2

ip rule show          # порядок и приоритеты правил
ip route show table isp1
ip route get 8.8.8.8 from 198.51.100.10   # проверка решения ядра
Команда ip route get бесценна для отладки - она показывает, какой реально маршрут выберет ядро для конкретного пакета.

Мост через iproute2 (то же делает nmcli в NetworkManager-средах RHEL/Ubuntu):

Код: Выделить всё

ip link add br0 type bridge
ip link set eth0 master br0
ip link set br0 up
bridge link show       # члены моста
bridge fdb show        # таблица выученных MAC

# вариант через NetworkManager (RHEL 10 / Ubuntu 24.04)
nmcli con add type bridge ifname br0
nmcli con add type bridge-slave ifname eth0 master br0
Bonding с LACP. Модуль bonding принимает параметры режима. mode=4 - это 802.3ad/LACP.

Код: Выделить всё

ip link add bond0 type bond mode 802.3ad miimon 100
ip link set eth0 down && ip link set eth0 master bond0
ip link set eth1 down && ip link set eth1 master bond0
ip link set bond0 up
cat /proc/net/bonding/bond0    # состояние, активные слейвы, LACP
Туннель GRE для связи двух площадок поверх интернета:

Код: Выделить всё

ip tunnel add gre1 mode gre remote 198.51.100.5 local 203.0.113.10 ttl 255
ip addr add 10.10.0.1/30 dev gre1
ip link set gre1 up
Анализ трафика. tcpdump с фильтрами BPF - первый инструмент. Установка: в Debian/Ubuntu apt install tcpdump, в RHEL/Fedora dnf install tcpdump.

Код: Выделить всё

tcpdump -i eth0 -nn 'tcp port 443 and host 8.8.8.8'   # -nn без резолва имён и портов
tcpdump -i eth0 -w cap.pcap 'port 53'                  # запись в файл
tcpdump -r cap.pcap -A 'tcp port 80'                   # чтение, -A текст
tshark -i eth0 -f "udp port 123" -Y "ntp.flags.mode == 4"  # -f захват, -Y отображение
Учитесь различать фильтры захвата (синтаксис BPF, ключ -f, экономят CPU и диск) и фильтры отображения Wireshark/tshark (ключ -Y, богаче, но работают уже над захваченным).

netcat (ncat в RHEL из nmap-ncat, netcat-openbsd в Debian) и socat для отладки сокетов:

Код: Выделить всё

nc -lvnp 9000                 # слушатель на порту 9000
nc -vz host 22                # проверка доступности порта, -z сканер
socat -d -d TCP-LISTEN:8443,fork,reuseaddr TCP:backend:443   # TCP-проброс
socat OPENSSL:host:443,verify=0 -                            # ручной TLS-клиент
socat умнее nc: умеет TLS, UNIX-сокеты, PTY, форкать соединения - швейцарский нож для прокси и отладки.

Частые грабли
  • Ручные ip route и ip rule живут до перезагрузки. Для постоянства нужен NetworkManager (nmcli/keyfile), systemd-networkd или netplan в Ubuntu - голый ip их не сохраняет.
  • Несимметричная маршрутизация при двух аплинках: забыли таблицу для исходящего, и rp_filter (/proc/sys/net/ipv4/conf/*/rp_filter) молча режет ответы. Симптом - пакеты приходят, ответы не уходят.
  • Порядок ip rule важен: правила проверяются по возрастанию приоритета, первое совпадение выигрывает. Неудачный приоритет - и ваше правило никогда не сработает.
  • Bonding mode=4 требует настройки LACP и на коммутаторе. Без согласования получите либо отвал линка, либо петлю. Проверяйте /proc/net/bonding.
  • tcpdump без -n тормозит и сам генерит DNS-трафик при резолве - в захвате видите лишний шум. Всегда -nn при отладке.
  • Фильтр захвата и фильтр отображения - разный синтаксис. tcp.port в -f не сработает, это синтаксис Wireshark; в BPF пишут tcp port.
  • nc -e (выполнить команду) вырезан в большинстве сборок как дыра в безопасности. Для шеллов используйте socat с EXEC.
Мини-лаба
  • На стенде с двумя интерфейсами заведите таблицы isp1 и isp2 в rt_tables, добавьте в каждую default-маршрут.
  • Навесьте ip rule from по адресу источника каждого интерфейса и проверьте выбор через ip route get ... from ...
  • Создайте мост br0, добавьте в него один интерфейс, посмотрите bridge fdb show после пинга.
  • Поднимите bond0 в режиме active-backup (mode=1) из двух интерфейсов, погасите активный слейв и убедитесь по /proc/net/bonding, что трафик перешёл на второй.
  • Запустите на одном хосте nc -lvnp 9000, с другого подключитесь nc -vz и nc для передачи строки.
  • Снимите tcpdump -i ... -w lab.pcap на этом порту, откройте файл через tshark и примените фильтр отображения tcp.port == 9000.
Контрольные вопросы
  • В каком порядке ядро проверяет правила ip rule и что определяет приоритет таблиц local, main, default?
  • Чем фильтр захвата tcpdump (-f / BPF) принципиально отличается от фильтра отображения Wireshark (-Y) и почему первый экономит ресурсы?
  • Какой режим bonding соответствует LACP, что нужно настроить на стороне коммутатора и где смотреть состояние агрегата?
  • Зачем при двух провайдерах нужны отдельные таблицы маршрутизации и как с этим связан rp_filter?
  • Какие возможности socat недоступны классическому netcat и в каком случае это решает задачу?
  • Чем мост (bridge) отличается от обычной маршрутизации и на каком уровне модели OSI он работает?
👍6 ❤️3 🔥2 😄 🤔1
Аватара пользователя
campro
Сообщения: 1
Зарегистрирован: 14 май 2026, 17:19

Re: Продвинутая конфигурация сети [205.2]

Сообщение campro »

А ip route get реально показывает выбор ядра или просто что в main лежит? Хочу проверять правила до того как трафик пойдет, а не ловить молчаливый дроп в проде.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
kowalsk
Сообщения: 1
Зарегистрирован: 24 май 2026, 07:53

Re: Продвинутая конфигурация сети [205.2]

Сообщение kowalsk »

У меня на двух аплинках ответы уходили только через один провайдер, пока не выключил rp_filter в strict. Поставил отдельные таблицы по source - заработало симметрично, спасибо что разжевали почему.
👍3 ❤️ 🔥 😄 🤔1
Ответить
← Предыдущая глава
Базовая конфигурация сети [205.1]
Следующая глава →
Диагностика сетевых проблем [205.3]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость