ถามสิ่งนี้ในวิศวกรรมเครือข่ายในการแลกเปลี่ยนสแต็กและถูกเปลี่ยนเส้นทางที่นี่
ฉันมีเซิร์ฟเวอร์สองสามตัวที่มีการกำหนดค่าด้านล่าง
เซิร์ฟเวอร์ 1:
eno1: 127.15.0.1/16 ขอบเขตทั่วโลก
eno2: 5.0.0.1/24
เซิร์ฟเวอร์ 2:
แท้จริง: 127.0.0.1/16 (มี /8 ฉันเปลี่ยนซับเน็ตมาสก์โดยใช้ 'ip addr del 127.0.0.1/8 dev lo; ip addr เพิ่ม 127.0.0.1/16 dev lo')
eno2: 5.0.0.2/24
eno1 ของเซิร์ฟเวอร์ 1 เชื่อมต่อกับเครือข่าย L2 ที่แตกต่างกันโดยสิ้นเชิงและแยกออกจากกันโดยสิ้นเชิง
อินเทอร์เฟซ eno2 ของทั้งสองเซิร์ฟเวอร์เชื่อมต่อกับเครือข่าย L2 เดียวกัน ตอนนี้ฉันต้องเข้าถึง 127.15.0.1 จากเซิร์ฟเวอร์ 2
Server1 ถูกปรับใช้มานานแล้วและฉันไม่มีสิทธิ์เปลี่ยนการกำหนดค่าใด ๆ ฉันไม่รู้ว่าทำไมบางคนถึงใช้ซับเน็ต 127.x.x.x ที่มีขอบเขตทั่วโลก ไม่แน่ใจว่าเป็นการกำหนดค่าที่ถูกต้องหรือไม่ แต่ฉันต้องอยู่กับมัน ฉันมีสิทธิ์ควบคุมอย่างสมบูรณ์บนเซิร์ฟเวอร์ 2 และฉันสามารถเปลี่ยนแปลงอะไรก็ได้
เซิร์ฟเวอร์ทั้งสองใช้ลินุกซ์
การเชื่อมต่อระหว่าง 5.0.0.1 <-> 5.0.0.2 นั้นดี
ความพยายามครั้งแรกของฉันคือการเพิ่มเส้นทางในเซิร์ฟเวอร์ 2 ตามด้านล่าง
ip เพิ่ม 127.15.0.1/32 ผ่าน 5.0.0.1
ส่ง Ping 127.15.0.1 จากเซิร์ฟเวอร์ 2 ฉันเห็นคำขอ ping และตอบกลับใน tcpdump บน server2 แต่คำสั่ง ping แสดงการสูญเสีย 100%
ฉันปิดใช้งาน rp_filters
sysctl.cnf:
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.eno2.rp_filter=0
รีบูตหลังจากอัปเดต sysctl.conf
และฉันก็ล้าง iptables ออก (iptables -F)
ผลลัพธ์เดียวกัน ฉันคิดว่าอาจเป็นเซิร์ฟเวอร์ 2 ที่ไม่ชอบใช้ซีรีส์ 127.x.x.x ดังนั้นฉันจึงเพิ่มกฎด้านล่างในเซิร์ฟเวอร์ 2
iptables -t nat -A OUTPUT -d 5.0.0.1 -j DNAT --to-ปลายทาง 127.15.0.1
กฎนี้ควรจะแทนที่ ip ปลายทางเป็น 127.15.0.1 หากแพ็กเก็ตถูกกำหนดให้เป็น 5.0.0.1
ส่ง Ping 5.0.0.1 จากเซิร์ฟเวอร์ 2 Iptables แทนที่ ip ปลายทางด้วย 127.15.0.1 (ยืนยันสิ่งนี้บน server1 tcpdump) Server1 ตอบกลับ แต่การตอบกลับถูกทิ้งอีกครั้ง
ฉันหมดความคิด ณ จุดนี้ ฉันลบ server1 เพื่อบำรุงรักษาและแทนที่ 127.15.0.1/26 ด้วย 192.168.1.1/16 การเชื่อมต่อทำงานได้ดีในกรณีนี้ (มีและไม่มี iptables) ตอนนี้คำถามคือปัญหาเกิดจากการใช้ 127.x.x.x หรือไม่ ถ้าใช่ มีวิธีแก้ไหมครับ?? ถ้าไม่ ฉันจะลองทำอะไรได้อีก
หมายเหตุ: การกำหนดค่านี้เคยใช้งานได้มาก่อน เราเพิ่งสูญเสียเซิร์ฟเวอร์ 2 (ซึ่งมี Linux รุ่นเก่า) และฉันกำลังสร้างมันขึ้นมาใหม่ทั้งหมด นอกจากนี้ windows ยังไม่อนุญาตให้ใช้ 127.x.x.x กับอินเทอร์เฟซอื่นที่ไม่ใช่ลูปแบ็ค ไม่แน่ใจว่าเหตุใด Linux จึงอนุญาตบนอินเทอร์เฟซที่ไม่ใช่ lo อาจมีเหตุผล!
เพื่อสรุปฉันมีคำถามเหล่านี้:
- Windows ปฏิเสธการกำหนดค่าทันทีเมื่อเราพยายามกำหนดค่า 127.x.x.x แต่ Linux อนุญาตและนั่นก็ด้วยขอบเขตส่วนกลาง มีกรณีการใช้งานนี้หรือไม่?
- ในกรณีนี้ server2 ส่งคำขอไปยัง 127.x.x.x และ server1 กำลังส่งการตอบกลับจริง ถ้า 127.x.x.x เป็นเพียง โฮสต์ภายในทำไมพวกเขาถึงส่งแพ็กเก็ตบนลิงค์ ??