Am o mașină virtuală creată cu libvirt/qemu/kvm atașată cu un TAP la un bridge Linux (virbr1).
În interior, VM-ul are un IP de 10.99.0.9.
Și are următoarea configurație de rutare.
implicit prin 10.99.0.1 dev enp1s0 proto static onlink
10.99.0.1 prin 10.99.0.1 dev enp1s0 proto static onlink
Aici 10.99.0.1 este IP-ul podului
Am vrut ca tot traficul care vine de la acel VM să meargă la o rută VPN (wg0) pe care am configurat-o, așa că pe gazdă am făcut-o
ip route add default dev wg0 tabelul 42
Adăugarea regulii ip din 10.99.0.9 tabelul 42
Acest lucru a funcționat bine, dar am observat că în interiorul VM-ului puteam încă să dau ping la IP-ul mașinii gazdă 192.168.2.1.
În cele din urmă mi-am dat seama că acest lucru se datorează faptului că căutare locală ip rule are o preferință de 0 care este mai mare decât cea a regulii pe care am adăugat-o.
M-am gândit că voi schimba pur și simplu comanda și totul va fi bine.
regulă ip adăugați preferință 300 căutare locală # 300 aici este arbitrar mai mare decât 0
regulă ip de preferință 0
regulă ip adăugați din 10.99.0.9 tabelul 42 preferința 0
Cu toate acestea, după ce fac acest lucru, acum nu am conectivitate în VM.
Dacă adulmec pe bridge-ul linux, văd că trimite continuu cererea ARP căutând cine are 10.99.0.1 , și nu primește niciun răspuns.
Nu am crezut că aceste decizii de rutare ar trebui să afecteze deloc ARP, deoarece acționează alături de IP, așa că acest lucru a fost confuz.
Am confirmat că exact acele linii cauzează problema
De ce răspunsurile ARP nu ajung înapoi la interfața VM?