Приведите пример файла конфигурации сетевого протокола с ошибочной маршрутизацией и опишите методологию пошаговой отладки сетевой топологии, включая трассировку пакетов, анализ таблиц маршрутизации, MTU и проблем фрагментации
Пример файла конфигурации (Linux/netplan) с ошибочной маршрутизацией и комментариями, затем методология пошаговой отладки. Пример (netplan YAML) — в файле показана очевидная ошибка: дефолтный маршрут указывает на неверный next‑hop (интерфейс/шлюз не в той подсети) и задан коллизирующий статический маршрут: network: version: 222
renderer: networkd ethernets: eth0: addresses: [192.168.1.10/24192.168.1.10/24192.168.1.10/24] gateway4: 192.168.1.1192.168.1.1192.168.1.1 # ожидаемый интернет-шлюз nameservers: addresses: [8.8.8.88.8.8.88.8.8.8] eth1: addresses: [10.0.0.2/2410.0.0.2/2410.0.0.2/24] # ОШИБКА: ниже задан дефолтный маршрут через шлюз, который не доступен/не тот интерфейс routes: - to: 0.0.0.0/00.0.0.0/00.0.0.0/0
via: 192.168.2.1192.168.2.1192.168.2.1 # неверный next-hop (не в подсети ни eth0 ни eth1) metric: 100100100
- to: 192.168.0.0/16192.168.0.0/16192.168.0.0/16
via: 10.0.0.25410.0.0.25410.0.0.254 # конфликтующая / более широкая маршрутизация, перебивает ожидаемые более точные пути Комментарии к ошибкам: - Next‑hop 192.168.2.1192.168.2.1192.168.2.1 для дефолтного маршрута недостижим с указанных интерфейсов → пакеты «теряются». - Маршрут 192.168.0.0/16192.168.0.0/16192.168.0.0/16 через 10.0.0.25410.0.0.25410.0.0.254 может перехватывать трафик, который должен идти локально в 192.168.1.0/24192.168.1.0/24192.168.1.0/24, если приоритеты/маски заданы неправильно. Методология пошаговой отладки сетевой топологии 1) Чётко воспроизведите и опишите проблему - Что не работает (например, доступ к 8.8.8.88.8.8.88.8.8.8, HTTP к ресурсу, межсетевая связность). - С какого хоста/интерфейса начинаете тест. 2) Быстрая проверка интерфейсов и базовых параметров - Список интерфейсов и MTU: `ip link show` → `ip link show dev eth0` (проверьте поле mtu). - IP/маршруты на узле: `ip addr show`; `ip route show` и `ip rule show`. - Пример: `ip route show` должен показать корректный маршрут к сети назначения и дефолтный шлюз. 3) Трассировка маршрута (traceroute / tracepath) - Используйте `traceroute -n ` или `tracepath ` (tracepath показывает прибл. PMTU). - Признаки проблем: - Повторяющиеся IP в выводе → петля. - ROWNs с временем TTL exceeded / символы `*` → ICMP блокируется или хоп не отвечает. - На Windows: `tracert `. 4) Захват пакетов (tcpdump / Wireshark) - На исходнике: `tcpdump -n -s 0 -w /tmp/src.pcap host `; на промежуточных маршрутизаторах/целевом хосте — аналогично. - Смотрите: - Исходящие пакеты достигают ли интерфейса следующего хопа. - Ответы ICMP (например, `ICMP type 3 code 4` — "Fragmentation needed"). - TTL‑исчерпание (ICMP time exceeded) → маршрутизационные петли. - Команды примеры: `tcpdump -n -i eth0 host 192.168.1.20192.168.1.20192.168.1.20 and icmp` ; `tcpdump -n -i eth0 tcp and port 808080`. 5) Анализ таблицы маршрутизации и сопоставление next‑hop - Правило длиннейшего префикса: более точный маршрут (больший префикс) побеждает. - Пример: 192.168.1.0/24192.168.1.0/24192.168.1.0/24 предпочтительнее 192.168.0.0/16192.168.0.0/16192.168.0.0/16. - Проверьте, что указанный next‑hop достижим: `ping -c 333 `; `ip neigh show`. - Проверьте отсутствие конфликтующих/перекрывающих статических записей или политической маршрутизации (`ip rule` и таблицы `ip route show table `). 6) Поиск и локализация петель и «черных дыр» - Трассировка покажет место, где трафик теряется. - На маршрутизаторе включите временный дебаг (на Cisco: `debug ip routing`, `show ip route`, `show ip cef`), на Linux используйте tcpdump на входящих/исходящих интерфейсах. - Ищите ситуации, где пакет отправляется на next‑hop, но тот отвечает ICMP unreachable или не отвечает вовсе. 7) MTU и проблемы фрагментации - Проверка MTU интерфейсов: `ip link show dev eth0` → MTU === например 150015001500. - Расчёт максимальной полезной нагрузки для IPv4: полезная нагрузка ===MTU−20−8=MTU−28MTU - 20 - 8 = MTU - 28MTU−20−8=MTU−28 (где 202020 — IPv4 header, 888 — ICMP header для ping). - При MTU 150015001500 полезная нагрузка =1500−28=1472= 1500 - 28 = 1472=1500−28=1472. - Тест PMTU: `tracepath ` или `ping -M do -s ` на Linux: - Пример: `ping -M do -s 147214721472 ` — устанавливает DF и проверяет, пройдёт ли пакет без фрагментации. - Если получаете `Frag needed` (ICMP type 333 code 444), один из роутеров уменьшает MTU и отправляет уведомление, либо оно блокируется (PMTU blackhole). - Диагностика фрагментации: - Захват tcpdump покажет фрагменты IP (в заголовке фрагментация). - Системные счётчики: `netstat -s | grep -i fragment` или `cat /proc/net/snmp` — смотреть статистику фрагментации/ошибок. - Решения: - Разрешить/восстановить прохождение ICMP "fragmentation needed" через сеть. - Снизить MTU на интерфейсе (например до 140014001400 или 142014201420) либо настроить MSS clamping (на маршрутизаторах/файрволах). - В крайнем случае отключить PMTU (не рекомендуется) или настроить фрагментацию на отправителе. 8) Проверка политик/файрволов/NAT - Фаервол может блокировать ICMP соответственно мешая PMTU. - Проверить NAT и правила: `iptables -t nat -L -n -v`, `iptables -L -n -v` или соответствующие nftables/firewalld. - Обратите внимание на reverse path filtering (rp_filter): `sysctl net.ipv4.conf.all.rp_filter` — если включён строгий rp_filter, пакеты с асимметричной маршрутизацией могут дропаться. 9) Итеративное локальное исправление и валидация - Исправьте конфигурацию (удалите неверный дефолтный маршрут, поправьте next‑hop или маски). - Пример удаления/добавления временно: `ip route del 0.0.0.0/0 via 192.168.2.1` ; `ip route add 0.0.0.0/0 via 192.168.1.1`. - После изменения повторите шаги: traceroute, tcpdump, ping с DF, проверка таблиц. - Документируйте изменение и причину. 10) Когда привлекать L2/L3 инженеров или провайдера - Если трассировка до границы сети провайдера, но дальше трафик теряется → привлекайте провайдера и предоставьте: результат traceroute, tcpdump с метками времени, MTU‑тесты (ping -M do), описание изменённой конфигурации. Короткая шпаргалка команд (Linux) для отладки - ip адреса/интерфейсы: `ip addr show`, `ip link show` - таблицы маршрутизации: `ip route show`, `ip rule show`, `ip route show table all` - тест ICMP: `ping -c 333 `, `ping -M do -s 147214721472 ` - трассировка: `traceroute -n `, `tracepath ` - захват: `tcpdump -n -s 0 -w /tmp/cap.pcap host ` - MTU: `ip link show dev eth0` ; `tracepath` для pmtu - фаервол/NAT: `iptables -L -n -v`, `iptables -t nat -L -n -v` - статистика фрагментации: `netstat -s | grep -i fragment` Если нужно — могу разобрать конкретный реальный конфиг (вставьте текст) и пошагово указать, где ошибка и какие команды выполнить для проверки.
Пример (netplan YAML) — в файле показана очевидная ошибка: дефолтный маршрут указывает на неверный next‑hop (интерфейс/шлюз не в той подсети) и задан коллизирующий статический маршрут:
network:
version: 222 renderer: networkd
ethernets:
eth0:
addresses: [192.168.1.10/24192.168.1.10/24192.168.1.10/24]
gateway4: 192.168.1.1192.168.1.1192.168.1.1 # ожидаемый интернет-шлюз
nameservers:
addresses: [8.8.8.88.8.8.88.8.8.8]
eth1:
addresses: [10.0.0.2/2410.0.0.2/2410.0.0.2/24]
# ОШИБКА: ниже задан дефолтный маршрут через шлюз, который не доступен/не тот интерфейс
routes:
- to: 0.0.0.0/00.0.0.0/00.0.0.0/0 via: 192.168.2.1192.168.2.1192.168.2.1 # неверный next-hop (не в подсети ни eth0 ни eth1)
metric: 100100100 - to: 192.168.0.0/16192.168.0.0/16192.168.0.0/16 via: 10.0.0.25410.0.0.25410.0.0.254 # конфликтующая / более широкая маршрутизация, перебивает ожидаемые более точные пути
Комментарии к ошибкам:
- Next‑hop 192.168.2.1192.168.2.1192.168.2.1 для дефолтного маршрута недостижим с указанных интерфейсов → пакеты «теряются».
- Маршрут 192.168.0.0/16192.168.0.0/16192.168.0.0/16 через 10.0.0.25410.0.0.25410.0.0.254 может перехватывать трафик, который должен идти локально в 192.168.1.0/24192.168.1.0/24192.168.1.0/24, если приоритеты/маски заданы неправильно.
Методология пошаговой отладки сетевой топологии
1) Чётко воспроизведите и опишите проблему
- Что не работает (например, доступ к 8.8.8.88.8.8.88.8.8.8, HTTP к ресурсу, межсетевая связность).
- С какого хоста/интерфейса начинаете тест.
2) Быстрая проверка интерфейсов и базовых параметров
- Список интерфейсов и MTU: `ip link show` → `ip link show dev eth0` (проверьте поле mtu).
- IP/маршруты на узле: `ip addr show`; `ip route show` и `ip rule show`.
- Пример: `ip route show` должен показать корректный маршрут к сети назначения и дефолтный шлюз.
3) Трассировка маршрута (traceroute / tracepath)
- Используйте `traceroute -n ` или `tracepath ` (tracepath показывает прибл. PMTU).
- Признаки проблем:
- Повторяющиеся IP в выводе → петля.
- ROWNs с временем TTL exceeded / символы `*` → ICMP блокируется или хоп не отвечает.
- На Windows: `tracert `.
4) Захват пакетов (tcpdump / Wireshark)
- На исходнике: `tcpdump -n -s 0 -w /tmp/src.pcap host `; на промежуточных маршрутизаторах/целевом хосте — аналогично.
- Смотрите:
- Исходящие пакеты достигают ли интерфейса следующего хопа.
- Ответы ICMP (например, `ICMP type 3 code 4` — "Fragmentation needed").
- TTL‑исчерпание (ICMP time exceeded) → маршрутизационные петли.
- Команды примеры: `tcpdump -n -i eth0 host 192.168.1.20192.168.1.20192.168.1.20 and icmp` ; `tcpdump -n -i eth0 tcp and port 808080`.
5) Анализ таблицы маршрутизации и сопоставление next‑hop
- Правило длиннейшего префикса: более точный маршрут (больший префикс) побеждает.
- Пример: 192.168.1.0/24192.168.1.0/24192.168.1.0/24 предпочтительнее 192.168.0.0/16192.168.0.0/16192.168.0.0/16.
- Проверьте, что указанный next‑hop достижим: `ping -c 333 `; `ip neigh show`.
- Проверьте отсутствие конфликтующих/перекрывающих статических записей или политической маршрутизации (`ip rule` и таблицы `ip route show table `).
6) Поиск и локализация петель и «черных дыр»
- Трассировка покажет место, где трафик теряется.
- На маршрутизаторе включите временный дебаг (на Cisco: `debug ip routing`, `show ip route`, `show ip cef`), на Linux используйте tcpdump на входящих/исходящих интерфейсах.
- Ищите ситуации, где пакет отправляется на next‑hop, но тот отвечает ICMP unreachable или не отвечает вовсе.
7) MTU и проблемы фрагментации
- Проверка MTU интерфейсов: `ip link show dev eth0` → MTU === например 150015001500.
- Расчёт максимальной полезной нагрузки для IPv4: полезная нагрузка === MTU−20−8=MTU−28MTU - 20 - 8 = MTU - 28MTU−20−8=MTU−28 (где 202020 — IPv4 header, 888 — ICMP header для ping).
- При MTU 150015001500 полезная нагрузка =1500−28=1472= 1500 - 28 = 1472=1500−28=1472.
- Тест PMTU: `tracepath ` или `ping -M do -s ` на Linux:
- Пример: `ping -M do -s 147214721472 ` — устанавливает DF и проверяет, пройдёт ли пакет без фрагментации.
- Если получаете `Frag needed` (ICMP type 333 code 444), один из роутеров уменьшает MTU и отправляет уведомление, либо оно блокируется (PMTU blackhole).
- Диагностика фрагментации:
- Захват tcpdump покажет фрагменты IP (в заголовке фрагментация).
- Системные счётчики: `netstat -s | grep -i fragment` или `cat /proc/net/snmp` — смотреть статистику фрагментации/ошибок.
- Решения:
- Разрешить/восстановить прохождение ICMP "fragmentation needed" через сеть.
- Снизить MTU на интерфейсе (например до 140014001400 или 142014201420) либо настроить MSS clamping (на маршрутизаторах/файрволах).
- В крайнем случае отключить PMTU (не рекомендуется) или настроить фрагментацию на отправителе.
8) Проверка политик/файрволов/NAT
- Фаервол может блокировать ICMP соответственно мешая PMTU.
- Проверить NAT и правила: `iptables -t nat -L -n -v`, `iptables -L -n -v` или соответствующие nftables/firewalld.
- Обратите внимание на reverse path filtering (rp_filter): `sysctl net.ipv4.conf.all.rp_filter` — если включён строгий rp_filter, пакеты с асимметричной маршрутизацией могут дропаться.
9) Итеративное локальное исправление и валидация
- Исправьте конфигурацию (удалите неверный дефолтный маршрут, поправьте next‑hop или маски).
- Пример удаления/добавления временно: `ip route del 0.0.0.0/0 via 192.168.2.1` ; `ip route add 0.0.0.0/0 via 192.168.1.1`.
- После изменения повторите шаги: traceroute, tcpdump, ping с DF, проверка таблиц.
- Документируйте изменение и причину.
10) Когда привлекать L2/L3 инженеров или провайдера
- Если трассировка до границы сети провайдера, но дальше трафик теряется → привлекайте провайдера и предоставьте: результат traceroute, tcpdump с метками времени, MTU‑тесты (ping -M do), описание изменённой конфигурации.
Короткая шпаргалка команд (Linux) для отладки
- ip адреса/интерфейсы: `ip addr show`, `ip link show`
- таблицы маршрутизации: `ip route show`, `ip rule show`, `ip route show table all`
- тест ICMP: `ping -c 333 `, `ping -M do -s 147214721472 `
- трассировка: `traceroute -n `, `tracepath `
- захват: `tcpdump -n -s 0 -w /tmp/cap.pcap host `
- MTU: `ip link show dev eth0` ; `tracepath` для pmtu
- фаервол/NAT: `iptables -L -n -v`, `iptables -t nat -L -n -v`
- статистика фрагментации: `netstat -s | grep -i fragment`
Если нужно — могу разобрать конкретный реальный конфиг (вставьте текст) и пошагово указать, где ошибка и какие команды выполнить для проверки.