Наступні зміни конфігурації повинні забезпечити потік трафіку між Docker та хостом Shorewall. Тестовано на Shorewall 4.5.21.9, але має застосовуватися до останніх версій:
/etc/shorewall/shorewall.conf
Переконайтеся, що переадресація IP-адреси включена (більшість елементів конфігурації - Так / Ні, але цей варіант "Увімкнено"):
IP_FORWARDING=On
/ etc / shorewall / masq
Увімкніть маскування (NAT) для вашої приватної мережі Docker (якщо ви використовуєте іншу мережу, тобто ви запускаєте докер --bip=#.#.#.#/#, тоді змініть відповідно). Змініть eth0будь-який інтерфейс на хост-машині із зовнішнім підключенням:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / інтерфейси
Додайте запис інтерфейсу, щоб Shorewall знав, до якого інтерфейсу dockвідноситься зона:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zone
Створити нову зону; Примітка, 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; перевірте свої інші зони / політики / правила для цього.
IP_FORWARDING=YesіIP_FORWARDING=Trueпрацювати також. У мене це є на декількох виробничих маршрутизаторах, але ваша відповідь набагато чіткіша за мою. Чудова робота.