ВМ не может пинговать шлюз в подсети, если включена безопасность порта.

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

Openstack 2023.2
ovn 23.09.3
ВМ с группой безопасности по умолчанию (разрешено ANY на исходящих) не может пинговать шлюз в подсети, однако ARP в порядке, она может отправлять трафик через шлюз и может пинговать внешние ресурсы и другие хосты в подсети. Без портовой безопасности она может нормально пинговать шлюз.

Согласно трассировке, я вижу, что на последнем переходе нет действия выхода, и стоит отметка ct_mark.blocked = 1

egress(dp="int-net", inport="f5f53d", outport="00a15c")
-------------------------------------------------------
 0. ls_out_pre_acl (northd.c:7253): ip, priority 100, uuid 2dc7fa39
    reg0[0] = 1;
    next;
 2. ls_out_pre_stateful (northd.c:7472): reg0[0] == 1, priority 100, uuid 4ad9d102
    ct_next;

ct_next(ct_state=est|trk /* по умолчанию (используйте --ct для настройки) */)
---------------------------------------------------------------
 3. ls_out_acl_hint (northd.c:7557): !ct.new && ct.est && !ct.rpl && ct_mark.blocked == 0, priority 4, uuid 85114b3b
    reg0[8] = 1;
    reg0[10] = 1;
    next;
 4. ls_out_acl_eval (northd.c:7794): reg0[10] == 1 && (outport == @neutron_pg_drop && ip), priority 2001, uuid 3ff77ec2
    reg8[17] = 1;
    ct_commit { ct_mark.blocked = 1; };
    next;
 5. ls_out_acl_action (northd.c:7905): reg8[17] == 1, priority 1000, uuid d9f07b14
    reg8[16] = 0;
    reg8[17] = 0;
    reg8[18] = 0;

Кто-нибудь знает, какая логика используется для блокировки icmp к шлюзу и возможно ли изменить это поведение?

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

Проблема, с которой вы столкнулись, связана с использованием функции портовой безопасности в OpenStack с использованием OVN. Давайте детально разберем, что происходит, и как это может быть исправлено.

Общее Описание Проблемы

Вы указали, что виртуальная машина (VM) не может пинговать шлюз в подсети, когда включена портовая безопасность, хотя при этом ARP работает нормально, и VM может выйти на внешние ресурсы и общаться с другими хостами в подсети. Это указывает на то, что базовая сетевое взаимодействие работает, но что-то конкретное блокирует ICMP-трафик в сторону шлюза.

Анализ Логов и Действий

По вашему трассировке видно, что на последнем узле нет выходного действия и установлен маркер ct_mark.blocked = 1. Это говорит о том, что попадая в одно из условий проверки, ваш ICMP-трафик блокируется.

Шаги Трассировки

  1. ls_out_pre_acl: Здесь идет регистрация первых правил, которые содержат условие reg0[0] = 1, что, видимо, означает, что состояние пакета отслеживается.

  2. ls_out_pre_stateful: В следующем шаге происходит проверка состояний подключений. Пакет проходит только в том случае, если он соответствует установленным параметрам ct_state=est|trk.

  3. ls_out_acl_hint, ls_out_acl_eval: На этих этапах проверяются более детализированные условия. Ваша информация указывает, что ICMP состоит из новой сессии (ct.new), перед тем как произвести вывод к шлюзу. Пакет не может пройти, так как ct_mark.blocked = 1.

  4. ls_out_acl_action: В этом шаге, установленный маркер блокировки, видимо, является конечным этапом обработки.

Причины Блокировки

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

  • Портовая безопасность: В Pro сети с настройками портовой безопасности может применяться строгий контроль за состоянием соединения. Это может приводить к блокировке ICMP-пакетов, которые не были ранее разрешены.

  • Правила ACL: Правила, установленные в ACL (Access Control Lists), могут мешать передачам ICMP-трафика к шлюзу, в том числе блокировать их на основе состояния соединения.

Возможные Решения

  1. Изменение Правил ACL: Проверьте и измените существующие правила ACL. Возможно, вам нужно добавить явное разрешение для ICMP-пакетов к шлюзу. Это даст возможность этим пакетам проходить в соответствии с вашими требованиями.

  2. Коэффициенты Портовой Безопасности: Вы можете изменить настройки портовой безопасности для данного порта, позволяя ICMP-пакетам проходить. Однако будьте осторожны, так как это может повлиять на общую безопасность вашего окружения.

  3. Диагностика состояния соединений: Убедитесь, что ICMP-пакеты правильно отслеживаются. Если ct_est для ICMP не установлен, возможно, вам стоит переосмыслить подход к обработке пакетов.

  4. Мониторинг Логов: Важно продолжать мониторить логи сетевого взаимодействия с помощью обеспеачиваемых инструментов OVN для понимания, какие другие сценарии могут блокировать трафик.

Заключение

Для решения проблемы блокировки ICMP-пакетов к шлюзу при включенной портовой безопасности следует обратиться к настройкам ACL и политике безопасности в вашей инфраструктуре. Следуя предложенным шагам, вы сможете настроить сетевое взаимодействие в соответствии с требованиями вашего проекта. Обратите внимание на тестирование внесенных изменений, чтобы убедиться, что безопасность не будет скомпрометирована.

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

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