список правил iptables Внимание: Расширение CONNMARK не поддерживается, отсутствует модуль ядра?

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

Я использую образ ubuntu для запуска контейнера pod. И хочу использовать iptables для перехвата входящего трафика в sidecar.

Сейчас мы используем apt-get install iptables и получаем только iptables V1.8.

Тем не менее, у нас есть машины с ядром 3.10.x и 5.10.x в производственной среде. Поэтому мы должны использовать iptables legacy.

Вот проблема: при выводе правил мы получаем

Предупреждение: Расширение CONNMARK не поддерживается, отсутствует модуль ядра?
CONNMARK   all  --  anywhere             anywhere             CONNMARK save

На узле:

uname -r
3.10.0-957.12.1.el7.x86_64

cat /boot/config-3.10.0-957.12.1.el7.x86_64 |grep CONFIG_NETFILTER_XT_MATCH_CONNMARK
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m

iptables -V
iptables v1.4.21

И предупреждение отсутствует на узле, когда выполняется команда: iptables -t mangle -L

Внутри контейнера:

$ iptables -V
iptables v1.8.10 (legacy)
$ which iptables
/usr/sbin/iptables
$ ls -alh /usr/sbin/iptables
lrwxrwxrwx 1 root root 26 Apr  8  2024 /usr/sbin/iptables -> /etc/alternatives/iptables
$ ls -alh /etc/alternatives/iptables
lrwxrwxrwx 1 root root 25 Oct 23 17:55 /etc/alternatives/iptables -> /usr/sbin/iptables-legacy

Dockerfile


FROM --platform=amd64 ubuntu:latest
RUN apt-get update && apt-get install -y iptables
RUN update-alternatives --set iptables /usr/sbin/iptables-legacy 

Еще одна вещь: функция работает хорошо, кроме этого предупреждения.

И когда используем образ centos7 для выполнения той же работы, предупреждения также не видно, и версия iptables v1.4.21.

Итак, мой вопрос: откуда берется это предупреждение? Какой у него эффект?

PS: почему использование connmark — это другая история, не обсуждается здесь.

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

Сообщение об ошибке, которое вы получили:

Warning: Extension CONNMARK is not supported, missing kernel module?

указывает на то, что в текущем окружении для вашей версии iptables (v1.8.10 в контейнере на базе Ubuntu) отсутствует поддержка модуля CONNMARK, который, в свою очередь, был включен в ядро (в вашем случае 3.10.x). Важно отметить, что такая проблема может быть вызвана сочетанием следующих моментов.

Причины возникновения предупреждения

  1. Отсутствие модуля connmark в ядре:
    Ядро версии 3.10.x, которое вы используете на одном из ваших серверов, действительно имеет поддержку CONNMARK, но возможно, он не загружен или доступен в вашем окружении. Вы можете проверить это с помощью следующей команды:

    lsmod | grep connmark

    Если ничего не выводится, модуль не загружен, и вам, возможно, придется его загрузить:

    modprobe xt_connmark
  2. Использование разных версий iptables:
    Хотя вы работаете с iptables-legacy в контейнере, он может иметь ограничения по сравнению с современными версиями iptables, которые используют библиотеку nftables. Следовательно, команда может выдавать предупреждение о том, что не может найти необходимые расширения во время выполнения правила.

  3. Контекст выполнения:
    Поскольку вы упомянули, что все работает правильно, кроме этого предупреждения, следует отметить, что это предупреждение в данном случае может не повлиять на выполняемую функциональность, но стоит учитывать, что некоторые функциональные возможности CONNMARK могут быть недоступны.

Влияние предупреждения

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

  • Проверить наличие необходимых модулей и их работу в вашей сетевой конфигурации.
  • По возможности обновить ядро системы на более современную версию, чтобы использовать новейшие функции и расширения.

Что делать дальше

  1. Загрузка модуля connmark: Если он не загружен, загружайте его, как указано выше.
  2. Убедитесь, что контейнер работает с версиями, поддерживающими необходимые модули: Если используется старый контейнер с устаревшими версиями, рассмотрите возможность создания контейнера на основе более новых версий базового образа, в которых поддерживаются все нужные модули.
  3. Логи и диагностика: Ведите логирование всех ошибок и предупреждений, чтобы иметь возможность их анализировать в будущем.

Следование этим рекомендациям поможет вам избежать предупреждений и гарантирует, что ваша сеть вверх и работает стабильно.

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

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