Наступні зміни конфігурації повинні забезпечити потік трафіку між 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
працювати також. У мене це є на декількох виробничих маршрутизаторах, але ваша відповідь набагато чіткіша за мою. Чудова робота.