Вопрос или проблема
Я провожу тестирование для сертификации 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, это сообщение должно отправляться в таких случаях, однако, в вашем случае оно не генерируется.
Вот несколько шагов, которые вы можете предпринять для устранения проблемы:
-
Проверка поддержки ICMPv6 в ядре: Убедитесь, что в скомпилированном ядре имеются все необходимые функции для обработки ICMPv6 сообщений. Часто возможные проблемы могут быть связаны с опцией конфигурации ядра. Вам нужно проверить, включены ли опции
CONFIG_IPV6
и связанные с ICMPv6. -
Проверка настроек sysctl: Хотя вы упомянули, что проверили
sysctl
, стоит убедиться в правильности параметров, управляющих ICMPv6. Обратите внимание на следующие параметры:net.ipv6.conf.all.accept_redirects
(должен быть установлен в 1)net.ipv6.conf.all.forwarding
(должен быть установлен в 1, если это необходимо)net.ipv6.conf.all.disable_ipv6
(должен быть установлен в 0)
-
Логирование ядра: Включите логирование ядра для получения дополнительной информации о происходящих событиях. Это можно сделать с помощью
dmesg
для просмотра сообщений, связанным с ICMPv6 в ядре. -
Тестирование с использованием других инструментов: Попробуйте использовать инструменты, такие как
ping6
,hping3
илиncat
, чтобы отправить echo-запросы с нужными параметрами. Это может помочь вам увидеть, как система реагирует на различные источники и типы сообщений. -
Дополнительные проверки: Если у вас есть возможность, посмотритесь на другие сборки Linux или дистрибутивы. Это поможет определить, является ли проблема специфичной для вашей сборки Yocto или ядра.
-
Изучение патчей и обновлений: Проверьте изменения в исходном коде ядра для вашей версии. Возможно, существуют известные проблемы с обработкой ICMPv6, которые решаются в более поздних патчах.
-
Консультация с сообществом: Поскольку вы используете сборку Yocto, возможно, стоит задать вопрос на форумах поддержки Yocto или в списках рассылки соответствующего сообщества. Возможно, кто-то уже сталкивался с аналогичными проблемами и знает решение.
Если после выполнения всех этих шагов проблема не решится, возможно, стоит рассмотреть возможность отладки с использованием инструментов, таких как Wireshark
, для захвата и анализа пакетов на более низком уровне. Это может дать более детальную информацию о том, что происходит с сетевыми сообщениями на вашем оборудовании.