2016-02-29 2 views
3

У меня есть хост с одним интерфейсом eth0, IP 10.0.10.10/24. Я запускаю докер, добавляю контейнер, нет сети. Затем я создаю устройство macvlan на eth0, даю ему IP 10.0.10.20/24 и помещаю его в контейнер.iptables не работает с трафиком macvlan в контейнере

Как хост, так и контейнер теперь имеют полный доступ к сети.

Затем я создаю правило iptables на хосте, чтобы удалить весь трафик на IP-адрес или с IP-адреса контейнера 10.0.10.20. Правила не работают, и трафик проходит.

Конечно, если я делаю это из контейнера (ip netns exec $PID iptables ... или предоставив контейнер NET_ADMIN возможностей), он работает.

Должны ли правила iptables основного хоста не фильтровать трафик?

+0

Вы нашли решение для этого? – relet

+0

Не напрямую. Я напишу ответ здесь. – deitch

ответ

2

Ответ на этот вопрос: вы не можете этого сделать. При использовании моста трафик запускается на хост и выходит, поэтому он попадает в стек ip-узла хоста. Когда вы используете macvlan, единственный ip-стек является единственным в контейнере, поэтому правила iptables на хосте никогда не вызываются.

Единственный способ сделать это - изменить правила iptables внутри контейнер.

Если вы не хотите предоставлять доступ к контейнеру, например. если вы хотите управлять контейнером, используйте ip netns exec ... из самого хоста, который будет контролировать правила iptables в контейнере, не давая самому контейнеру контроль.

Я написал сценарий, который делает это. Он доступен по адресу https://github.com/deitch/ctables и имеет лицензию MIT.

+0

Спасибо. Вот и я пришел к выводу: проблема заключается в том, что я не хочу использовать мосты (они влияют на результаты измерения сети больше, чем на macvlan), но учетные данные/установленные квоты на трафик, используемый внутри контейнера *, и * дают контейнер NET_ADMIN. Поэтому единственный вариант, который у меня есть, - регулярно проверять, что мои правила iptables внутри контейнера все еще работают и работают. – relet

+0

@relet зачем давать контейнер NET_ADMIN? Почему бы вам не использовать решение 'ctables', описанное выше, где вы управляете им с хоста? – deitch

+0

И, да, влияние удара моста. Для большинства развертываний это не имеет значения, но для некоторых это очень важно. Я сначала сделал macvlan с финансовым учреждением, потоковым ценам. Каждая микросекунда имела значение. Я провел подробный анализ, сравнивающий докер-мост, голый металл, SR-IOV, macvlan и несколько других с точки зрения пропускной способности и латентности. В этом году я предложил в качестве беседы на докерконе и контейнере, мы увидим, что они говорят. Я также хочу повторить с Calico. – deitch