ฉันมีเครื่องเสมือนที่สร้างด้วย libvirt/qemu/kvm แนบกับ TAP ไปยังสะพาน Linux (virbr1)
ภายใน VM มี IP เป็น 10.99.0.9
.
และมีการตั้งค่าเส้นทางต่อไปนี้
เริ่มต้นผ่าน 10.99.0.1 dev enp1s0 proto static onlink
10.99.0.1 ผ่าน 10.99.0.1 dev enp1s0 proto static onlink
ที่นี่ 10.99.0.1 คือ IP ของบริดจ์
ฉันต้องการให้ทราฟฟิกทั้งหมดที่มาจาก VM นั้นไปที่เส้นทาง VPN (wg0) ที่ฉันตั้งค่าไว้ ฉันจึงทำบนโฮสต์
เส้นทาง ip เพิ่ม dev wg0 ตารางเริ่มต้น 42
กฎ ip เพิ่มจาก 10.99.0.9 ตารางที่ 42
วิธีนี้ใช้ได้ดี แต่ฉันสังเกตเห็นว่าภายใน VM ฉันยังสามารถ ping IP ของเครื่องโฮสต์ได้ 192.168.2.1
.
ในที่สุดฉันก็รู้ว่านี่เป็นเพราะ ค้นหาในท้องถิ่น
กฎ ip มีการตั้งค่าเป็น 0 ซึ่งสูงกว่ากฎที่ฉันเพิ่ม
ฉันคิดว่าฉันเพียงแค่เปลี่ยนคำสั่งและทุกอย่างจะดี
กฎ ip เพิ่มค่ากำหนด 300 ค้นหา local # 300 ที่นี่สูงกว่า 0 โดยพลการ
ค่ากำหนดของกฎ ip 0
กฎ ip เพิ่มจาก 10.99.0.9 ตาราง 42 การตั้งค่า 0
อย่างไรก็ตาม เมื่อทำสิ่งนี้ ตอนนี้ฉันไม่มีการเชื่อมต่อภายใน VM
ถ้าฉันดมกลิ่นบนลินุกซ์บริดจ์ ฉันเห็นว่ามันส่งคำขอ ARP อย่างต่อเนื่องเพื่อค้นหาว่าใครมี 10.99.0.1
และไม่มีการตอบกลับใดๆ
ฉันไม่คิดว่าการตัดสินใจกำหนดเส้นทางเหล่านี้ควรส่งผลกระทบต่อ ARP เลย เนื่องจากมันทำงานควบคู่ไปกับ IP ดังนั้นจึงทำให้เกิดความสับสน
ฉันขอยืนยันว่าเป็นบรรทัดที่แน่นอนที่ทำให้เกิดปัญหา
เหตุใดการตอบกลับ ARP จึงไม่กลับไปที่อินเทอร์เฟซ VM