เซิร์ฟเวอร์ของฉันมีสองอินเทอร์เฟซเครือข่าย ดังนั้น IP สองตัว อินเทอร์เน็ต IP หนึ่งรายการ และที่อยู่ส่วนตัวหนึ่งรายการ
ฉันเพิ่มสคริปต์ต่อไปนี้ในไฟล์ /etc/iproute2/rt_tables
:
252 enp0s3
251 enp0s8
และเพิ่มสคริปต์ต่อไปนี้ใน /etc/rc.local
:
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 172.17.171.151 dev enp0s3 ตาราง enp0s3
กฎ ip เพิ่มจาก 172.17.171.151 ตาราง enp0s3
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 172.17.168.121 dev enp0s8 ตาราง enp0s8
กฎ ip เพิ่มจาก 172.17.168.121 ตาราง enp0s8
ตอนนี้ทุกอย่างทำงานได้ดี
ฉันสามารถ ping ips สองตัวนี้ได้ ดังนั้น icmp จึงทำงานได้ตามปกติ ฉันยังสามารถส่ง SSH ไปยังเซิร์ฟเวอร์ผ่าน IP ใดก็ได้ ดังนั้นพอร์ต 22 จึงทำงานได้ดีเช่นกัน
อย่างไรก็ตาม เมื่อฉันใช้ docker-compose ต่อไปนี้เพื่อเริ่ม nginx ฉันพบว่าเบราว์เซอร์ไคลเอ็นต์สามารถเข้าถึงพอร์ต 80 ของหนึ่งใน 2 IP ใด ๆ เท่านั้น และพอร์ต 80 ของ IP อื่นไม่ตอบสนอง
รุ่น: "3"
บริการ:
จิงซ์:
รีสตาร์ท: เสมอ
ชื่อคอนเทนเนอร์: nginx
ภาพ: nginx
พอร์ต:
- 0.0.0.0:80:80
ปริมาณ:
- ./log:/var/log/nginx
สิ่งนี้เกิดจากอะไร? ฉันจะออกจากสถานการณ์นี้ได้อย่างไร
บันทึก: ไฟล์การกำหนดค่าด้านบนเป็นสภาพแวดล้อมการทดสอบที่ฉันสร้างด้วยเครื่องเสมือน ดังนั้นที่อยู่ IP จึงเป็นที่อยู่ส่วนตัวทั้งหมด
ขั้นตอนในการสืบพันธุ์:
- ใช้
Oracle VM VirtualBox
เพื่อเริ่มอูบุนตู 16.04 ด้วยสองอินเทอร์เฟซเครือข่ายบริดจ์
- เข้าสู่ระบบเครื่องเสมือน
- อ้างถึงสคริปต์ด้านบนเพื่อแก้ไข
/etc/iproute2/rt_tables
และ /etc/rc.local
.
- ติดตั้ง docker และ docker-compose
- ใช้ docker-compose ด้านบนเพื่อเริ่ม Nginx
- ไม่ว่าจะเปิดอินเทอร์เฟซเครือข่ายใด โฮสต์สามารถเข้าถึงพอร์ต 80 ของที่อยู่ IP ที่สอดคล้องกันของเครื่องเสมือนได้
- หากเปิดอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซพร้อมกัน พอร์ต 80 ของอินเทอร์เฟซเครือข่ายหนึ่งเท่านั้นที่สามารถเปิดได้ และอีกอินเทอร์เฟซหนึ่งไม่มีการตอบสนอง
ข้อมูลเพิ่มเติม: ถ้าฉันเริ่ม Nginx โดยตรงบนเครื่องเสมือน พอร์ต 80 ของ IP ทั้งสองสามารถเข้าถึงได้โดยเครื่องโฮสต์