Докер и Береговая стена

Я использую Береговая стена на моем сервере так просто автономный брандмауэр и хотел бы использовать Докер также.

С помощью контейнера Docker и его перенаправление портов docker устанавливает свои собственные правила / цепочки iptables, которые будут уничтожены при перезапуске shorewall. Таким образом, контейнер станет недостижимый.

Удалось ли кому-нибудь сохранить / восстановить правила docker при перезапуске shorewall или у кого-нибудь есть другой обходной путь?

Смотрите также:

Следующие изменения конфигурации должны обеспечить поток трафика между Docker и хостом Shorewall. Протестировано на Shorewall 4.5.21.9, но должно применяться к самым последним версиям:

/etc/shorewall/shorewall.conf

Убедитесь, что включена переадресация IP-адресов (большинство элементов конфигурации - Да/ Нет, но этот включен).:

IP_FORWARDING=On

/etc/береговая стена/маска

Включите маскировку (NAT) для вашей частной сети Docker (если вы используете другую сеть, т.Е. Вы запускаете docker с --bip=#.#.#.#/#, затем измените соответствующим образом). Изменить eth0 к любому интерфейсу на главном компьютере с внешним подключением:

#INTERFACE:DEST         SOURCEeth0                    172.17.0.0/16

/etc/береговая стена/интерфейсы

Добавьте запись интерфейса, чтобы Shorewall знала, какой интерфейс dock зона относится к:

#ZONE           INTERFACE               OPTIONSdock            docker0

/etc/береговая стена/зоны

Создать новую зону; примечание, docker слишком длинный и вызовет ошибку "недопустимое имя зоны".

#ZONE   INTERFACEdock    ipv4

/etc/береговая стена/политика

Вероятно, вы хотите разрешить контейнерам Docker взаимодействовать с хост-машиной и Интернет, так что это хорошая отправная точка:

#SOURCE         DEST            POLICY# ...(other policies)...dock            all             ACCEPT# ...(other policies, catch-all)...

Вам также может понадобиться аналогичный ACCEPT политика для трафика из fw к dock, если вы еще не открыли его с помощью fw к all.

Вы можете еще больше усилить это в политика или правила файлы по мере необходимости. Например, вышеизложенное явно не позволяет внешнему трафику достигать ваших контейнеров Docker; проверьте для этого ваши другие зоны / политики / правила.

С тех пор как Docker внедрил свою функцию сетевой изоляции, других решений, упомянутых здесь, больше недостаточно, если вы хотите использовать пользовательские сети. Shorewall 5.0.6 представляет поддержка Docker включая сети Docker. Этот:

  • Позволяет запускать / останавливать / перезапускать shorewall и docker в любом порядке
  • Устраняет необходимость в поддержании сценария расширения

Вы можете убедиться, что набор правил Docker выдержит перезапуск shorewall, создав сценарии расширения, которые сохраняют DOCKER цепочку перед перезапуском, а затем восстановите ее снова после этого. Я только что разместил сообщение с пример того, как это сделать, хотя я уверен, что это далеко не единственно возможный метод.

Только что выяснил это на своем ящике. Убедитесь, что в файле /etc/shorewall.conf есть:

IP_FORWARDING=Yes

Docker полагается на переадресацию, и я установил, что "puppet" устанавливает для него значение "Нет" на всех моих серверах.

Обновление: Вероятно, вам также нужно замаскировать трафик, поступающий из docker через ваш интерфейс WAN.

Редактировать /etc/shorewall/masq и вам понадобится строка, похожая на:

br0 172.17.0.0/12

В этом случае мой интерфейс WAN на самом деле br0 (мост), но ваш, вероятно, будет чем-то вроде eth0. (Использовать ifconfig чтобы увидеть ваши интерфейсы и их IP-адреса). На моей машине docker использует 172.17.0.0/ 24, который представляет собой диапазон частных адресов RFC1918. Это может отличаться в других системах, но вы можете увидеть диапазон, используя ifconfig еще раз поискать интерфейс docker0.

Одним из возможных вариантов является запуск Docker с параметром --net=host, чтобы разрешить контейнерному приложению доступ к сети хоста без переадресации ip и NAT.

Служба docker может быть перезапущена без ущерба для работающих контейнеров и может быть запущена после перезапуска Shorewall для перезагрузки специфичных для docker правил. Очевидно, что будет короткое время, когда подключение к контейнеру (контейнерам) будет нарушено.

Это верно, по крайней мере, для моих нескольких установок Archlinux.

Действие обновления не очищает ip-таблицу, поэтому, если вы просто хотите обновить правила или политики, вы просто можете запустить обновление вместо перезапуска :

sudo shorewall refresh

Очевидно, что проблема все еще остается, если вам действительно нужно перезапустить shorewall.Затем вы должны перезапустить docker и повторно настроить свои контейнеры.