Следующие изменения конфигурации должны обеспечить поток трафика между 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
работать так же. У меня он есть на нескольких производственных роутерах, но ваш ответ гораздо яснее моего. Отличная работа.