Docker Контейнер видит различные правила IPTables от хоста - PullRequest
0 голосов
/ 26 мая 2020

У меня есть контейнер docker, которому нужно добавить некоторые правила iptables на хост. Судя по поиску, похоже, что это должно работать либо в привилегированном режиме, либо путем добавления CAP_NET_ADMIN и CAP_NET_RAW и в сетевом режиме хоста.

Однако я пробовал оба из них, и что бы я ни делал, docker Кажется, что у контейнера есть собственный набор правил iptables. Вот пример:

на хост-машине iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            
# Warning: iptables-legacy tables present, use iptables-legacy to see them

(обратите внимание, что я запускал docker с iptables, установленным в false, чтобы попытаться отладить это, поэтому это минимальный набор правила, этот параметр, похоже, не имеет значения)

Далее в контейнере Ubuntu: docker run -it --privileged --net=host ubuntu:18.04 /bin/bash та же команда (iptables -L)

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

, так что это совершенно другой фильтр таблица, как будто у нее есть собственная копия. Аналогичное поведение для других таблиц, и я подтвердил, что добавление правил в контейнер не добавляет их на хост, даже если контейнер является привилегированным и находится в сетевом режиме хоста.

Хост - это raspberry pi, на котором запущен Raspbian buster . Есть ли что-то еще, что мне нужно сделать, чтобы это сработало?

1 Ответ

0 голосов
/ 27 мая 2020

Я должен был подумать об этом раньше, но я проверил версию ядра raspbian, и на данный момент это была версия 4.19. Поэтому я переустановил сервер Ubuntu 20.04 (который предоставляет дистрибутив arm64 для raspberry pi), и теперь он, похоже, работает так, как ожидалось. Скорее всего, дело в устаревшем ядре.

...