Использование 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-zonesdocker  interfaces: docker0public  interfaces: eno1

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

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