Использование Docker с firewalld

Использование Docker с firewalld

TL;DR Пытаюсь замаскировать все Dockerвручную firewalld.

Я только что начал использовать его firewalldна своей машине Debian 10, так как хочу узнать, как он работает.

Я Dockerустановил брандмауэр на хосте и хочу управлять им самостоятельно, чтобы узнать больше о том, что делает Docker, какие правила и т. д. он применяет при создании контейнеров и как работает firewalld.

Так как Debian 10 использует nftablesпо умолчанию и использует некую iptablesоболочку, позволяющую использовать iptablesкоманды для создания правил брандмауэра. Dockerработает нормально, когда --iptablesвключен.

Однако я хочу использовать firewalldс nftablesбэкэндом и пропустить все, что связано с этим, iptablesтак как это просто сбивает с толку. Поэтому /etc/systemd/system/multi-user.target.wants/docker.serviceя добавил --iptables=false, чтобы Docker не связывался с брандмауэром. Я сбросил все правила iptables и т. д., и пока все хорошо.

Теперь перейдем к моей проблеме.

Все контейнеры могут получить доступ к хосту и друг к другу, но не к интернету. Поскольку все они работают на 172.17.0.0/16, а мой хост находится на 192.168.9.0/24, мне нужно замаскировать трафик от контейнеров.

Я не могу найти достаточно информации об управлении брандмауэром вручную при использовании Docker, и поскольку я новичок в firewalld, мне остается только предполагать.

Мои интерфейсы следующие:

eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)

все vethинтерфейсы находятся в docker0мосту.

Поэтому я подумал, что могу создать новую зону под названием dockerи скрыть все с docker0моста.

~# firewall-cmd --permanent --new-zone=docker
~# firewall-cmd --permanent --zone=docker --change-interface=docker0
~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'
~# firewall-cmd --reload

Список активных зон дает мне следующее:

~# firewall-cmd --get-active-zones
docker
  interfaces: docker0
public
  interfaces: eno1

Я все еще не могу получить доступ к интернету из контейнеров. Я понятия не имею, правильный ли это путь или что я упускаю. Любая помощь будет оценена по достоинству.

решение1

В firewalld маскарадинг нужно настроить на зону, которая ведет в Интернет. В вашем случае это, похоже, зона public.

Связанный контент