Perubahan konfigurasi berikut harus memastikan aliran lalu lintas antara Docker dan host Shorewall. Diuji pada Shorewall 4.5.21.9 tetapi harus berlaku untuk versi terbaru:
/etc/shorewall/shorewall.conf
Pastikan penerusan IP diaktifkan (sebagian besar item konfigurasi Ya / Tidak, tetapi yang ini "Aktif"):
IP_FORWARDING=On
/ etc / shorewall / masq
Aktifkan penyamaran (NAT) untuk jaringan Docker pribadi Anda (jika Anda menggunakan jaringan yang berbeda, yaitu dengan meluncurkan docker --bip=#.#.#.#/#, lalu ubah sesuai itu). Ubah eth0ke antarmuka apa pun pada mesin host dengan konektivitas eksternal:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Tambahkan entri antarmuka sehingga Shorewall tahu antarmuka mana yang dockterkait dengan zona:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zona
Buat zona baru; perhatikan, dockerterlalu panjang dan akan menyebabkan kesalahan "nama zona tidak valid".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / kebijakan
Anda mungkin ingin mengizinkan wadah Docker untuk berbicara dengan mesin host dan Internet, jadi ini adalah titik awal yang baik:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Anda mungkin juga perlu serupa ACCEPTkebijakan untuk lalu lintas dari fwke dock, jika Anda tidak sudah membukanya dengan fwke all.
Anda dapat memperketat ini lebih lanjut dalam file kebijakan atau aturan yang diperlukan. Misalnya, hal di atas tidak secara eksplisit mengizinkan lalu lintas luar untuk mencapai wadah Docker Anda; periksa zona / kebijakan / aturan Anda yang lain untuk itu.
IP_FORWARDING=YesdanIP_FORWARDING=Truebekerja juga. Saya memilikinya di beberapa router produksi, tetapi jawaban Anda jauh lebih jelas daripada saya. Kerja bagus.