ข้อมูลพื้นฐาน
ฉันมีเซิร์ฟเวอร์ที่มีอินเตอร์เฟสเครือข่ายสองตัวที่เรียกใช้ Docker หางเช่นเครื่องมือ virtualization docker0
บางสร้างอินเตอร์เฟซลินุกซ์ที่เรียกว่าสะพาน อินเทอร์เฟซนี้ถูกกำหนดค่าเริ่มต้นด้วย IP ของ172.17.42.1
และคอนเทนเนอร์ Docker ทั้งหมดสื่อสารกับอินเทอร์เฟซนี้เป็นเกตเวย์ของพวกเขาและได้รับการกำหนดที่อยู่ IP ใน/16
ช่วงเดียวกัน ตามที่ผมเข้าใจมันทุกเครือข่ายการจราจรไปยัง / จากตู้คอนเทนเนอร์ไปผ่าน NAT ดังนั้นขาออกก็ปรากฏขึ้นมาจากและขาเข้าจะได้รับการส่งไปยัง172.17.42.1
172.17.42.1
การตั้งค่าของฉันดูเหมือนว่า:
+------------+ /
| | |
+-------------+ Gateway 1 +-------
| | 10.1.1.1 | /
+------+-------+ +------------+ |
| eth0 | /
| 10.1.1.2 | |
| | |
| DOCKER HOST | |
| | | Internet
| docker0 | |
| (bridge) | |
| 172.17.42.1 | |
| | |
| eth1 | |
| 192.168.1.2 | \
+------+-------+ +------------+ |
| | | \
+-------------+ Gateway 2 +-------
| 192.168.1.1| |
+------------+
ปัญหา
ฉันต้องการที่จะใช้เส้นทางการจราจรทั้งหมดจาก / ไปยังภาชนะใด ๆ หางออกมาจากสองeth1
192.168.1.2
อินเตอร์เฟซเกตเวย์เริ่มต้นของ192.168.1.1
ในขณะที่มีการเข้าชมทั้งหมดจาก / ไปยังเครื่องโฮสต์ออกไปอินเตอร์เฟซเกตเวย์เริ่มต้นของeth0
10.1.1.2
10.1.1.1
ฉันได้ลองทำสิ่งต่าง ๆ จนไม่มีประโยชน์ แต่สิ่งหนึ่งที่ฉันคิดว่าใกล้เคียงที่สุดคือการใช้ iproute2 ดังนี้:
# Create a new routing table just for docker
echo "1 docker" >> /etc/iproute2/rt_tables
# Add a rule stating any traffic from the docker0 bridge interface should use
# the newly added docker routing table
ip rule add from 172.17.42.1 table docker
# Add a route to the newly added docker routing table that dictates all traffic
# go out the 192.168.1.2 interface on eth1
ip route add default via 192.168.1.2 dev eth1 table docker
# Flush the route cache
ip route flush cache
# Restart the Docker daemon so it uses the correct network settings
# Note, I do this as I found Docker containers often won't be able
# to connect out if any changes to the network are made while it's
# running
/etc/init.d/docker restart
เมื่อฉันนำภาชนะขึ้นมาฉันไม่สามารถปิงออกได้หลังจากทำสิ่งนี้ ฉันไม่แน่ใจว่าบริดจ์อินเตอร์เฟสได้รับการจัดการเช่นเดียวกับอินเทอร์เฟซทางกายภาพสำหรับการกำหนดเส้นทางประเภทนี้และเพียงต้องการตรวจสอบสติรวมถึงเคล็ดลับใด ๆ เกี่ยวกับวิธีที่ฉันอาจทำภารกิจง่าย ๆ นี้ให้สำเร็จ