Saya memigrasi mesin virtual kvm dari host lama (baik perangkat keras dan OS) ke yang baru.
Untuk jaringan, manajer virtusus mengusulkan saya opsi baru: macvtap . Ini tampak alternatif yang baik untuk membangun jembatan di eth0.
Jadi sekarang guest boot dengan baik, mendapat IP dari server DHCP jaringan lokal saya, dapat mencapai internet. Tamu juga melihat mesin lain di jaringan lokal, saya bisa ssh mereka, dll.
Masalahnya adalah bahwa tuan rumah dan tamu tidak saling bertemu. Saya tidak dapat menjangkau tamu dari host menggunakan IP tamu, saya juga tidak dapat mencapai host dari tamu menggunakan IP host. Tanpa ping, ssh, http, tidak ada.
Ini dia route -n
perintah dari tuan rumah:
$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
(output yang sama dari tamu).
Saya mungkin bisa mengatur antarmuka tun / tap baru yang didedikasikan untuk komunikasi antara tuan rumah dan tamu tetapi tampaknya sedikit berlebihan. Apakah ada cara untuk membuat tuan rumah dan tamu berkomunikasi?
sumber
Jawaban:
Saya mengajukan pertanyaan ini pada IRC dan tampaknya macvtap
Solusinya kemudian menambahkan antarmuka jaringan untuk tamu dan tuan rumah untuk berkomunikasi, atau tetap dengan solusi yang dijembatani lama ...
sumber
virt-manager mengatakan dengan jelas bahwa macvtap tidak berfungsi untuk komunikasi jaringan host ke guest ketika Anda mengaturnya. Saya hanya menambahkan antarmuka berbasis nat kedua, mengaturnya di tamu, dan menggunakannya untuk berkomunikasi dengan tuan rumah saya.
sumber
Solusinya adalah mengkonfigurasi antarmuka macvlan pada hypervisor, dengan alamat IP yang sama dari antarmuka perangkat keras yang sebenarnya (sangat penting), dan untuk mengkonfigurasi routing pada host untuk menggunakannya. Di Qemu / KVM, gunakan antarmuka macvtap pada antarmuka perangkat keras seperti biasa.
Untuk konfigurasi saya (192.168.1.0/24 jaringan, antarmuka perangkat keras p10p1, dan gateway 192.168.1.1), ia memberikan (pada hypervisor):
sumber
Seperti yang telah disebutkan dalam jawaban sebelumnya, solusi untuk masalah ini adalah menambahkan adapter jaringan macvlan pada host. Namun, saya merasa bahwa secara manual rewiring rute ke adaptor macvlan agak berantakan, terutama karena saya ingin dukungan IPv6 dan secara manual mengatur rute mungkin menjadi masalah ketika awalan berubah. Jadi inilah konfigurasi saya yang membuat kernel mengendalikan tabel routing:
(Konfigurasi khusus di sini adalah khusus Debian dan pemula, tetapi langkah-langkah dasar harus bekerja pada GNU / Linux.)
Membuat adaptor macvlan saat boot
Pertama, Anda perlu memilih alamat MAC untuk adaptor Anda. Anda mungkin bisa hanya menggunakan yang acak, tetapi saya sarankan Anda secara manual membuat adaptor macvlan dan menggunakan MAC-nya. Dengan cara ini, MAC tunduk pada konvensi yang mungkin ada.
Menetapkan MAC tetap disarankan, karena jika tidak, tidak ada jalan untuk mis. server DHCP untuk mengenali mesin Anda setelah reboot dan menetapkannya alamat IP yang sama seperti sebelumnya.
Jadi buat adaptor dan cari MAC:
Nomor heksadesimal yang disorot adalah alamat MAC Anda.
Sekarang Anda membuat skrip init - yang harus dijalankan sebelum jaringan diinisialisasi - untuk membuat adaptor macvlan setiap startup. Perintah untuk melakukan ini adalah:
Contoh skrip init pemula untuk tujuan ini adalah:
Masukkan saja ini, mis.
/etc/init/macvlan.conf
.Menyiapkan konfigurasi jaringan
Di
/etc/network/interfaces
, atur adapter jaringan fisik Anda menjadi manual (tetapi biarkan otomatis) dan pindahkan konfigurasi sebelumnya (biasanya DHCP atau alamat IP statis) ke adaptor macvlan Anda. Misalnya.:Menonaktifkan IPv6 untuk adaptor fisik
Terakhir, Anda tidak menginginkannya fisik adaptor untuk mendapatkan alamat IP. Untuk pengaturan IPv4, adaptor ke manual mencegahnya mendapatkan alamat. Namun, saya belum menemukan konfigurasi yang menghentikan kernel untuk mendapatkan / menetapkan alamat IPv6 untuk / ke adaptor. Ketika itu terjadi, itu juga menambahkan rute bagi mereka, yang dapat menyebabkan masalah. Jadi cara terbaik tampaknya menonaktifkan IPv6 untuk adaptor fisik. Anda dapat melakukan ini dengan menambahkan baris
untuk
/etc/sysctl.conf
, dengan membuat file dalam/etc/sysctl.d/
dengan baris ini, atau dengan menambahkanke skrip init Anda.
Ketika sekarang Anda me-reboot mesin Anda, berkomunikasi dari host ke tamu harus bekerja dengan IPv4 dan IPv6.
Perlu diketahui, bahwa jika Anda membuat kesalahan saat mengatur ini, host Anda dapat menjadi tidak terjangkau melalui jaringan bahkan setelah reboot. Lakukan ini hanya jika Anda memiliki akses fisik ke alat berat atau perlindungan lainnya sehingga Anda dapat memperbaiki masalah yang mungkin terjadi.
sumber
Anda ingin berakhir dengan sesuatu seperti ini:
Perhatikan bahwa kolom terakhir berisi "macvlan0" bukan "eth0".
Untuk mencapai itu, Anda dapat menggunakan perintah ini, dengan asumsi 192.168.0.42 sebagai alamat IP Anda:
Paling mirip dengan solusi npen. Jika Anda ingin skrip yang lebih canggih, lihat halaman web tentang subjek ini.
sumber
macvlan
modul:modprobe macvlan
Saya menggunakan apa yang ditulis Lazzaro di Debian, tetapi saya ingin menambahkan beberapa catatan.
Pertama-tama, kebutuhan antarmuka tamu diatur ke "Perangkat sumber" - & gt; "Perangkat host eth0: macvtap"; "Mode sumber" - & gt; " Jembatan ".
Kedua, skrip init yang belum Anda gunakan untuk saya ( tampaknya antarmuka macvlan0 dibuat terlambat saat startup ), jadi saya menggunakan ini:
Ubah mac ke yang ditetapkan saat antarmuka pertama kali dibuat:
Simpan dan atur bit eksekusi:
dan tambahkan semua tautan untuk init:
sumber