Вопрос или проблема
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-трафик блокируется.
Шаги Трассировки
-
ls_out_pre_acl: Здесь идет регистрация первых правил, которые содержат условие
reg0[0] = 1
, что, видимо, означает, что состояние пакета отслеживается. -
ls_out_pre_stateful: В следующем шаге происходит проверка состояний подключений. Пакет проходит только в том случае, если он соответствует установленным параметрам
ct_state=est|trk
. -
ls_out_acl_hint, ls_out_acl_eval: На этих этапах проверяются более детализированные условия. Ваша информация указывает, что ICMP состоит из новой сессии (
ct.new
), перед тем как произвести вывод к шлюзу. Пакет не может пройти, так какct_mark.blocked = 1
. -
ls_out_acl_action: В этом шаге, установленный маркер блокировки, видимо, является конечным этапом обработки.
Причины Блокировки
Главные причины, по которым ICMP может блокироваться в вашей конфигурации, скорее всего заключаются в следующих моментах:
-
Портовая безопасность: В Pro сети с настройками портовой безопасности может применяться строгий контроль за состоянием соединения. Это может приводить к блокировке ICMP-пакетов, которые не были ранее разрешены.
-
Правила ACL: Правила, установленные в ACL (Access Control Lists), могут мешать передачам ICMP-трафика к шлюзу, в том числе блокировать их на основе состояния соединения.
Возможные Решения
-
Изменение Правил ACL: Проверьте и измените существующие правила ACL. Возможно, вам нужно добавить явное разрешение для ICMP-пакетов к шлюзу. Это даст возможность этим пакетам проходить в соответствии с вашими требованиями.
-
Коэффициенты Портовой Безопасности: Вы можете изменить настройки портовой безопасности для данного порта, позволяя ICMP-пакетам проходить. Однако будьте осторожны, так как это может повлиять на общую безопасность вашего окружения.
-
Диагностика состояния соединений: Убедитесь, что ICMP-пакеты правильно отслеживаются. Если
ct_est
для ICMP не установлен, возможно, вам стоит переосмыслить подход к обработке пакетов. -
Мониторинг Логов: Важно продолжать мониторить логи сетевого взаимодействия с помощью обеспеачиваемых инструментов OVN для понимания, какие другие сценарии могут блокировать трафик.
Заключение
Для решения проблемы блокировки ICMP-пакетов к шлюзу при включенной портовой безопасности следует обратиться к настройкам ACL и политике безопасности в вашей инфраструктуре. Следуя предложенным шагам, вы сможете настроить сетевое взаимодействие в соответствии с требованиями вашего проекта. Обратите внимание на тестирование внесенных изменений, чтобы убедиться, что безопасность не будет скомпрометирована.