Прелімінарії
Цей підхід працював для мене для Ubuntu 12.04. Ви повинні відключити брандмауер комп'ютера під час тестування цього, щоб він не заважав.
Файл / etc / default / qemu-kvm повинен бути як встановлений спочатку.
Вам потрібно буде встановити bridge-utils qemu-kvm та libvirt-bin . Будь-які користувачі, що використовують віртуальні машини, повинні бути додані до групи libvirtd.
Здається, більше не потрібно додавати можливості CAP_NET_ADMIN.
Налаштування мережі
Мережевим режимом за замовчуванням є Режим користувача, який також називається SLIRP. Він використовує заздалегідь заданий міст virbr0, який NAT направляється на гостьовий комп'ютер. На маршрутизації NAT використовується функція ip_forwarding ядра та iptables . У режимі Bridge використовується віртуальний міст у гості, до якого підключається (ненумерований) інтерфейс Ethernet, і на якому і хост, і гість мають свої мережеві інтерфейси.
Наступні схеми можуть зробити відмінності більш чіткими:
Ви можете бачити, як визначається користувацька мережа користувача за замовчуванням за допомогою:
virsh net-dumpxml default
Я можу встановити мостовий режим за допомогою наступних підходів:
В / etc / network / інтерфейси (з мостової частини публікації, яку ви згадуєте у своєму запитанні):
авто ло
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet керівництво
авто br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Перезавантажити; і переконайтеся, що бездротова мережа не активна. Перевірте IP-маршрут за замовчуванням за допомогою ip route
. Він повинен використовувати інтерфейс br0.
Примітка: Якщо ваша мережа Ethernet не підключена після внесення цієї зміни, вам потрібно підключити кабель Ethernet і підключити носій, або завантажувач зависне дві хвилини, і ви не будете мати можливості мережі. Це тому, що інтерфейс eth0, від Знаходячись у цьому файлі, він повинен з'явитися до того, як завантаження може нормально тривати.
NB Загалом, ви не можете використовувати бездротову мережу замість eth0 через їх неможливість використовувати декілька MAC-адрес (я вважаю, що для мосту їм потрібна друга).
В якості альтернативи ви можете відключити використання Ethernet і переконатися, що в ньому немає IP-адреси, і що не встановлено маршрут за замовчуванням ip route
. Потім:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
Тут ви також можете надати статичну IP-адресу, а також визначити маршрут за замовчуванням та DNS-адресу. Для цього прикладу dhclient
це робить.
Ось моя таблиця маршрутів:
$ ip список маршрутів
за замовчуванням через 192.168.1.1 dev br0 метрику 100
169.254.0.0/16 dev br0 метрика посилань на область дії 1000
192.168.1.0/24 dev br0 proto ядро області посилання src 192.168.1.45
192.168.122.0/24 dev virbr0 proto ядро області посилання src 192.168.122.1
Використовуючи kvm
Тоді я можу завантажувати мостову машину kvm за допомогою:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
В -netdev tap
марці параметрів Sudo вимоги. Коли VM запускається, qemu-kvm виконує такі команди:
ifconfig vnet0 0.0.0.0 up
brctl addif brctl addif br0 vnet0
Це робиться через / etc / qemu-ifup
Інтерфейс vnet0 VM доданий до мосту br0, тому що за типовим маршрутом вище використовується інтерфейс мосту. Якщо б не було, натомість інтерфейс tap додавався б до інтерфейсу virbr0. Оскільки це не підключено до Інтернету, в моїх експериментах NAT буде використовуватися для підключення гостя до хоста та Інтернету. Ви можете направити vnet0 на певний міст в / etc / default / qemu-kvm. Використовуючи virt-менеджер нижче, ви можете чітко направити, до якого мосту підключитися.
Через вищезазначені команди, видані qemu-kvm, і -netdev tap,id=tunnel,ifname=vnet0
параметр, віртуальна машина vm підключається до тунелю vnet0, а тунель підключається до мосту br0.
Тепер я можу безпосередньо перейти в цю гостьову машину з іншого комп'ютера в моїй мережі.
Мій хост ifconfig
(зверніть увагу на інтерфейс vnet0, який з’являється в моїй мережі під час роботи VM):
$ ifconfig
br0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
inet addr: 192.168.1.45 Bcast: 255.255.255.255 Маска: 255.255.255.0
inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Область застосування: Посилання
НАГОРОДЖЕННЯ РОЗКЛАДУВАННЯ МУЛЬТИКАСТ МТУ: 1500 метрик: 1
Пакети RX: 6526 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
TX-пакети: 7543 помилки: 0 випали: 0 перевитрати: 0 оператор: 0
зіткнення: 0 txqueuelen: 0
RX байти: 2712940 (2,7 МБ) TX байт: 1071835 (1,0 МБ)
eth0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
НАГОРОДЖЕННЯ РОЗКЛАДУВАННЯ МУЛЬТИКАСТ МТУ: 1500 метрик: 1
Пакети RX: 7181 помилок: 0 випали: 0 перевитрати: 0 кадр: 0
TX-пакети: 7740 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
зіткнення: 0 txqueuelen: 1000
RX байти: 2974585 (2,9 Мб) TX байт: 1096580 (1,0 МБ)
Перерва: 43 Базова адреса: 0x6000
lo Link encap: Local Loopback
inet addr: 127.0.0.1 Маска: 255.0.0.0
inet6 addr: :: 1/128 Область застосування: Хост
НАГОРОДНЕ РОЗВ'ЯЗАННЯ МТУ: 16436 Показник: 1
Пакети RX: 10 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
TX-пакети: 10 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
зіткнення: 0 txqueuelen: 0
RX байти: 664 (664,0 Б) TX байти: 664 (664,0 Б)
vnet0 Link encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Область застосування: Посилання
НАГОРОДЖЕННЯ РОЗКЛАДУВАННЯ МУЛЬТИКАСТ МТУ: 1500 метрик: 1
Пакети RX: 226 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
TX-пакети: 429 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
зіткнення: 0 txqueuelen: 500
RX байт: 26919 (26,9 КБ) TX байт: 58929 (58,9 КБ)
virbr0 Link encap: Ethernet HWaddr d6: 18: 22: db: ff: 93
inet addr: 192.168.122.1 Bcast: 192.168.122.255 Маска: 255.255.255.0
НАГОРОДЖЕННЯ МІЛЬТИКАСТ МТУ: 1500 метрик: 1
Пакети RX: 0 помилок: 0 випало: 0 перевитрат: 0 кадр: 0
TX-пакети: 0 помилок: 0 випало: 0 перевитрат: 0 оператор: 0
зіткнення: 0 txqueuelen: 0
RX байти: 0 (0,0 B) TX байти: 0 (0,0 B)
Моя конфігурація мосту під час роботи VM:
$ brctl шоу
Інтерфейси з підтримкою мосту Bridge ID ID STP
br0 8000.001e338807e5 немає eth0
vnet0
virbr0 8000.000000000000 так
Зауважте, що інтерфейс vnet0 віртуальної машини та інтерфейс eth0 підключені до мосту br0.
І MAC на інтерфейсі br0:
$ brctl showmacs br0
port no mac addr не є локальним? таймер старіння
1 00: 05: 5d: cf: 64: 61 ні 2,54
1 00: 19: d2: 42: 5d: 3f ні 36,76
1 00: 19: df: da: af: 7c ні 2.86
1 00: 1e: 33: 88: 07: e5 так 0,00
1 00: 60: 0f: e4: 17: d6 немає 0,79
2 52: 54: 00: 12: 34: 56 ні 0,80
1 58: 6d: 8f: 17: 5b: c0 ні 5,91
1 c8: aa: 21: be: 8d: 16 no 167.69
2 ca: 0c: 73: c3: bc: 45 так 0,00
Зауважте, що інтерфейс br0 підключає мій хост-комп'ютер до того ж мосту, який використовує гість.
За допомогою програми ви можете перевірити, чи є мост заміщеним, а не NAT traceroute 8.8.8.8
. Якщо перший вузол - це маршрутизатор вашої мережі, а не ip-адреса гостя, ваша мережа повинна працювати коректно.
Дивіться цю документацію .
virt-менеджер
Будьте впевнені, що ви встановили virt-manager
і hal
. hal
Пакет є запропонував залежність для virt-manager
і використовується для визначення мережевої конфігурації вашої системи при створенні або редагуванні гостей.
Маючи br0-міст, визначений вище, я створив віртуальну машину з virt-менеджером наступним чином:
Мені вдалося перейти безпосередньо до решти моєї домашньої мережі та до Інтернету від цього гостя. Мені також вдалося ввійти в нього з іншого (нехозяйного, не запрошеного) комп'ютера Ubuntu в моїй домашній мережі.
Ось дуже довга kvm
команда, яку виконує virt-менеджер (для порівняння з EApubs або будь-яким іншим, хто має проблеми з цим):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, розетки = 1, сердечники = 1, нитки = 1 -ім'я точне -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev socket, id = charmonitor, path = / var / lib / libvirt / qemu / preci.monitor, сервер, nowait -mon chardev = charmonitor, id = монітор, режим = контроль -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, якщо = немає, 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 -пристрій rtl8139, netdev = hostnet0, id = net0, mac = 52: 54: 00: 0e: da: 9b, шина = pci.0, addr = 0x3 -chardev pty, id = charserial0 -пристрій isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.0.1: 0 -vga cirrus -device intel-hda, id = sound0, шина = pci.0, addr = 0x4 -пристрій hda-duplex, id = sound0-codec0, шина = sound0.0,cad = 0 -пристрій virtio-balloon-pci, id = балон0, шина = pci.0, addr = 0x5
Ось мережева частина опису віртуальної машини в /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>
Згідно з цим посиланням, для продуктивності та надійності може бути найкращим чином встановити модель мережевого пристрою. virtio
Це можна зробити за допомогою віртуального переглядача, натиснувши кнопку i , перейти до налаштування NIC та встановити "Модель пристрою "до virtio
. Ви також можете додати це до XML вище, додавши рядок:
<model type='virtio'/>
Підсумки
Все, що відбулося 12.04:
- Встановлення virt-manager, bridge-utils, qemu-kvm та пов'язаних з ними пакетів
- Переконайтеся, що кожен користувач, який бажає використовувати kvm, знаходиться у групі libvirtd.
- Визначення / etc / network / інтерфейсів, як зазначено вище (які відповідають цитованій статті)
- Перезавантажте, переконайтесь, що Ethernet підключений, а бездротовий (якщо такий є) вимкнено.
- Або запустіть kvm проти зображення безпосередньо за допомогою, наприклад
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, або створіть віртуальну машину з virt-менеджером, вказавши мережевий міст br0 на панелі Крок 4-> Додаткові параметри.
Подальші зміни в мережах, можливостях, шаблонах чи конфігураціях не потребувались.
Щоб відкрити послугу свого нового гостя в Інтернеті, слід:
- Підготуйте та налаштуйте будь-яку службу брандмауера, яка вам знадобиться.
- Або призначте статичну адресу в гостьовій конфігурації або в службі DHCP.
- Якщо ви користуєтесь маршрутизатором NAT, відкрийте порт для послуги, яку ви реалізуєте, направляючи його на IP-адресу гостя.
Не забудьте перевірити та повторно включити службу брандмауера для вашого хост-комп'ютера. Може знадобитися будь-який запис для пересилання трафіку гостю.
Див. Https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking та https://help.ubuntu.com/12.04/serverguide/libvirt. html .
ifconfig
,brctl show
,brctl showmacs br0
, іip route
. На гостя:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
, іtraceroute 8.8.8.8
. Я не можу сказати, що я налаштував kvm так, як у вас є, але я змусив моститися працювати за допомогоюkvm
команди. Мені довелося відключити бездротовий зв'язок, щоб мій хост підключився до Інтернету, і, як сказано у вказаних вами напрямках, вам потрібно підключитися до Інтернету за допомогою Ethernet.