Czynności wstępne
To działało dla mnie dla Ubuntu 12.04. Podczas testowania należy wyłączyć zaporę komputera, aby nie przeszkadzała.
Plik / etc / default / qemu-kvm powinien być taki, jak pierwotnie zainstalowany.
Będziesz musiał zainstalować most-utils qemu-kvm i libvirt-bin . Dowolni użytkownicy korzystający z maszyn wirtualnych powinni zostać dodani do grupy libvirtd.
Wydaje się, że nie ma już potrzeby dodawania możliwości CAP_NET_ADMIN.
Ustawienia sieci
Domyślnym trybem sieci jest tryb użytkownika, zwany także SLIRP. Używa predefiniowanego mostu virbr0, który jest routowany przez NAT do komputera-gościa. Routing NAT korzysta z funkcji ip_forwarding jądra i iptables . Tryb mostowania używa wirtualnego mostu w gościu, z którym łączy się (nienumerowany) interfejs Ethernet i na którym zarówno host, jak i gość mają swoje interfejsy sieciowe.
Poniższe diagramy mogą wyjaśnić różnice:
Możesz zobaczyć, jak zdefiniowana jest domyślna sieć użytkownika za pomocą:
virsh net-dumpxml default
Mogę ustawić tryb zmostkowany za pomocą następujących metod:
W / etc / network / interfaces (z pomostowej części postu, o której wspomniałeś w swoim pytaniu):
auto lo
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
auto eth0
Instrukcja obsługi iface eth0 inet
auto br0
iface br0 inet dhcp
mosty_portowe eth0
bridge_stp wyłączony
bridge_fd 0
bridge_maxwait 0
Restart; i upewnij się, że sieć bezprzewodowa nie jest aktywna. Sprawdź domyślną trasę IP za pomocą ip route
. Musi używać interfejsu br0.
NB: Jeśli twój Ethernet nie jest podłączony po wprowadzeniu tej zmiany, musisz podłączyć kabel Ethernet i uzyskać nośnik , bo inaczej boot zawiesi się na dwie minuty i nie będziesz mieć możliwości sieciowych To dlatego, że interfejs eth0, przez znajdując się w tym pliku, musi pojawić się, aby rozruch mógł rozpocząć się normalnie.
Uwaga: Zasadniczo nie można używać sieci bezprzewodowej zamiast eth0 ze względu na ich niezdolność do używania wielu adresów MAC (wnioskuję, że potrzebują one drugiego dla mostu).
Alternatywnie możesz wyłączyć korzystanie z Ethernetu i upewnić się, że nie ma on adresu IP i że nie ma skonfigurowanej domyślnej trasy ip route
. Następnie:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
Możesz również podać tutaj statyczny adres IP, a także zdefiniować domyślną trasę i adres DNS. W tym przykładzie dhclient
robi to.
Oto moja tabela tras:
Lista tras $ ip
domyślnie przez 192.168.1.1 dev br0 metric 100
169.254.0.0/16 dev br0 zakres link metryka 1000
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.45
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
Korzystanie z KVM
Następnie mogę uruchomić zmostkowaną maszynę KVM za pomocą:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
Ten -netdev tap
parametr powoduje, że sudo jest wymagane. Podczas uruchamiania maszyny wirtualnej qemu-kvm uruchamia następujące polecenia:
ifconfig vnet0 0.0.0.0 w górę
brctl addif brctl addif br0 vnet0
Odbywa się to przez / etc / qemu-ifup
Interfejs vnet0 maszyny wirtualnej jest dodawany do mostu br0, ponieważ domyślna trasa powyżej używa tego interfejsu mostu. Jeśli nie byłoby, interfejs tap zostałby dodany do interfejsu virbr0. Ponieważ nie jest to połączone z Internetem, w moich eksperymentach NAT byłby używany do połączenia gościa z hostem i Internetem. Możesz skierować vnet0 do konkretnego mostu w / etc / default / qemu-kvm. Za pomocą virt-manager poniżej możesz bezpośrednio wskazać, z którym mostem się połączyć.
Z powodu powyższych poleceń wydanych przez qemu-kvm i -netdev tap,id=tunnel,ifname=vnet0
parametru maszyna wirtualna vm jest podłączona do tunelu vnet0, a tunel jest podłączony do mostu br0.
Teraz mogę bezpośrednio ssh do tej gościnnej maszyny wirtualnej z innego komputera w mojej sieci.
Mój host ifconfig
(zwróć uwagę na interfejs vnet0, który pojawia się w mojej sieci, gdy maszyna wirtualna jest uruchomiona):
$ ifconfig
br0 Linkowanie: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
adres inet: 192.168.1.45 Emisja: 255.255.255.255 Maska: 255.255.255.0
inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Zakres: Link
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
Pakiety RX: 6526 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
Pakiety TX: 7543 błędy: 0 usunięte: 0 przekroczeń: 0 operator: 0
kolizje: 0 txqueuelen: 0
RX bajtów: 2712940 (2,7 MB) TX bajtów: 1071835 (1,0 MB)
eth0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
Pakiety RX: 7181 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
Pakiety TX: 7740 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
kolizje: 0 txqueuelen: 1000
Bajty RX: 2974585 (2,9 MB) bajty TX: 1096580 (1,0 MB)
Przerwanie: 43 Adres bazowy: 0x6000
lo Link encap: Lokalna pętla zwrotna
adres inet: 127.0.0.1 Maska: 255.0.0.0
inet6 addr: :: 1/128 Zakres: Host
UP UP LOOPBACK RUNNING MTU: 16436 Metryczne: 1
Pakiety RX: 10 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
Pakiety TX: 10 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
kolizje: 0 txqueuelen: 0
RX bajtów: 664 (664,0 B) TX bajtów: 664 (664,0 B)
vnet0 Link encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Zakres: Link
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
Pakiety RX: 226 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
Pakiety TX: 429 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
kolizje: 0 txqueuelen: 500
Bajty RX: 26919 (26,9 KB) Bajty TX: 58929 (58,9 KB)
virbr0 Link encap: Ethernet HWaddr d6: 18: 22: db: ff: 93
adres inet: 192.168.122.1 Transmisja: 192.168.122.255 Maska: 255.255.255.0
UP BROADCAST MULTICAST MTU: 1500 Metryczne: 1
Pakiety RX: 0 błędów: 0 odrzuconych: 0 przekroczeń: 0 ramek: 0
Pakiety TX: 0 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
kolizje: 0 txqueuelen: 0
Bajty RX: 0 (0,0 B) Bajty TX: 0 (0,0 B)
Moja konfiguracja mostu podczas uruchamiania maszyny wirtualnej:
pokaż brctl
nazwa mostu identyfikator mostu Interfejsy włączone STP
br0 8000.001e338807e5 bez eth0
vnet0
virbr0 8000.000000000000 tak
Zauważ, że zarówno interfejs vnet0 maszyny wirtualnej, jak i interfejs eth0 są podłączone do mostka br0.
A MAC na interfejsie br0:
$ brctl showmacs br0
port żaden adres MAC nie jest lokalny? licznik czasu starzenia
1 00: 05: 5d: cf: 64: 61 nr 2.54
1 00: 19: d2: 42: 5d: 3f nr 36,76
1 00: 19: df: da: af: 7c nr 2.86
1 00: 1e: 33: 88: 07: e5 tak 0,00
1 00: 60: 0f: e4: 17: d6 nie 0,79
2 52: 54: 00: 12: 34: 56 nr 0,80
1 58: 6d: 8f: 17: 5b: c0 nr 5,91
1 c8: aa: 21: be: 8d: 16 nr 167,69
2 ca: 0c: 73: c3: bc: 45 tak 0,00
Zauważ, że interfejs br0 łączy mój komputer-host z tym samym mostem, z którego korzysta gość.
Za pomocą możesz sprawdzić, czy jesteś zmostkowany, a nie NAT skierowany do własnej sieci traceroute 8.8.8.8
. Jeśli pierwszym węzłem jest router sieci, a nie adres IP gościa, sieć powinna działać poprawnie.
Zobacz tę dokumentację .
virt-manager
Upewnij się, że zainstalowałeś virt-manager
i hal
. hal
Pakiet to sugeruje zależność dla virt-manager
i jest używany do określenia konfiguracji sieciowej systemu podczas tworzenia lub edytowania gości.
Mając zdefiniowany powyżej most br0, stworzyłem maszynę wirtualną z virt-managerem w następujący sposób:
Od tego gościa mogłem przejść bezpośrednio do reszty mojej sieci domowej i Internetu. Byłem także w stanie ssh do niego z innego komputera Ubuntu (nie hosta, gościa) w mojej sieci domowej.
Oto bardzo długie kvm
polecenie uruchamiane przez virt-manager (dla porównania z EApubami lub innymi problemami z tym):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, gniazda = 1, rdzenie = 1, wątki = 1 -nazwa precyzyjne -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev gniazdo, id = charmonitor, ścieżka = / var / lib / libvirt / qemu / precision.monitor, serwer, nowait -mon chardev = charmonitor, id = monitor, tryb = kontrola -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, jeśli = brak, id = drive-ide0-0-0, format = qcow2 -device ide-drive, bus = ide.0 , unit = 0, drive = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0-urządzenie 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 - urządzenie virtio-balloon-pci, id = balon0, bus = pci.0, addr = 0x5
Oto część sieciowa opisu maszyny wirtualnej w /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>
Zgodnie z tym linkiem, dla wydajności i niezawodności, najlepiej ustawić model urządzenia sieciowego virtio
, możesz to zrobić w przeglądarce virt, naciskając przycisk i , przechodząc do ustawienia karty sieciowej i ustawiając „Model urządzenia „do virtio
. Możesz również dodać to do powyższego kodu XML, dodając wiersz:
<model type='virtio'/>
W podsumowaniu
Wszystko to zajęło 12.04:
- Instalowanie virt-manager, bridge-utils, qemu-kvm i powiązanych pakietów
- Upewnij się, że każdy użytkownik, który chce użyć KVM, należy do grupy libvirtd.
- Definiowanie / etc / network / interfaces jak wyżej (które pasują do cytowanego artykułu)
- Uruchom ponownie, upewniając się, że Ethernet jest podłączony i bezprzewodowy (jeśli występuje) jest wyłączony.
- Uruchom kvm bezpośrednio na obrazie, np.
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
Lub utwórz maszynę wirtualną z virt-managerem, określając mostek sieciowy br0 w panelu Krok 4> Opcje zaawansowane.
Nie trzeba było wprowadzać żadnych dalszych zmian w sieci, możliwościach, szablonach ani konfiguracjach.
Aby udostępnić usługę nowemu gościowi w Internecie, należy:
- Przygotuj i skonfiguruj dowolną potrzebną zaporę ogniową.
- Przydziel adres statyczny w konfiguracji gościa lub w usłudze DHCP.
- Jeśli używasz routera NAT, otwórz port dla wdrażanej usługi i przekieruj go na adres IP gościa.
Pamiętaj, aby przetestować i ponownie włączyć usługę zapory na komputerze-hoście. Może wymagać dowolnego wpisu, aby przekazać ruch gościowi.
Zobacz https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking i https://help.ubuntu.com/12.04/serverguide/libvirt. HTML .
ifconfig
,brctl show
,brctl showmacs br0
, iip route
. Na gości:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
, itraceroute 8.8.8.8
. Nie mogę powiedzieć, że skonfigurowałem KVM tak jak ty, ale zacząłem mostkować się do pracy za pomocąkvm
polecenia. Musiałem rozłączyć sieć bezprzewodową, aby mój host mógł połączyć się z Internetem i, zgodnie z podanymi przez ciebie wskazówkami, musisz połączyć się z Internetem za pomocą Ethernetu.