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?