|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> qemu network
Сеть в qemu под FreeBSD
Автор: WhiteBear777.
  Наши задачи:
  1. Установить Qemu с модулем kqemu.ko под FreeBSD 7.0
  2. Установить в качестве гостевой ОС Windows XP
  3. Предоставить XP выход в домашнюю сеть и выход в интернет через ipnat(маскарадинг)
  4. Предоставить гостевой ОС выход в сеть с "реальным" IP и MAC адресом.
Предисловие.
  Я использую в качестве домашней системы FreeBSD 7.0 и уже писал, что она сочетает в себе всю мощь серверной операционной системы, а так же вполне подходит для домашнего использования. Так что будем работать на FreeBSD.
  Когда-то давно я использовал Windows XP на своей домашней машине и в качестве эмулятора был VMWare, а в качестве гостевой ОС была FreeBSD...
  Сейчас всё наоборот ;)
  У меня появилась необходимость поставить на FreeBSD эмулятор - qemu и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локальную сеть(домашка) и в сеть internet.
Решение родилось не сразу, но давайте по порядку.
 
1. Устанавливать Qemu будем из портов.
QEMU — свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ. Список поддерживаемых архтектур в "QEMU Emulator User Documentation" (/usr/local/share/doc/qemu/qemu-doc.html)
Установка:
#cd /usr/ports
#make search name="qemu"
| Из всего, что выдал поиск, нам нужно только:
Port: kqemu-kmod-1.3.0.p11_9
Path: /usr/ports/emulators/kqemu-kmod
Info: Kernel Accelerator for QEMU CPU Emulator
Port: qemu-0.9.1_10
Path: /usr/ports/emulators/qemu
Info: QEMU CPU Emulator
|   Ставим:
#cd /usr/ports/emulators/qemu
#make config
|  
  Устанавливаем галочку напротив пункта: [x] KQEMU Build with (alpha!) accelerator module, потому что qemu отличается очень быстрой эмуляцией при использовании специального модуля kqemu. kqemu позволяет выполнять инструкции виртуальной машины в обход системы виртуализации прямо на реальном процессоре.
 
  затем:
Настроим ядро.
После установки необходимо подготовить систему для работы с эмулятором.
Эмулятор требует, чтобы был загружен модуль aio.ko (asynchronous I/O). Добавляем в /etc/rc.conf запуск модуля - акселератора: kqemu_enable="YES" и стартовый скрипт подгрузит aio.ko, но я придерживаюсь того, чобы ядро было монолитно, поэтому добавил в конфиг ядра:
Добавить загрузку kqemu можно также прописав в /boot/loader.conf:
Для пунктов 3,4 нашей статьи нам понадобится добавить в ядро следующее:
tap - Ethernet tunnel software network interface — необходимо для сетевого взаимодействия хост машины с гостевой ОС
# Необходимо для ipnat
options IPFILTER
options IPFILTER_LOG
| Пересобираем ядро:
#cd /usr/src
#make buldkernel KERNCONF=newcore
#make installkernel KERNCONF=newcore
#shutdown -r now
| Если всё ок, то действуем дальше ;)
Вместо добавления опций в конфиг ядра и пересборки можно опять же подгрузить модули...
2. Ставим XP
  Необходимо создать образ для гостевой ОС перед установкой. Лично я храню все виртуальные машины в папке ~/vmachine и не пользуюсь графическими обёртками под qemu... ибо это не unix путь. Итак мы всё будем делать ручками, а так же создадим скрипты для запуска.
  Создаём образ:
  Образ создаётся очень просто с помощью утилиты qemu-img( QEMU disk image utility)
 
#qemu-img create windows.raw 4G
|   4 гигабайта меня вполне устроит )
Запускаем установку:
#qemu -hda windows.raw -cdrom /dev/acd0 -m 512 -boot d -localtime
|   -cdrom — можно вместо устройства указать образ, например: -cdrom /img/winxp.iso
  -hda — это жёсткий диск. Здесь мы указываем наш образ
  -m 512 — выделяем 512 мегабайт оперативной памяти. Тут всё зависит от вашей машины и от ваших предпочтений ;)
  -boot d — загрузка с cdrom. Если было бы -boot c , то загрузка началась бы с нашего образа.
  -localtime — устанавливает часы виртуальной машины в соответствие с локальными часами.
На самом деле модуль kqemu.ko под FreeBSD пока ещё нестабилен и во время инсталляции qemu либо вылетал, либо утсановщик подвисал. Именно поэтому я не использовал его во время инсталляции.
Вообщем пока это всё что необходимо для установки. Узнать о других параметрах qemu и посмотреть список поддерживаемого оборудования можно почитав man qemu или просто ввести qemu без параметров.
После установки Windows создадим загрузочный скрипт такого содержания:
#!/bin/sh
qemu -hda windows.raw \
-m 512 \
-boot c \
-localtime \
-kernel-kqemu \
-soundhw all \
-net nic \
-net tap
# -cdrom /dev/acd0 \
|
Появилось несколько новых параметров:
-kernel-kqemu — Включаем модуль акселерации.
-soundhw all — Включаем поддержку всех поддерживаемых эмулятором звуковых карт
-net nic — Создаём сетевой интерфейс для виртуальной машины
-net tap — и интерфейс для взаимодействия с виртуалной машиной на хост машине
Теперь можено запускать наш скрипт и грузиться в Windows XP.
3. Настройка сети и ipnat
Для того, чтобы сетевой интерфейс tap автоматически создавался при запуске FreeBSD, я прописал в /etc/devfs.conf:
Создать tap интерфейс можно и с помощью ifconfig.. Например:
Удаляется так же просто:
Также, чтобы обычный(непривилегированный) пользователь мог использовать интерфейс tap необходимо установить параметр sysctl:
sysctl net.link.tap.user_open =1
| Добавим его в /etc/sysctl.conf, чтобы после перезагрузки он не сбросился.
Существует скрипт, который по умолчанию запускается для настройки сети. Именно его мы и будем использовать для поднятия интерфейса tap. Расположен он в /usr/local/etc/qemu-ifup. Так же есть скрипт, который выполняется после выключения VM, и называется он qemu-ifdown.
Приведём qemu-ifup к следующему виду:
#!/bin/sh
/usr/local/bin/sudo /sbin/ifconfig $1 192.168.7.1
exec true
| Из скрипта понятно, что интерфейс хост машины будет 192.168.7.1. Именно параметр $1 будет содержать: tap0
Настроим сеть в Windows XP.
После запуска VM в XP у меня появился сетевой адаптер Realtec RTL 8029(AS) Установим :
IP-адрес: 192.168.7.2
Маску подсети: 255.255.255.0
Шлюз по умолчанию: 192.168.7.1
| В качестве "Предпочитаемого DNS сервера" необходимо установить DNS сервер вашего провайдера. С настройкой Windows мы закончили.
Теперь нужно настроить NAT(маскарадинг).
Для маршрутизации между сетевыми интерфейсами устанавливаем параметр sysctl в /etc/sysctl.conf:
Далее для автоматической загрузки Ipfilter и Ipnat добавляем в /etc/rc.conf следующее:
#Для работы ipnat необходимо чтобы ipfilter был включен
ipfilter_enable="YES"
ipfilter_program="/sbin/ipf"
ipfilter_rules="/etc/ipf.rules"
#Собственно сам ipnat
ipnat_enable="YES"
ipnat_program="/sbin/ipnat"
ipnat_rules="/etc/ipnat.rules"
| Пара правил разрешающих прохождение всех пакетов.
/etc/ipf.rules
pass in from any to any
pass out from any to any
| Запуск фильтра можно производить из командной строки:
# ipf -Fa -f /etc/ipf.rules
| Правила трансляции адресов записываются в файл /etc/ipnat.rules:
map nfe0 from 192.168.7.0/24 to any -> 10.X.X.6/32
map ng0 from 192.168.7.0/24 to any -> 172.X.X.77/32
| Эти два правила обеспечивают трансляцию пакетов из сети 192.168.7.0 в локальную сеть 10.X.X.0 (10.X.X.6 — мой ip адрес в домашней сети прова). nfe0 — это интерфейс физичесской сетевой карты хост машины, которая смотрит прямо в домашнюю сеть. ng0 — сетевой интерфейс интернет VPN соединения.
Запускаем ipnat из командной строки:
# ipnat -CF -f /etc/ipnat.rules
| Ключ -C удаляет все записи из таблицы ipnat, ключ -F удаляет все активные записи из таблицы трансляции.
Для контроля работы ipnat используются два ключа:
# Отображение Nat статистики
ipnat -s
# Показать таблицу текущих Nat отображений
ipnat -l
| После запуска, если мы всё настроили правильно, то Windows у нас сможет спокойно выходить в сеть. Но всё это будет работать через Nat.
4. Настройка сети и ifbridge
Итак мы хотим сейчас предоставить VM выход в "реальную" сеть, чтобы её там было видно по IP и MAC.
Реализовать это можно с помощью Моста(if_bridge). Для включения драйвера в ядро необходимо в конфиг ядра добавить опцию:
Опять же если не хотим использовать ядро, то можно добавить в /etc/loader.conf:
if_bridge_load="YES"
bridgestp_load="YES"
| Сейчас наш стратовый скрипт qemu-ifup приобретёт следующий вид:
#!/bin/sh
# Создаём интерфей моста
/usr/local/bin/sudo /sbin/ifconfig bridge0 create
# Доавляем интерфейсы между которыми будет мост
/usr/local/bin/sudo /sbin/ifconfig bridge0 addm nfe0 addm $1 up
exec true
| nfe0 — это интерфейс моей физичесской карты.
$1 — будет tap0
Сейчас мы не назначаем tap интерфейсу адреса, и поэтому он автоматичесски не поднимется. Для того, чтоб он поднялся, когда будет работать скрипт qemu-ifup необходимо установить параметр sysctl:
net.link.tap.up_on_open=1
| Вообщем сейчас можно запускать VM, настраивать адрес локальной сети, и машина будет доступна в сети по IP.
Если вам не надо, чтобы интерфейсы bridge0 или tap0 существовали после VM shutdown, то мы можем добавить в qemu-ifdown:
#!/bin/sh
/usr/local/bin/sudo /sbin/ifconfig bridge0 destroy
exec true
| Если вы работаете не из под root'a(а так и работают все нормальные пользователи) и вам не нравится каждый раз вводить пароль, чтобы использовать "sudo ifconfig", то можно выполнить такую команду:
# chmod u+s /sbin/ifconfig
| В этом случае непривелигированный пользователь сможет выполнять ifconfig, как если бы он был root'ом. Ещё раз напоминаю, что я использую FreeBSD в качестве домашней системы и вполне могу себе такое позволить. Если вы работаете на сервере, то лучше этого не делать. :)
Дополнительную информацию по qemu и kqemu можно найти в "QEMU Emulator User Documentation " (/usr/local/share/doc/qemu/qemu-doc.html), "QEMU Accelerator Technical Documentation" (/usr/local/share/doc/kqemu/kqemu-tech.html), а так же на сайте автора: http://bellard.org/qemu и в приведённом ниже списке литературы.
PS: пожалуйста, если вы нашли неточность или ошибку в статье, сообщите в комментариях или мне на личную почту.
Список литературы:
1.Журнал "Хакер №118" — Виртуальный полигон
2.Журнал "Системный администратор" №28 / 03.2005 — FreeBSD TIPS: использование NAT
3.wikipedia
4.man tap, man bridge, man ipnat, man qemu
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=13995.
размещено: 2009-04-24,
последнее обновление: 2009-04-24,
автор: WhiteBear777
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
|
Комментарии пользователей [14 шт.]