Persiapan
Berikut ini bekerja untuk saya untuk Ubuntu 12.04. Anda harus menonaktifkan firewall komputer Anda saat Anda menguji ini sehingga tidak akan mengganggu.
File / etc / default / qemu-kvm harus seperti aslinya diinstal.
Anda perlu menginstal bridge-utils qemu-kvm dan libvirt-bin . Setiap pengguna yang menggunakan mesin virtual harus ditambahkan ke grup libvirtd.
Tampaknya tidak ada lagi kebutuhan untuk menambahkan kemampuan CAP_NET_ADMIN.
Pengaturan jaringan
Mode jaringan default adalah mode Pengguna, juga disebut SLIRP. Ini menggunakan jembatan virbr0 yang telah ditetapkan yang NAT dialihkan ke komputer tamu. Routing NAT menggunakan fitur ip_forwarding dan iptables kernel . Mode jembatan menggunakan jembatan virtual di dalam tamu yang terhubung dengan antarmuka Ethernet (tidak bernomor), dan di mana tuan rumah dan tamu memiliki antarmuka jaringan mereka.
Diagram berikut dapat memperjelas perbedaan:
Anda dapat melihat bagaimana jaringan Pengguna default didefinisikan dengan:
virsh net-dumpxml default
Saya dapat mengatur mode bridged dengan pendekatan berikut:
Di / etc / network / interfaces (dari bagian bridging dari postingan yang Anda sebutkan dalam pertanyaan Anda):
otomatis lo
iface lo inet loopback
#auto eth0
#jika eth0 inet dhcp
auto eth0
iface eth0 inet manual
otomatis br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxunggu 0
Reboot; dan pastikan bahwa jaringan nirkabel tidak aktif. Periksa rute IP default dengan ip route
. Itu harus menggunakan antarmuka br0.
NB Jika Ethernet Anda tidak terhubung saat perubahan ini dilakukan, Anda perlu menyambungkan kabel Ethernet Anda dan mendapatkan carrier atau boot akan menggantung selama dua menit dan Anda tidak akan memiliki kemampuan jaringan. Itu karena antarmuka eth0, oleh berada di file ini, harus muncul sebelum boot dapat melanjutkan dengan normal.
NB Umumnya Anda tidak dapat menggunakan jaringan nirkabel daripada eth0 karena ketidakmampuan mereka untuk menggunakan beberapa alamat MAC (saya menyimpulkan bahwa mereka membutuhkan yang kedua untuk jembatan).
Sebagai alternatif, Anda dapat menonaktifkan penggunaan Ethernet dan memastikan bahwa itu tidak memiliki alamat IP, dan bahwa tidak ada rute default yang diatur ip route
. Kemudian:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
Anda juga dapat memberikan alamat IP statis di sini, serta menentukan rute default dan alamat DNS. Untuk contoh dhclient
ini, lakukan ini.
Inilah tabel rute saya:
Daftar rute $ ip
default via 192.168.1.1 dev br0 metric 100
169.254.0.0/16 dev br0 scope link metric 1000
192.168.1.0/24 dev br0 proto kernel lingkup tautan src 192.168.1.45
192.168.122.0/24 dev virbr0 proto kernel lingkup tautan src 192.168.122.1
Menggunakan kvm
Saya kemudian dapat mem-boot mesin bridged kvm dengan:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
The -netdev tap
merek parameter sudo suatu kebutuhan. Saat VM dimulai qemu-kvm menjalankan perintah berikut:
ifconfig vnet0 0.0.0.0 up
brctl addif brctl addif br0 vnet0
Ini dilakukan oleh / etc / qemu-ifup
Antarmuka VM vnet0 ditambahkan ke jembatan br0 karena rute default di atas menggunakan antarmuka jembatan itu. Jika tidak ada, antarmuka tap akan ditambahkan ke antarmuka virbr0. Karena itu tidak terhubung ke Internet, NAT akan digunakan untuk menghubungkan tamu ke host dan Internet, dalam percobaan saya. Anda dapat mengarahkan vnet0 ke jembatan tertentu di / etc / default / qemu-kvm. Dengan menggunakan virt-manager di bawah ini Anda dapat secara eksplisit mengarahkan jembatan mana yang terhubung.
Karena perintah di atas dikeluarkan oleh qemu-kvm, dan -netdev tap,id=tunnel,ifname=vnet0
parameternya, mesin virtual vm terhubung ke terowongan vnet0, dan terowongan terhubung ke jembatan br0.
Saya sekarang dapat langsung ssh ke guest VM ini dari komputer lain di jaringan saya.
Tuan rumah saya ifconfig
(perhatikan antarmuka vnet0 yang muncul di jaringan saya ketika VM sedang berjalan):
$ ifconfig
br0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
inet addr: 192.168.1.45 Bcast: 255.255.255.255 Topeng: 255.255.255.0
inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Cakupan: Tautan
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
Paket RX: 6526 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
Paket TX: 7543 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
tabrakan: 0 txqueuelen: 0
Bita RX: 2712940 (2,7 MB) Bita TX: 1071835 (1,0 MB)
eth0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
Paket RX: 7181 kesalahan: 0 turun: 0 overruns: 0 bingkai: 0
Paket TX: 7740 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
tabrakan: 0 txqueuelen: 1000
Bita RX: 2974585 (2,9 MB) Bita TX: 1096580 (1,0 MB)
Interrupt: 43 Alamat dasar: 0x6000
lo Link encap: Local Loopback
inet addr: 127.0.0.1 Mask: 255.0.0.0
inet6 addr: :: 1/128 Cakupan: Host
MENJALANKAN LOOPBACK MTU: 16436 Metrik: 1
Paket RX: 10 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
Paket TX: 10 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
tabrakan: 0 txqueuelen: 0
Bita RX: 664 (664,0 B) Bita TX: 664 (664,0 B)
vnet0 Link encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Lingkup: Tautan
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
Paket RX: 226 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
Paket TX: 429 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
tabrakan: 0 txqueuelen: 500
RX byte: 26919 (26,9 KB) TX byte: 58929 (58,9 KB)
virbr0 Link encap: Ethernet HWaddr d6: 18: 22: db: ff: 93
inet addr: 192.168.122.1 Bcast: 192.168.122.255 Mask: 255.255.255.0
UP BROADCAST MULTICAST MTU: 1500 Metric: 1
Paket RX: 0 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
Paket TX: 0 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
tabrakan: 0 txqueuelen: 0
Bita RX: 0 (0,0 B) Bita TX: 0 (0,0 B)
Konfigurasi jembatan saya saat menjalankan VM:
$ brctl show
jembatan nama jembatan id antarmuka yang diaktifkan STP
br0 8000.001e338807e5 no eth0
vnet0
virbr0 8000.000000000000 ya
Perhatikan bahwa antarmuka vnet0 mesin virtual dan antarmuka eth0 terhubung ke jembatan br0.
Dan MAC ada di antarmuka br0:
$ brctl showmacs br0
port no addr mac adalah lokal? timer penuaan
1 00: 05: 5d: lih: 64: 61 no 2.54
1 00: 19: d2: 42: 5d: 3d no 36.76
1 00: 19: df: da: af: 7c no 2.86
1 00: 1e: 33: 88: 07: e5 ya 0,00
1 00: 60: 0f: e4: 17: d6 no 0.79
2 52: 54: 00: 12: 34: 56 no 0.80
1 58: 6d: 8f: 17: 5b: c0 no 5.91
1 c8: aa: 21: be: 8d: 16 no 167.69
2 ca: 0c: 73: c3: bc: 45 ya 0,00
Perhatikan bahwa antarmuka br0 menghubungkan komputer host saya ke jembatan yang sama yang digunakan oleh tamu.
Anda dapat memeriksa bahwa Anda dijembatani daripada NAT yang diarahkan ke jaringan Anda sendiri dengan menggunakan traceroute 8.8.8.8
. Jika simpul pertama adalah router jaringan Anda dan bukan alamat ip tamu, jaringan Anda seharusnya bekerja dengan benar.
Lihat dokumentasi ini .
manajer kebajikan
Pastikan Anda telah menginstal virt-manager
dan hal
. The hal
paket ketergantungan disarankan untuk virt-manager
dan digunakan untuk menentukan konfigurasi jaringan sistem anda saat membuat atau mengedit tamu.
Sementara memiliki jembatan br0 didefinisikan seperti di atas saya membuat mesin virtual dengan virt-manager sebagai berikut:
Saya bisa langsung ke seluruh jaringan rumah saya dan ke Internet dari tamu ini. Saya juga dapat ssh ke dalamnya dari komputer Ubuntu lain (non-host, non-guest) di jaringan rumah saya.
Inilah kvm
perintah yang sangat panjang yang dijalankan oleh virt-manager (untuk perbandingan dengan EApubs atau siapa pun yang mengalami masalah dengan ini):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, soket = 1, inti = 1, utas = 1, utas = 1 -nama tepat -memakai f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev socket, id = charmonitor, path = / var / lib / libvirt / qemu / precision.monitor, server, nowait -mon chardev = charmonitor, id = monitor, mode = control -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, jika = tidak ada, id = drive-ide0-0-0, format = qcow2 -device drive-ide, bus = ide.0 , unit = 0, drive = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0 -device rtl8139, netdev = hostnet0, id = net0, mac = 52: 54: 00: 0e: da: 9b, bus = pci.0, addr = 0x3 -chardev pty, id = charserial0 -device isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.0.1:: 0 -vga cirrus -device intel-hda, id = sound0, bus = pci.0, addr = 0x4 -device hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0 -layanan virtio-balloon-pci, id = balloon0, bus = pci.0, addr = 0x5
Inilah bagian jaringan dari deskripsi mesin virtual di /etc/libvirt/qemu/quantal.xml
<interface type='bridge'>
<mac address='52:54:00:b0:8e:aa'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Menurut tautan ini , untuk kinerja dan keandalan, mungkin yang terbaik untuk mengatur model perangkat jaringan virtio
, Anda dapat melakukan ini dengan di virt-viewer dengan menekan tombol i , pergi ke pengaturan NIC, dan pengaturan "Device model "ke virtio
. Anda juga bisa menambahkan ini ke XML di atas dengan menambahkan baris:
<model type='virtio'/>
Singkatnya
Semua ini berlangsung pada 12,04 adalah:
- Menginstal virt-manager, bridge-utils, qemu-kvm, dan paket terkait
- Pastikan setiap pengguna yang ingin menggunakan kvm berada di grup libvirtd.
- Mendefinisikan / etc / network / interfaces seperti di atas (yang cocok dengan artikel yang dikutip)
- Reboot, pastikan Ethernet terhubung dan nirkabel (jika ada) tidak aktif.
- Jalankan kvm terhadap gambar secara langsung dengan, misalnya
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, atau buat mesin virtual dengan virt-manager, tentukan network br0 di bawah panel Langkah 4-> Opsi Lanjutan.
Tidak ada perubahan lebih lanjut yang diperlukan untuk jaringan, kemampuan, template, atau konfigurasi.
Untuk mengekspos layanan di tamu baru Anda ke Internet, Anda harus:
- Siapkan dan konfigurasikan layanan firewall apa pun yang Anda perlukan.
- Baik menetapkan alamat statis di konfigurasi tamu Anda atau di layanan DHCP Anda.
- Jika Anda menggunakan perute NAT, buka porta untuk layanan yang Anda implementasikan mengarahkannya ke alamat IP tamu.
Ingatlah untuk menguji dan mengaktifkan kembali layanan firewall untuk komputer host Anda. Mungkin perlu entri apa pun untuk meneruskan lalu lintas ke tamu.
Lihat https://help.ubuntu.com/community/KVM/Instalation , https://help.ubuntu.com/community/KVM/Networking , dan https://help.ubuntu.com/12.04/serverguide/libvirt. html .
ifconfig
,brctl show
,brctl showmacs br0
, danip route
. Pada tamu:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
, dantraceroute 8.8.8.8
. Saya tidak bisa mengatakan bahwa saya telah mengkonfigurasi kvm dengan cara yang Anda miliki, tetapi saya telah menjembatani untuk bekerja menggunakankvm
perintah. Saya memang harus memutuskan koneksi nirkabel sehingga tuan rumah saya akan terhubung ke Internet, dan, seperti yang dikatakan dalam petunjuk yang Anda kutip, Anda harus terhubung ke Internet dengan Ethernet.