Poniższe zmiany konfiguracji powinny zapewnić przepływ ruchu między Dockerem a hostem Shorewall. Testowany na Shorewall 4.5.21.9, ale powinien mieć zastosowanie do najnowszych wersji:
/etc/shorewall/shorewall.conf
Upewnij się, że przekazywanie IP jest włączone (większość elementów konfiguracji to Tak / Nie, ale ten jest włączony):
IP_FORWARDING=On
/ etc / shorewall / masq
Włącz maskaradowanie (NAT) dla swojej prywatnej sieci Docker (jeśli używasz innej sieci, tzn. Uruchamiasz doker za pomocą --bip=#.#.#.#/#
, a następnie odpowiednio zmieniasz). Przejdź eth0
do dowolnego interfejsu na hoście z łącznością zewnętrzną:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Dodaj pozycję interfejsu, aby Shorewall wiedział, do którego interfejsu dock
odnosi się strefa:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zone
Utwórz nową strefę; Uwaga, docker
jest za długi i spowoduje błąd „nieprawidłowa nazwa strefy”.
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / policy
Prawdopodobnie chcesz zezwolić kontenerom Docker na komunikowanie się z hostem i Internetem, więc jest to dobry punkt wyjścia:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Konieczne może być również podobną ACCEPT
politykę dla ruchu od fw
celu dock
, jeśli nie już otworzyć go z fw
celu all
.
Można to dokręcić dalej w politycznych lub zasad plików, ile potrzeba. Na przykład powyższe nie zezwala wyraźnie na ruch zewnętrzny do twoich kontenerów Docker; sprawdź w tym celu inne strefy / zasady / reguły.
IP_FORWARDING=Yes
i równieżIP_FORWARDING=True
pracować. Mam go na kilku routerach produkcyjnych, ale twoja odpowiedź jest znacznie jaśniejsza niż moja. Świetna robota.