Mini How-to. Подключение ВМ qemu в локальную сеть
Настраивал я все это дело в последней (8) версии qemu, но думаю, что и в 6 принцип тот-же. В результате приведенных ниже настроек получаются две сети: реальная сеть (192.168.1.0/24) и виртуальная сеть (192.168.5.0/24), между которыми маршрутизатором является хост компьютер.
Сеть поднимается так:
Я делал сеть с использованием TUN/TAP интерфейса. Для этого ядро должно поддерживать этот интерфейс (я собрал его модулем):
hj@hj hj $ zcat /proc/config.gz |grep CONFIG_TUN
CONFIG_TUN=m
После подгрузки модуля
# modprobe tun
появляется устройство /dev/net/tun. Я выставил на него права 666.
Настройка этого интерфейса при запуске qemu настраивается при помощи скрипта /etc/qemu-ifup:
#!/bin/sh
sudo /sbin/ifconfig $1 192.168.5.1
Для того, чтобы виртуальная машина при запуске видела реальную машину по сети qemu надо запустить следующим образом:
$ qemu -hda ./win2kas.hd -net nic,vlan=0 -net tap,vlan=0
Эта команда говорит qemu, что надо создать сетевую карту в виртуальной машине, подключив ее к виртуальной сети 0 (-net nic,vlan=0) и поднять tap интерфейс на хост компьютере, также подключив его к виртуальной сети 0. Адрес для tap интерфейса берется из скрипта /etc/qemu-ifup (см. выше). Адрес сетевой карты в виртуальной машине конфигурируется стандартными средствами гостевой ОС и должен находится в той-же сети, что и адрес tap интерфейса. Например у меня настроено так: Адрес tap интерфейса: 192.168.5.1, а адрес сетевой карты в виртуальной машине: 192.168.5.2.
Для того, чтобы из виртуальной машины было видно локальную сеть нужно включить маршрутизацию на хост компьютере:
# echo 1 > /proc/sys/net/ipv4/ip_forward
в результате получается следующая кострукция сети:
+-----+ +----------------+ +---------+
| LAN |--|eth0 HOST tap0|--| VM Qemu |
+-----+ +----------------+ +---------+
т.е. хост компьютер получается маршрутизатором между виртуальной сетью и реальной сетью. Для того, чтобы гонять между этими сетями широковещательные пакеты и иметь общую arp таблицу, можно на хост компьютере поднять arp proxy.
Обращаться к ВМ можно по адресу 192.168.5.2.
Чтобы сделать так, что из сети видно ВМ так, как будто она подключена к реальной сети напрямую и имеет свой IP адрес можно сделать так:
поднять альяс eth который будет адресом нашей ВМ:
# ifconfig eth0:1 192.168.1.50 up
Затем используя пакет iptables настроить nat для нашей ВМ:
# iptables -t nat -A POSTROUTING -s 192.168.5.2 -j SNAT --to-source 192.168.1.50
# iptables -t nat -A PREROUTING -d 192.168.1.50 -j DNAT --to-destination 192.168.5.2
После этих манипуляций ВМ будет видна из реальной сети по адресу 192.168.1.50.
Для того, чтобы интерфейс eth0:1 и настройки iptables производились при старте qemu можно добавить эти строки в скрипт /etc/qemu-ifup, поставив перед каждой из строк команду sudo (т.к. все эти команды обычно требуют привилегий суперпользователя).
К сожалению в данной конфигурации в сетевом окружении ВМ не будет видно реальных машин из сети. Я думаю, что это можно исправить установив на хост компьютере ARP прокси. Для меня в данный момент эта задача пока не актуальна, если кто-нибудь решит ее можете написать мне, я добавлю ее к данному документу.
С наилучшими пожеланиями HJ.
P.S. Вопросы можете задавать в
(требует авторизации) или на email: мой_ник#acoustics.ru.