Вопрос или проблема
У меня есть межсетевой экран, у которого на одном физическом интерфейсе есть 3 IP-алиаса. Пакеты отбрасываются между этими тремя интерфейсами (будь то ICMP, HTTP или что-то еще). Мы выяснили, что эти пакеты помечаются как INVALID в правиле FORWARD и отбрасываются из-за следующего правила:
chain FORWARD {
policy DROP;
# отслеживание соединений
mod state state INVALID LOG log-prefix 'INVALID FORWARD DROP: ';
mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT;
}
(То есть, мы видим логи INVALID FORWARD DROP
в dmesg
)
Что может быть причиной этого?
Используйте macvlan в режиме моста вместо IP-алиасов и оставьте физический интерфейс в режиме промискуитета.
Например:
- eno1 — это интерфейс, который вы хотите использовать.
- Затем создайте macvlan1@eno1, macvlan2@eno1 и macvlan3@eno1.
- Оставьте eno1 в режиме промискуитета.
Смотрите ниже последовательность для создания интерфейса macvlan.
# /sbin/ip link add link eno1 macvlan1 type macvlan mode bridge
# /sbin/ip addr add 192.168.1.1/24 dev macvlan1
# /sbin/ip link set macvlan1 address aa:bb:bb:dd:ee:ff up
Смотрите ниже команду, чтобы включить режим промискуитета для eno2
# /sbin/ip link set eno1 promisc on
Состояние INVALID
означает, что пакет не связан с известным соединением (и не начинает новое соединение). Единственные причины, которые я могу предположить, это то, что что-то очищает таблицу отслеживания соединений, таблица переполняется или записи истекают слишком быстро. Вы можете проверить размер таблицы отслеживания соединений с помощью sudo conntrack -L | wc -l
и максимальное количество записей с помощью cat /proc/sys/net/netfilter/nf_conntrack_max
.
Ответ или решение
Проблема с пакетами, отмеченными как INVALID в правиле FORWARD вашего брандмауэра, может быть вызвана несколькими факторами, особенно в конфигурации с IP-алиасами. Давайте рассмотрим возможные причины и решения этой проблемы.
Причины возникновения пакетов со статусом INVALID
-
Некорректная работа протоколов: Пакеты могут помечаться как INVALID, если они не ассоциируются с известным соединением или не инициируют новое соединение. Это может происходить, если IP-алиасы не поддерживают необходимую связь и не отслеживают состояния соединений должным образом.
-
Очистка таблицы отслеживания соединений: Возможно, что что-то очищает таблицу отслеживания соединений. Это может быть вызвано ошибками в конфигурации или другими процессами, которые неправильно управляют соединениями.
-
Переполнение таблицы отслеживания: Если таблица отслеживания соединений заполнена, новые подключения могут не регистрироваться, и пакеты будут отклоняться как INVALID.
-
Слишком короткие таймауты: Таймауты соединений могут быть установлены слишком короткими, из-за чего соединения быстро устаревают.
Проверка состояния
Для диагностики состояния таблицы отслеживания соединений вы можете использовать следующие команды:
-
Чтобы проверить текущее количество соединений в таблице:
sudo conntrack -L | wc -l
-
Чтобы узнать максимальное количество записей в таблице:
cat /proc/sys/net/netfilter/nf_conntrack_max
Решение проблемы
Для устранения проблемы с пакетами, отмеченными как INVALID, рекомендуется рассмотреть возможность использования macvlan в режиме моста вместо IP-алиасов. Вот что следует сделать:
-
Убедитесь, что физический интерфейс находится в promisc режиме. Это позволит интерфейсу обрабатывать все проходящие через него пакеты.
-
Создайте несколько macvlan интерфейсов в режиме моста:
# Создание macvlan интерфейсов /sbin/ip link add link eno1 macvlan1 type macvlan mode bridge /sbin/ip addr add 192.168.1.1/24 dev macvlan1 /sbin/ip link set macvlan1 address aa:bb:bb:dd:ee:ff up
-
Затем активируйте promisc режим для основного интерфейса:
# Включение promisc режима для eno1 /sbin/ip link set eno1 promisc on
После выполнения этих шагов, ваш брандмауэр должен начать правильно отслеживать соединения, и количество пакетов, помеченных как INVALID, должно уменьшиться.
Если проблема будет продолжаться, рассмотрите возможность увеличения значения nf_conntrack_max
в соответствии с вашими потребностями и проведите дополнительные исследования возможных ошибок настройки или конфликтов между протоколами.