![Как использовать iptables или IFB для маркировки входящего трафика по устройству?](https://rvso.com/image/652666/%D0%9A%D0%B0%D0%BA%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20iptables%20%D0%B8%D0%BB%D0%B8%20IFB%20%D0%B4%D0%BB%D1%8F%20%D0%BC%D0%B0%D1%80%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D0%B2%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B5%D0%B3%D0%BE%20%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0%20%D0%BF%D0%BE%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D1%83%3F.png)
Я пытаюсь использовать iptables для маркировки входящих пакетов на основе устройства, с которого они поступили (а не на основе их исходного IP-адреса или порта и т. д.), но не нашел способа заставить это работать.
В частности, я могу настроить фильтр, который будет подсчитывать каждый входящий пакет (и это будет работать нормально):
iptables -F -t mangle
iptables -A PREROUTING -t mangle -j MARK --set-mark 1
iptables -nvL
Chain PREROUTING (policy ACCEPT 185 packets, 41507 bytes)
pkts bytes target prot opt in out source destination
185 41507 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x1
Однако фильтр, перехватывающий только пакеты из eth2, похоже, никогда не срабатывает (хотя весь трафик идет именно оттуда):
iptables -F -t mangle
iptables -A PREROUTING -t mangle -i eth2 -j MARK --set-mark 1
iptables -nvL
Chain PREROUTING (policy ACCEPT 101 packets, 19288 bytes)
pkts bytes target prot opt in out source destination
0 0 MARK all -- eth2 * 0.0.0.0/0 0.0.0.0/0 MARK set 0x1
Из онлайн-руководств и т. д. следует, что такое поведение вполне может быть логическим следствием того, как работает iptables: и чтобы обойти это, люди пытались использовать IMQ (до того, как IMQ был отменен): а затем перешли на использование IFB. Но дальше документация, похоже, обрывалась.
Итак, мой вопрос таков: если использование IFB является правильным способом решения этой проблемы, как будет выглядеть эквивалентный способ IFB для маркировки входящего трафика по устройству?
Альтернативно, есть ли способ классифицировать трафик, поступающий через заданный интерфейс, как один из набора различных областей? например, eth0 --> realm_10, eth1 --> realm_11 и т. д. Этот подход, похоже, тоже должен работать, но я (опять же) пока не нашел никакой практической документации для этого.