Правила ebtables для входящих и исходящих пакетов, позволяющие только DHCP, не работают.

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

У меня есть топология, как показано ниже:

          ....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
port    vlan ids
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, но не попадает в правило DHCP для OUTPUT. Он попадает в правило DROP. Может кто-нибудь предложить способ решения этой проблемы?

root@kmaster:/home/user# ebtables -L --Lc
Bridge table: filter

Bridge chain: INPUT, entries: 2, policy: 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

Bridge chain: FORWARD, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 2, policy: 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

Bridge chain: drop_chain, entries: 0, policy: ACCEPT
root@kmaster:/home/user# ebtables -L --Lc
Bridge table: filter

Bridge chain: INPUT, entries: 2, policy: 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

Bridge chain: FORWARD, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 2, policy: 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

Bridge chain: drop_chain, entries: 0, policy: ACCEPT

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

Для решения вашей проблемы с ebtables, нам необходимо проанализировать ваши текущие правила и понять, почему DHCP-пакеты не проходят через OUTPUT-цепочку.

Анализ текущих правил ebtables

Ваши правила 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

Из вывода видно, что ваши правила для INPUT цепочки работают корректно — они принимают DHCP-пакеты (67 и 68 порты). Однако пакеты не проходят через OUTPUT, как вы ожидаете.

Возможные проблемы

  1. Неверная цепочка: Возможно, проблема заключается в использовании неправильной цепочки для выводимых пакетов. Проверьте, что ваш DHCP-сервер действительно использует интерфейс enp0s9.256 для отправки ответов.

  2. Проблемы с форматированием правил: Есть вероятность, что UDP-пакеты DHCP (клиент отправляет на 67, сервер отвечает на 68) не соответствуют правилам. Убедитесь, что для клиента правильно установлены параметры.

  3. Порядок обработки пакетов: Убедитесь, что никакие другие правила или подсистемы не блокируют пакеты после проверки ebtables. Например, если у вас есть iptables или другие сетевые фильтры, они могут препятствовать корректному прохождению.

Рекомендации по исправлению

  1. Проверьте направление трафика: Удостоверьтесь, что ваш DHCP-сервер отправляет пакеты на enp0s9.256. Вы можете использовать команды tcpdump или wireshark для мониторинга интерфейса.

    tcpdump -i enp0s9.256 -n udp port 67 or port 68
  2. Измените правила по порядку: Попробуйте переставить правила в OUTPUT-цепочке, чтобы правило ACCEPT для DHCP-пакетов шло последним. Чтобы упростить, вы можете временно убрать DROP правило для проверки.

    ebtables -t filter -D OUTPUT -o enp0s9.256 -j DROP
  3. Тестирование: После внесения изменений, запустите DORA (Discover, Offer, Request, Acknowledge) процесс и посмотрите, проходит ли трафик:

    tcpdump -i enp0s9.256
  4. Дополнительная диагностика: Если у вас есть другие сетевые интерфейсы или службы, проверьте их конфигурацию — существует вероятность влияния на работу DHCP.

Заключение

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

Если вам потребуется дальнейшая помощь, не стесняйтесь задавать дополнительные вопросы.

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

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