การเปลี่ยนแปลงการกำหนดค่าต่อไปนี้ควรตรวจสอบให้แน่ใจว่าการรับส่งข้อมูลระหว่างนักเทียบท่าและโฮสต์ Shorewall ทดสอบบน Shorewall 4.5.21.9 แต่ควรใช้กับเวอร์ชันล่าสุด:
/etc/shorewall/shorewall.conf
ตรวจสอบให้แน่ใจว่าเปิดใช้งานการส่งต่อ IP (รายการกำหนดค่าส่วนใหญ่เป็นใช่ / ไม่ใช่ แต่อันนี้เป็น "เปิด"):
IP_FORWARDING=On
/ etc / Shorewall / MASQ
เปิดใช้งาน masquerading (NAT) สำหรับเครือข่าย Docker ส่วนตัวของคุณ (หากคุณใช้เครือข่ายอื่นเช่นคุณเปิดตัว Docker ด้วย--bip=#.#.#.#/#
จากนั้นเปลี่ยนตาม) เปลี่ยนeth0
เป็นอินเตอร์เฟสใด ๆ บนเครื่องโฮสต์ด้วยการเชื่อมต่อภายนอก:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / Shorewall / อินเตอร์เฟซ
เพิ่มรายการอินเทอร์เฟซเพื่อให้ Shorewall รู้ว่าอินเทอร์เฟซใดที่dock
โซนเกี่ยวข้องกับ:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / Shorewall / โซน
สร้างโซนใหม่ หมายเหตุdocker
ยาวเกินไปและจะทำให้เกิดข้อผิดพลาด "ชื่อโซนที่ไม่ถูกต้อง"
#ZONE INTERFACE
dock ipv4
/ etc / Shorewall / นโยบาย
คุณอาจต้องการอนุญาตให้ Docker container คุยกับเครื่องโฮสต์และอินเทอร์เน็ตดังนั้นนี่คือจุดเริ่มต้นที่ดี:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
นอกจากนี้คุณยังอาจต้องคล้ายACCEPT
นโยบายสำหรับการจราจรจากfw
ไปdock
ถ้าคุณยังไม่ได้เปิดมันขึ้นกับการfw
all
คุณสามารถทำให้เรื่องนี้แน่นขึ้นในนโยบายหรือไฟล์กฎตามที่ต้องการ ตัวอย่างเช่นข้างต้นไม่อนุญาตให้ทราฟฟิกภายนอกเข้าถึงคอนเทนเนอร์ Docker ของคุณอย่างชัดเจน ตรวจสอบโซน / นโยบาย / กฎอื่น ๆ ของคุณ
IP_FORWARDING=Yes
และIP_FORWARDING=True
ทำงานเช่นกัน ฉันมีเราเตอร์หลายตัว แต่คำตอบของคุณชัดเจนกว่าของฉันมาก การทำงานที่ดี.