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 в контейнере, не давая контейнеру самому управлять.