Mode promiscuous dan multicast di perangkat macvtap

Sep 24 2020

Saya memiliki masalah dengan jaringan virtual dan penemuan jaringan IPv6 (lalu lintas multicast).

(Penyiapannya mungkin tampak sedikit rumit dan saya tidak ingat alasan pasti untuk setiap keputusan desain. Namun demikian, jaringan terbukti stabil dan dapat dipelihara. Masih mungkin ada ruang untuk pengoptimalan dan penyederhanaan.)

Pengaturan saya adalah ini:

  • qemu / kvm host ("qemu") menjalankan Debian 10; Saya menggunakan virt-manager untuk administrasi jika memungkinkan- satu VM ("fw") menjalankan firewall / router tervirtualisasi dengan Ubuntu 18.04- NIC fw terhubung ke "Bridge br0: Host device eno1":
# acara brctl
jembatan nama jembatan id STP diaktifkan antarmuka
br0 8000.f44d306689b5 no eno1
                            vnet0
                            vnet1
  • di dalam fw saya telah membuat beberapa perangkat VLAN untuk subnet saya yang berbeda untuk disaring oleh firewall
  • VM saya yang lain ("server") terhubung ke "Perangkat host br0.10: macvtap (mode sumber: Bridge)" (br0.10 adalah perangkat VLAN untuk VLAN-id 10 di br0.
  • Saya telah mengkonfigurasi unicast / 64-subnet global (dari tunnelbroker.net) di mana fw dan server memiliki alamat subnet yang dikonfigurasi
  • Saya bisa melakukan ping ke alamat link-local server dari fw

Masalah:

  • Saya tidak bisa melakukan ping ke alamat global-unicast server dari fw
  • tcpdump di fw menunjukkan permintaan tetangga ke mana akan keluar, tetapi tidak ada balasan yang masuk
  • tcpdump di qemu di br0 juga menunjukkan permintaan tetangga dan tidak ada balasan
  • (solusi) mengalihkan macvtap0 ke mode promiscous menyelesaikan masalah. Permintaan tetangga diterima oleh server dan dibalas.

Pertanyaan saya adalah: Mengapa saya harus mengganti macvtap0 ke mode promiscuous secara manual? Bukankah multicast merupakan fitur jaringan standar yang seharusnya berfungsi "di luar kotak" dengan VM? (Atau apakah penyiapan saya sangat tidak biasa, sehingga kasus penggunaan saya tidak tercakup?)

Jawaban

1 bug.spencor Oct 14 2020 at 01:12

Saya menemukan jawaban di Superuser: https://superuser.com/questions/944678/how-to-configure-macvtap-to-let-it-pass-multicast-packet-correctly/1033768#1033768Saya hanya akan menyalin sourcejedijawabannya di sini:

macvlan libvirt telah mendapatkan dukungan untuk multicast. Sayangnya itu dinonaktifkan oleh pengaturan default trustGuestRxFilters="no", dan dokumentasi tidak eksplisit bahwa ini merusak multicast. Seperti yang Anda amati, memecah multicast juga merusak IPv6.

https://bugzilla.redhat.com/show_bug.cgi?id=1035253#c15

Anda mungkin dapat mengatasinya dengan pengaturan manual trustGuestRxFilters="yes". Ada batasan: "dukungan bergantung pada model perangkat jaringan tamu, serta jenis koneksi pada host". "Saat ini hanya didukung untuk virtiomodel perangkat, dan untuk macvtapkoneksi pada host".

https://libvirt.org/formatdomain.html#elementsNICS

IMO model alami akan mengizinkan multicast secara default. Memblokir penerimaan multicast, di jaringan yang Anda pikir Anda terhubung langsung, adalah kejutan yang tidak menyenangkan. Terutama karena macvtaptampaknya masih memungkinkan pengiriman paket multicast (serta alamat sumber MAC palsu!).