Следующие изменения конфигурации должны обеспечить поток трафика между Docker и хостом Shorewall. Протестировано на Shorewall 4.5.21.9, но должно применяться к самым последним версиям:
/etc/shorewall/shorewall.conf
Убедитесь, что IP-переадресация включена (большинство параметров конфигурации - Да / Нет, но этот «Вкл»)
IP_FORWARDING=On
/ И т.д. / Shorewall / MASQ
Включите маскирование (NAT) для вашей частной сети Docker (если вы используете другую сеть, то есть запускаете Docker --bip=#.#.#.#/#, затем измените ее соответствующим образом). Перейдите eth0на любой интерфейс на хост-машине с внешним подключением:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ И т.д. / Shorewall / интерфейсы
Добавьте запись интерфейса, чтобы Shorewall знал, к какому интерфейсу dockотносится зона:
#ZONE INTERFACE OPTIONS
dock docker0
/ и т.д. / Shorewall / зон
Создать новую зону; обратите внимание, dockerон слишком длинный и вызовет ошибку «недопустимое имя зоны».
#ZONE INTERFACE
dock ipv4
/ И т.д. / Shorewall / политика
Возможно, вы захотите разрешить контейнерам Docker общаться с хост-машиной и Интернетом, так что это хорошая отправная точка:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Вам также может понадобиться аналогичную ACCEPTполитику в отношении трафика , fwчтобы dock, если вы уже не открыть его с fwк all.
При необходимости вы можете усилить это в файлах политики или правил . Например, вышеописанное явно не позволяет внешнему трафику достигать ваших контейнеров Docker; проверьте ваши другие зоны / политики / правила для этого.
IP_FORWARDING=YesиIP_FORWARDING=Trueработать так же. У меня он есть на нескольких производственных роутерах, но ваш ответ гораздо яснее моего. Отличная работа.