прелиминарии
Это следующее работает для меня для Ubuntu 12.04. Вы должны отключить брандмауэр вашего компьютера во время тестирования, чтобы он не мешал.
Файл / etc / default / qemu-kvm должен быть таким же, как изначально установлен.
Вам нужно будет установить bridge-utils qemu-kvm и libvirt-bin . Любые пользователи, использующие виртуальные машины, должны быть добавлены в группу libvirtd.
Кажется, больше нет необходимости добавлять возможность CAP_NET_ADMIN.
Настройка сети
Сетевым режимом по умолчанию является режим пользователя, также называемый SLIRP. Он использует предопределенный мост virbr0, который NAT направляется на гостевой компьютер. NAT-маршрутизация использует функцию ядра ip_forwarding и iptables . В режиме моста в гостевой системе используется виртуальный мост, к которому подключается (ненумерованный) интерфейс Ethernet и на котором у хоста и гостя есть свои сетевые интерфейсы.
Следующие диаграммы могут прояснить различия:
Вы можете увидеть, как сеть пользователя по умолчанию определяется с помощью:
virsh net-dumpxml default
Я могу настроить мостовой режим с помощью следующих подходов:
В / etc / network / interfaces (из той части поста, которую вы упоминаете в своем вопросе):
авто ло
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
авто eth0
iface eth0 inet инструкция
авто br0
iface br0 inet dhcp
bridge_ports eth0
Bridge_stp выключен
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 route list
по умолчанию через 192.168.1.1 dev br0 metric 100
169.254.0.0/16 dev br0 Метрика ссылки области видимости 1000
192.168.1.0/24 dev br0 Протока ядра, ссылка на источник src 192.168.1.45
192.168.122.0/24 dev virbr0 ссылка на ядро протока src 192.168.122.1
Использование 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 требования. При запуске виртуальной машины qemu-kvm выполняет следующие команды:
ifconfig vnet0 0.0.0.0 up
brctl addif brctl addif br0 vnet0
Это делается с помощью / etc / qemu-ifup
Интерфейс виртуальной машины vnet0 добавлен к мосту br0, потому что маршрут по умолчанию, используемый выше, использует этот интерфейс моста. Если бы этого не было, вместо этого интерфейс крана был бы добавлен к интерфейсу virbr0. Поскольку он не подключен к Интернету, в моих экспериментах NAT использовался для подключения гостя к хосту и Интернету. Вы можете направить vnet0 на конкретный мост в / etc / default / qemu-kvm. Используя virt-manager ниже, вы можете явно указать, к какому мосту подключаться.
Из-за вышеупомянутых команд, выпущенных qemu-kvm, и -netdev tap,id=tunnel,ifname=vnet0
параметра, виртуальная машина vm подключена к туннелю vnet0, а туннель подключен к мосту br0.
Теперь я могу напрямую подключиться к этой гостевой виртуальной машине с другого компьютера в моей сети.
Мой хост ifconfig
(обратите внимание на интерфейс vnet0, который появляется в моей сети, когда виртуальная машина работает):
$ Ifconfig
br0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
адрес в сети Интернет: 192.168.1.45 Bcast: 255.255.255.255 Маска: 255.255.255.0
inet6 адрес: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Область применения: ссылка
UP BROADCAST RUNNING MULTICAST MTU: 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
UP BROADCAST RUNNING MULTICAST MTU: 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
адрес в сети: 127.0.0.1 маска: 255.0.0.0
inet6 адрес: :: 1/128 Область применения: Host
UP LOOPBACK RUNNING MTU: 16436 Метрика: 1
Пакеты RX: 10 ошибок: 0 отброшено: 0 переполнений: 0 кадр: 0
Пакеты TX: 10 ошибок: 0 отброшено: 0 переполнений: 0 несущая: 0
столкновений: 0 txqueuelen: 0
Байты RX: 664 (664,0 B) байты TX: 664 (664,0 B)
vnet0 Link encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 адрес: fe80 :: c80c: 73ff: fec3: bc45 / 64 Область действия: ссылка
UP BROADCAST RUNNING MULTICAST MTU: 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: дБ: ff: 93
адрес в сети Интернет: 192.168.122.1 Bcast: 192.168.122.255 Маска: 255.255.255.0
UP BROADCAST MULTICAST MTU: 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)
Моя конфигурация моста во время работы виртуальной машины:
$ brctl show
имя моста идентификатор моста с поддержкой STP
br0 8000.001e338807e5 нет eth0
vnet0
virbr0 8000.000000000000 да
Обратите внимание, что как интерфейс виртуальной машины vnet0, так и интерфейс eth0 подключены к мосту br0.
И MAC на интерфейсе br0:
$ brctl showmacs br0
порт нет mac addr является локальным? таймер старения
1 00: 05: 5д: ср: 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 с8: аа: 21: бе: 8д: 16 нет 167,69
2 ca: 0c: 73: c3: bc: 45 да 0,00
Обратите внимание, что интерфейс br0 соединяет мой хост-компьютер с тем же мостом, который используется гостем.
Вы можете проверить, что вы соединены мостом, а не NAT направлен в вашу собственную сеть с помощью traceroute 8.8.8.8
. Если первый узел является маршрутизатором вашей сети, а не IP-адресом гостя, ваша сеть должна работать правильно.
Смотрите эту документацию .
вирт-менеджер
Будьте уверены, что вы установили virt-manager
и hal
. hal
Пакет является предложил зависимость для virt-manager
и используется для определения сетевой конфигурации вашей системы при создании или редактировании гостей.
Определив мост br0, как описано выше, я создал виртуальную машину с помощью virt-manager:
Я был в состоянии пойти непосредственно к остальной части моей домашней сети и к Интернету от этого гостя. Я также смог подключиться к нему с другого (не хостового, не гостевого) компьютера Ubuntu в моей домашней сети.
Вот очень длинная kvm
команда, запускаемая virt-manager (для сравнения с EApubs или кем-то еще, имеющим проблемы с этим):
/ usr / bin / kvm -S -M pc-1.0 -able-kvm -m 1024 -smp 1, сокеты = 1, ядра = 1, потоки = 1-точное имя -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev сокет, id = charmonitor, путь = / var / lib / libvirt / qemu / точный.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 - устройство intel-hda, id = sound0, bus = pci.0, addr = 0x4 - устройство hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0-девайс virtio-balloon-pci, id = balloon0, bus = 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
, вы можете сделать это в virt-viewer, нажав кнопку i , перейдя к настройке NIC и установив «Модель устройства». "к virtio
. Вы также можете добавить это в XML выше, добавив строку:
<model type='virtio'/>
В итоге
Все это заняло 12.04 было:
- Установка virt-manager, bridge-utils, qemu-kvm и связанных пакетов
- Убедитесь, что каждый пользователь, желающий использовать kvm, входит в группу libvirtd.
- Определение / etc / network / interfaces, как указано выше (которые соответствуют цитируемой статье)
- Перезагрузитесь, убедившись, что Ethernet подключен и беспроводная связь (если есть) отключена.
- Либо запустите kvm для образа напрямую, например
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, либо создайте виртуальную машину с помощью virt-manager, указав сетевой мост 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.