Вопрос или проблема
У меня есть топология, как показано ниже:
....enp0s9.256...
enp0s9.... .... br0 (1.1.1.1/24) (dhcp сервер)
....enp0s9.257...
enp0s9.256 и enp0s9.257 – это интерфейсы VLAN.
br0 – это мост, осведомленный о VLAN.
root@kmaster:/home/user# bridge vlan show
порт идентификаторы vlan
enp0s9.256 1 Egress Untagged
100 PVID
enp0s9.257 1 Egress Untagged
100 PVID
br100 1 Egress Untagged
100 PVID Egress Untagged
Ожидается, что только DHCP-трафик должен быть разрешен на enp0s9.256. enp0s9.257 может передавать любой трафик.
Ниже приведены правила, которые я настроил в ebtables:
root@kmaster:/home/user# ebtables -t filter -A OUTPUT -p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT
root@kmaster:/home/user# ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP
root@kmaster:/home/user# ebtables -t filter -A INPUT -p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT
root@kmaster:/home/user# ebtables -t filter -A INPUT -i enp0s9.256 -j DROP
После начала процесса DORA я вижу, что DHCP-трафик корректно попадает в цепочку INPUT, но не попадает в цепочку OUTPUT для правил DHCP. Он попадает в правило DROP. Может кто-нибудь предложить способ решения этой проблемы?
root@kmaster:/home/user# ebtables -L --Lc
Таблица моста: filter
Цепочка моста: INPUT, записи: 2, политика: ACCEPT
-p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-i enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0
Цепочка моста: FORWARD, записи: 0, политика: ACCEPT
Цепочка моста: OUTPUT, записи: 2, политика: ACCEPT
-p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-o enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0
Цепочка моста: drop_chain, записи: 0, политика: ACCEPT
root@kmaster:/home/user# ebtables -L --Lc
Таблица моста: filter
Цепочка моста: INPUT, записи: 2, политика: ACCEPT
-p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 2 -- bcnt = 656
-i enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0
Цепочка моста: FORWARD, записи: 0, политика: ACCEPT
Цепочка моста: OUTPUT, записи: 2, политика: ACCEPT
-p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-o enp0s9.256 -j DROP , pcnt = 2 -- bcnt = 656
Цепочка моста: drop_chain, записи: 0, политика: ACCEPT
Ответ или решение
Ваша проблема с тем, что правила ebtables для разрешения только DHCP-трафика на интерфейсе enp0s9.256 не работают должным образом, может быть вызвана несколькими причинами. Давайте рассмотрим настройку, которую вы предоставили, и предложим решение.
Анализ текущих правил ebtables
Ваши правила выглядят следующим образом:
# Разрешить DHCP-трафик для исходящих пакетов
ebtables -t filter -A OUTPUT -p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT
# Блокировать все остальные пакеты на enp0s9.256
ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP
# Разрешить DHCP-трафик для входящих пакетов
ebtables -t filter -A INPUT -p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT
# Блокировать все остальные пакеты на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -j DROP
Причины проблемы
-
Типы протоколов: У вас указано правило только для
IPv4
. Если ваши DHCP-пакеты имеют другой тип, например,IPv6
, это правило не сработает. Убедитесь, что DHCP-пакеты действительно используют протоколIPv4
. -
Работа с VLAN: Убедитесь, что вы правильно обрабатываете VLAN интерфейсы. Возможно, у вас есть дополнительные маршруты или правила, которые могут мешать работе.
-
Трафик, исходящий из других мест: Возможно, DHCP-пакеты выходят на другие интерфейсы или в рамках других сетевых конфигураций, не имеющих отношения к вашему фильтру на enp0s9.256.
Рекомендации по решению
-
Проверьте типы пакетов: Убедитесь, что ваши пакеты действительно являются UDP и что они используют порты 67 (сервер) и 68 (клиент) для DHCP.
-
Проверьте настройки VLAN: Убедитесь, что ваше оборудование и софт правильно настроены для обработки VLAN-трафика и что трафик действительно проходит через enp0s9.256.
-
Обратите внимание на порядок правил: Порядок правил в таблице ebtables важен. Правила работают по порядку, и если пакет не попадает в первый подходящий критерий, он будет обработан согласно следующим правилам. Возможно, вам стоит перепроверить порядок ваших правил.
-
Логирование трафика: Добавьте правила логирования для диагностики, чтобы увидеть, какие пакеты отбрасываются, и узнать больше о причинах.
ebtables -t filter -A OUTPUT -o enp0s9.256 -j LOG --log-prefix "Dropped OUTPUT: " ebtables -t filter -A INPUT -i enp0s9.256 -j LOG --log-prefix "Dropped INPUT: "
-
Проверка сетевых интерфейсов: Используйте
tcpdump
или аналогичные инструменты для мониторинга трафика на enp0s9.256, чтобы убедиться, что DHCP-трафик действительно проходит через этот интерфейс.
Пример пересмотра правил
Если вы хотите разрешить только DHCP-трафик и заблокировать всё остальное, попробуйте более явно указать все возможные UDP-порты DHCP (67 и 68):
# Разрешить все входящие и исходящие DHCP пакеты на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -p IPv4 --ip-proto udp --ip-dport 67:68 -j ACCEPT
ebtables -t filter -A OUTPUT -o enp0s9.256 -p IPv4 --ip-proto udp --ip-sport 67:68 -j ACCEPT
# Блокировка всего остального на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -j DROP
ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP
Заключение
После применения указанных изменений и рекомендаций, проверьте, работает ли ваш DORA-процесс. Убедитесь, что все ваши отфильтрованные пакеты правильно соответствуют правилам. Если проблема не решится, возможно, стоит изучить дополнительные сетевые конфигурации, которые могут влиять на работу этих правил.