Вопрос или проблема
У меня есть топология, как показано ниже:
....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, как вы ожидаете.
Возможные проблемы
-
Неверная цепочка: Возможно, проблема заключается в использовании неправильной цепочки для выводимых пакетов. Проверьте, что ваш DHCP-сервер действительно использует интерфейс
enp0s9.256
для отправки ответов. -
Проблемы с форматированием правил: Есть вероятность, что UDP-пакеты DHCP (клиент отправляет на 67, сервер отвечает на 68) не соответствуют правилам. Убедитесь, что для клиента правильно установлены параметры.
-
Порядок обработки пакетов: Убедитесь, что никакие другие правила или подсистемы не блокируют пакеты после проверки ebtables. Например, если у вас есть iptables или другие сетевые фильтры, они могут препятствовать корректному прохождению.
Рекомендации по исправлению
-
Проверьте направление трафика: Удостоверьтесь, что ваш DHCP-сервер отправляет пакеты на
enp0s9.256
. Вы можете использовать командыtcpdump
илиwireshark
для мониторинга интерфейса.tcpdump -i enp0s9.256 -n udp port 67 or port 68
-
Измените правила по порядку: Попробуйте переставить правила в OUTPUT-цепочке, чтобы правило ACCEPT для DHCP-пакетов шло последним. Чтобы упростить, вы можете временно убрать DROP правило для проверки.
ebtables -t filter -D OUTPUT -o enp0s9.256 -j DROP
-
Тестирование: После внесения изменений, запустите DORA (Discover, Offer, Request, Acknowledge) процесс и посмотрите, проходит ли трафик:
tcpdump -i enp0s9.256
-
Дополнительная диагностика: Если у вас есть другие сетевые интерфейсы или службы, проверьте их конфигурацию — существует вероятность влияния на работу DHCP.
Заключение
После выполнения всех предложенных шагов, если ваша проблема не будет решена, возможно, вам стоит рассмотреть возможность перезагрузки службы сетевых карт или перезагрузить устройство. Также полезно проверить журналы системных сообщений для поиска дополнительных подсказок.
Если вам потребуется дальнейшая помощь, не стесняйтесь задавать дополнительные вопросы.