Назад | Перейти на главную страницу

Докер и Shorewall

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

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

Кому-нибудь удалось сохранить / восстановить правила докеров при перезапуске Shorewall или у кого-нибудь есть другое решение?

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

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

/etc/shorewall/shorewall.conf

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

IP_FORWARDING=On

/ и т. д. / shorewall / masq

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

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16

/ и т.д. / shorewall / интерфейсы

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

#ZONE           INTERFACE               OPTIONS
dock            docker0

/ etc / shorewall / зоны

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

#ZONE   INTERFACE
dock    ipv4

/ etc / shorewall / policy

Вероятно, вы захотите разрешить контейнерам 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 в любом порядке
  • Избегает необходимости поддерживать сценарий расширения

Только что разобрался на своей коробке. Убедитесь, что в /etc/shorewall.conf есть:

IP_FORWARDING=Yes

Докер полагается на пересылку, и я установил для этой «марионетки» значение «Нет» на всех моих серверах.

Обновление: вам, вероятно, также необходимо замаскировать трафик, исходящий из докера, из вашего интерфейса WAN.

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

br0 172.17.0.0/12

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

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

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

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

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

sudo shorewall refresh

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

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