Почему Linux не отправляет сообщение о проблеме ICMP6

Вопрос или проблема

Я провожу тестирование для сертификации USGv6 на сборке Linux, созданной с использованием Yocto (версия дистрибутива Poky 5.0 – Scarthgap, ядро 6.6). Все необходимые тесты проходят, за исключением одного: запрос эха отправляется на тестовую систему с установленным значением заголовка 252 (неизвестно). Ожидается, что тестовая система НЕ отправит ответ на эхо (она этого не делает), а вместо этого отправит сообщение об ошибке параметра ICMP6 (тип ICMPV6_PARAMPROB с кодом ICMPV6_UNK_NEXTHDR) – но сообщение ICMP6 не отправляется. Это противоречит требованиям в разделе 2.2 RFC 8883. Нужно ли что-то настроить, чтобы отправить требуемое сообщение об ошибке ICMP6?

Я очистил ip6tables от всех правил, так что это не должно быть проблемой. Я также изучил различные свойства sysctl, которые можно настроить, но ни одно из них, похоже, не блокирует отправку сообщения ICMP6. Это единичный тест, поэтому мы далеки от каких-либо максимальных лимитов для сообщений. Tcpdump показывает, что запрос эха принимается тестируемой системой. Есть ли еще что-то, что я должен проверить?

Ответ или решение

Проблема, с которой вы сталкиваетесь, связана с тем, что ваша система на основе Linux не отправляет ICMPv6 сообщение о проблеме параметра при получении echo-запроса (ping) с неизвестным значением следующего заголовка (252). Согласно RFC 8883, это сообщение должно отправляться в таких случаях, однако, в вашем случае оно не генерируется.

Вот несколько шагов, которые вы можете предпринять для устранения проблемы:

  1. Проверка поддержки ICMPv6 в ядре: Убедитесь, что в скомпилированном ядре имеются все необходимые функции для обработки ICMPv6 сообщений. Часто возможные проблемы могут быть связаны с опцией конфигурации ядра. Вам нужно проверить, включены ли опции CONFIG_IPV6 и связанные с ICMPv6.

  2. Проверка настроек sysctl: Хотя вы упомянули, что проверили sysctl, стоит убедиться в правильности параметров, управляющих ICMPv6. Обратите внимание на следующие параметры:

    • net.ipv6.conf.all.accept_redirects (должен быть установлен в 1)
    • net.ipv6.conf.all.forwarding (должен быть установлен в 1, если это необходимо)
    • net.ipv6.conf.all.disable_ipv6 (должен быть установлен в 0)
  3. Логирование ядра: Включите логирование ядра для получения дополнительной информации о происходящих событиях. Это можно сделать с помощью dmesg для просмотра сообщений, связанным с ICMPv6 в ядре.

  4. Тестирование с использованием других инструментов: Попробуйте использовать инструменты, такие как ping6, hping3 или ncat, чтобы отправить echo-запросы с нужными параметрами. Это может помочь вам увидеть, как система реагирует на различные источники и типы сообщений.

  5. Дополнительные проверки: Если у вас есть возможность, посмотритесь на другие сборки Linux или дистрибутивы. Это поможет определить, является ли проблема специфичной для вашей сборки Yocto или ядра.

  6. Изучение патчей и обновлений: Проверьте изменения в исходном коде ядра для вашей версии. Возможно, существуют известные проблемы с обработкой ICMPv6, которые решаются в более поздних патчах.

  7. Консультация с сообществом: Поскольку вы используете сборку Yocto, возможно, стоит задать вопрос на форумах поддержки Yocto или в списках рассылки соответствующего сообщества. Возможно, кто-то уже сталкивался с аналогичными проблемами и знает решение.

Если после выполнения всех этих шагов проблема не решится, возможно, стоит рассмотреть возможность отладки с использованием инструментов, таких как Wireshark, для захвата и анализа пакетов на более низком уровне. Это может дать более детальную информацию о том, что происходит с сетевыми сообщениями на вашем оборудовании.

Оцените материал
Добавить комментарий

Капча загружается...