iptables не работает на macvlan трафик в контейнере
У меня есть хост с одним интерфейсом eth0
, IP 10.0.10.10/24
. Я запускаю докер, добавляю контейнер, никакой сети. Затем я создаю устройство macvlan на eth0
, даю ему IP 10.0.10.20/24
и помещаю его в контейнер.
И хост, и контейнер теперь имеют полный доступ к сети.
Затем я создаю правило iptables на хосте, чтобы отбросить весь трафик К или от IP контейнера 10.0.10.20
. Правила не работают,и трафик проходит.
Конечно, если я делаю это из контейнера (либо ip netns exec $PID iptables ...
или предоставляя контейнеру NET_ADMIN
возможности), он работает.
Должны ли правила iptables базового хоста не фильтровать трафик?
1 ответ:
Ответ на этот вопрос таков: вы не можете этого сделать. При использовании моста трафик входит в хост и выходит из него, поэтому он попадает в стек ip-адресов хоста. При использовании macvlan единственный IP-стек находится в контейнере, поэтому правила iptables на хосте никогда не вызываются.
Единственный способ сделать это-изменить правила iptables внутри контейнера.Если вы не хотите предоставлять контейнеру доступ, например, если вы хотите управлять контейнером, то используйте
Я написал сценарий, который делает это. Он доступен по адресу https://github.com/deitch/ctables и лицензированный MIT.ip netns exec ...
от хоста сам, который будет контролировать правила iptables в контейнере, не давая контейнеру самому управлять.