VBoxManage modifyvm "Win7-64" --autostart-enabled on

 

http://nikmy.ru/index.php/stati/linux/set-internet/161-ustanovka-gostevykh-dopolnenij-i-montazh-obshchikh-papok-v-virtualbox-virtualnykh-mashin-v-phpvirtualbox.html

 

Автозапуск гостевой OS в VirtualBox 4.2

Предварительная конфигурация:

Редактируем файл:

nano /etc/default/virtualbox

VBOXAUTOSTART_DB=/etc/vbox

VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg

VBOXAUTOSTART_DB - database directory (не имет отношение к директории хранения гостевыхOS)

VBOXAUTOSTART_CONFIG - location of the autostart config settings (каталог для хранения настроек)

 

Создадим файл:

nano /etc/vbox/vbox.cfg default_policy=deny <имя пользователя>={allow=true}

Запуск запрещён, разрешать "deny" "allow"

Создаём правило для каждого пользователя <имя пользователя>={allow=true}.

Если вы являетесь единственным пользователем, то вы можете просто вписать так:

default_policy=allow

Устанавливаем права:

chgrp vboxusers /etc/vbox chmod 1775 /etc/vbox

Добавляем каждого из пользователей в группу vboxusers.

usermod -G vboxusers <имя пользователя>

Проверяем командой:

groups <имя пользователя>

Получим что то вроде:

sadmin : sadmin oinstall vboxusers ls -l /etc | grep vbox

Каждый пользователь, который хочет включить автозапуск для отдельных машин должна указать путь к каталогу базы данных /etc/vbox командой:

VBoxManage setproperty autostartdbpath /etc/vbox

Собственно autostart:

VBoxManage modifyvm <Имя ВиртуалOS> --autostart-enabled on

И смотрим в каталоге /etc/vbox там появился такой файл:

<Имя Пользавателя>.start


Проверяем работу службы vboxautostart-service

service vboxautostart-service restart

у меня нет параметра restart только {stop|start}

Перезагружаем систему и смотрим как запустилась ВиртуалOS.

Запуск от времени старта Host OS:

Вы также можете установить отсрочку старта для виртуальной машины с помощью следующей команды. Время в секундах:

VBoxManage modifyvm <Имя Виртуалки> --autostart-delay 30

Отключение autostart:

VBoxManage modifyvm <Имя ВиртуалOS> --autostop-type savestate

При обновлении до Freebsd 9.1 , вы можете столкнуться с такой вот ошибкой. Читаем /usr/src/UPDATING

ERROR: Required auditdistd user is missing, see /usr/src/UPDATING.
*** [installcheck_UGID] Error code 1

Stop in /usr/src.
*** [installkernel] Error code 1

Stop in /usr/src.
[MNIHKLOM] /usr/src#

Решение: добавляем юзера
pw useradd -n auditdistd -g audit -c "Auditdistd unprivileged user" -d /var/empty -s /usr/sbin/nologin

и снова запускаем make buildkernel KERNCONF=ИМЯ_ЯДРА && make installkernel KERNCONF=ИМЯ_ЯДРА

Проблема

Почтовый сервер postfix связка amavisd-new

писма попадают в карантин надо доставить их адрессату

Решение

#amavisd-release banned-XdUJwZbvec7L

250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 201ED1CB4BF3

 

Midnight Commander (mc, миднайт-командер, «полуночный командир») — один из консольных файловых менеджеров с текстовым интерфейсом типа Norton Commander для UNIX-подобных операционных систем, а также Microsoft Windows и Windows NT, OS/2, Mac OS X (но не Mac OS 9).


Ctrl и Shift обозначают соответствующие клавиши клавиатуры, Meta - условное обозначение для набора мета-клавиш, на современном PC это обычно Alt или Esc.

http://www.freebsd.org/doc/ru/books/handbook/ipsec.html
Создание VPN во FreeBSD 7.0 (IPSec, racoon, pf, nat)

В данной статье я приведу пример личного опыта по созданию защищённого туннеля между двумя сетями (офисами). Шлюзом для каждого из офисов будет выступать машина на FreeBSD 7.0. Процесс создания VPN через IPSec во FreeBSD 7.0 имеет несколько принципиальных различий, что и послужило толчком для написания данной статьи.

Будем считать, что система уже установлена и перейдем сразу к процессу настройки.
Внимание! Все действия, описанные в данной статье, необходимо выполнять с правами пользователя root.

Исходные данные:

офис #1:
внешний адрес сервера - 111.111.111.111;
внутренний адрес сервера - 192.168.1.1;
адрес внутренней офисной сети - 192.168.1.0/24.

офис #2:
внешний адрес сервера - 222.222.222.222;
внутренний адрес сервера - 192.168.2.1;
адрес внутренней офисной сети - 192.168.2.0/24.

1. Обновления системы и дерева портов

обновляем систему, используя утилиту для бинарного обновления системы - freebsd-update:

freebsd-update fetch && freebsd-update install

скачиваем и обновляем коллекцию портов

portsnap fetch
portsnap extract

2. Пересборка ядра системы

Для работы IPSec и pf на уровне ядра необходимо пересобрать ядро. Для этого скопируем файл настройки ядра GENERIC под некоторым именем.

cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/MYKERNEL

затем необходимо добавить в наш файл следующие строчки:

options IPSEC
device crypto

Внимание! Для работы IPSEC во FreeBSD, начиная с версии 7.0, необходимо указывать только эти строчки!

Как я уже упомянул выше, мы будем использовать фаервол pf, который также будет транслировать адреса (NAT) в нашу внутреннюю сеть. pf отличается простой настройкой и высокой скоростью работы, т.к. он работает на уровне ядра + в него встроена поддержка трансляции адресов NAT.

Добавляем поддержку нашего фаервола pf:

device pf
device pflog
device pfsync

собираем наше новое ядро:

cd /usr/src

make buildkernel KERNCONF=MYKERNEL
make installkernel KERNCONF=MYKERNEL

Когда наше ядро собралось, необходимо перезагрузиться

reboot

3. Установка пакета ipsec-tools

cd /usr/ports/security/ipsec-tools
make install clean

в начале установки будет предложено выбрать опции для установки. Я убрал поддержку IPv6, NATT, HYBRID.
Демон racoon, необходимый для шифрования данных, уже включён в пакет ipsec-tools и установится автоматически.

4. Настраеваем фаервол pf с трансляцией nat'а

Внимание! Для того, чтобы наш сервер выпускал соединения из локальной сети, в /etc/rc.conf должен обязательно присутствовать параметр gateway_enable="YES". Создаем файл /etc/pf.conf:

# vr0 - имя сетевой карточки, смотрящей в офисную сеть
int_if="vr0"
# rl0 - имя сетевой карточки, смотрящей в интернет
ext_if="rl0"

localnet="192.168.1.0/24"

#определяем через переменные ip-адреса офисов
office1_ip="111.111.111.111"
office2_ip="222.222.222.222"

#опять таки, через переменную перечисляем какие порты выпускать из офиса во внешний мир
tcp_ports="{22,80,443,25,110,465,995,5190}"
udp_ports="{53}"

#не фильтруем трафик, проходящий по интерфейсу lo0 (интерфейс внутренней петли), gif0 (виртуальный туннель между офисами) и $int_if (интерфейс внутренней офисной сети)
set skip on lo0
set skip on gif0
set skip on $int_if

#отбрасываем входящие пакеты, с нестандартными опциями
scrub in all

#создаем правило трансляции адресов из офисной сети во внешний мир
nat on $ext_if from $localnet to any -> ($ext_if)

#включаем антиспуфинг для внешнего интерфейса
antispoof quick for $ext_if

#блокируем все по умолчанию
block all

#разрешаем доступ из офисной сети во внешний мир портам, перечисленным в переменных tcp_ports и udp_ports:
pass out on $ext_if proto tcp to any port $tcp_ports keep state
pass out on $ext_if proto udp to any port $udp_ports keep state

#разрешаем доступ к нашей машине по ssh из внешнего мира
pass in inet proto tcp from any to $ext_if port 22 keep state

#разрешаем пинг
pass inet proto icmp all

#разрешаем исходящий трафик IPSec с офиса 1 на офис 2
pass out quick on $ext_if proto udp from office1_ip port = isakmp to office2_ip port = isakmp
pass out quick on $ext_if proto esp from office1_ip to office2_ip
pass out quick on $ext_if proto ipencap from office1_ip to office2_ip

#разрешаем входящий трафик IPSec, пришедший с офиса 2 на офис 1
pass in quick on $ext_if proto udp from office2_ip port = isakmp to office1_ip port = isakmp
pass in quick on $ext_if proto esp from office2_ip to office1_ip
pass in quick on $ext_if proto ipencap from office2_ip to office1_ip

Это были приведены настройки сервера офиса 1, для второй машины необходимо поменять IP-адреса зеркально.
Для проверки правил (на случай если вы допустили где-то синтаксическую ошибку) можно воспользоваться командой pfctl -n -f /etc/pf.conf

Добавляем в /etc/rc.conf:

#включим наш фаервол на этапе загрузки системы
pf_enable="YES"
#указываем откуда загружать правила
pf_rules="/etc/pf.conf"
#указываем где находится программа для управления pf
pf_program="/sbin/pfctl"
pf_flags=""

#включаем логирования для pf
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
pflog_flags=""
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig=""

После перезагрузки мы получим рабочий шлюз на FreeBSD с NAT.

5. Настройка VPN

Создаем файл /etc/ipsec.conf, в котором будет описываться политика шифрования проходящего трафика между нашим виртуальным туннелем.

#!/usr/local/sbin/setkey -f
flush;
spdflush;

spdadd 192.168.1.0/24 192.168.2.0/24 any -P out ipsec
esp/tunnel/111.111.111.111-222.222.222.222/require;

spdadd 192.168.2.0/24 192.168.1.0/24 any -P in ipsec
esp/tunnel/222.222.222.222-111.111.111.111/require;

Это я привел пример настройки для сервера первого офиса. Для второй машины надо просто поменять IP местами.

Переходим в директорию /usr/local/etc, где создадим каталог racoon

cd /usr/local/etc
mkdir racoon
cd racoon

создаем файл racoon.conf следующего содержания:

#указываем где будет лежать файл, с фразой авторизации
path pre_shared_key "/usr/local/etc/racoon/psk.txt";

#указываем на каком интерфейсе слушать соединения
listen
{
isakmp 111.111.111.111;
}

#указываем, что любой аутентифицированный хост будет приниматься как anonymous. Вместо anonymous можно указать ip-адрес удаленного сервера.

remote anonymous
{
exchange_mode aggressive;

my_identifier address;

lifetime time 24 hour;

proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
}

sainfo anonymous
{
pfs_group 2;
lifetime time 12 hour;
encryption_algorithm 3des, blowfish, des, rijndael;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
}

Соездаем файлик psk.txt, в котором будет храниться фраза аутентификации удаленного хоста.
Синтаксис psk.txt такой:

ip_удаленного_хоста фраза

Например, для первой машины это будет:

222.222.222.222 sometext

А для второй:

111.111.111.111 sometext

Устанавливаем соответствующие права на psk.txt (обязательно!)

chmod 600 psk.txt

Теперь переходим в /usr/local/etc/rc.d

cd /usr/local/etc/rc.d

После установки пакета ipsec-tools там появится скрипт для запуска демона шифрования racoon. Мы его удалим и создадим на его месте новый, более простой скрипт. (Лично у меня возникали непонятные глюки при использовании стандартного скрипта).

rm racoon

Затем создаем файл racoon.sh со следующим содержанием:

#!/bin/sh

case "$1" in

start)
if [ -x /usr/local/sbin/racoon ]; then
/usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf \
&& echo -n ' racoon'
fi
;;

stop)
/usr/bin/killall racoon && echo -n ' racoon'
;;

*)
echo "Usage: `basename $0` { start | stop }"
exit 64
;;
esac

Устанавливаем для racoon.sh флаг +x (для того, чтобы этот скрипт был исполняемым).

chmod +x racoon.sh

racoon.sh лежит в каталоге /usr/local/etc/rc.d, и будет сам автоматически запускаться вместе с загрузкой системы.

Добавляем в /etc/rc.conf:

# включим racoon
racoon_enable="YES"
racoon_flags="-F -f /usr/local/etc/racoon/racoon.conf"

#включим ipsec
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"

#создаем виртуальный gif-интерфейс
gif_interfaces="gif0"
gifconfig_gif0="111.111.111.111 222.222.222.222"
ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff"

#прописываем статический рутинг для удаленной сети
static_routes="vpn"
route_vpn="192.168.2.0/24 -interface gif0"
После перезагрузки должен появиться виртуальный интерфейс gif0.
Внимание! Соединение VPN устанавливается не моментально! Обычно в течении 10 секунд, после того как прийдет пакет, необходимый для отправки по VPN.

6. Защита сервера

После настройки VPN хорошо бы позаботиться о безопасности наших серверов.

Добавляем в /etc/sysctl.conf:

#устанавливаем так называемую "черную дыру" для пакетов, приходящих на закрытый порт, что усложняет процесс сканирования злоумышленником портов.
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1

net.inet.ip.random_id=1

#указываем размер очереди сокета
kern.ipc.somaxconn=1024

# отрубаем ip-редиректы
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0

# определяем размеры буфера для TCP-подключений
net.inet.tcp.sendspace=32768
net.inet.tcp.recvspace=32768

# обновляем ARP-таблицу каждые 20 минут
net.link.ether.inet.max_age=1200

# запрещаем отвечать на все лишние запросы

net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0
Добавляем в /etc/rc.conf

# включаем удаленный доступ по ssh
sshd_enable="YES"
# отключаем sendmail
sendmail_enable="NONE"
# очищаем каталог /tmp при каждой загрузке системы
clear_tmp_enable="YES"
portmap_enable="NO"
icmp_bmcastecho="NO"
fsck_y_enable="YES"
log_in_vain="YES"

Мы открыли доступ извне для подключения на наш ssh сервер. Рано или поздно в логах можно будет увидеть, что кто-то пытался подключиться и перебирал пару логин/пароль. При использовании сложного пароля атака с перебором пароля практически не грозит. Но все же немного не спокойно.
Для автоматического блокирования "переборщиков паролей" существует отличная утилита sshit, причем очень простая в настройке и использовании.
Устанавливаем sshit:

cd /usr/ports/security/sshit/
make install clean

затем добавляем в /etc/syslog.conf

после строчки:
auth.info;authpriv.info /var/log/auth.log
строчку:
auth.info;authpriv.info |exec /usr/local/sbin/sshit

в файл конфигурации фаервола /etc/pf.conf добавляем после правила block all:

table < badhosts > persist
block quick on $ext_if from < badhosts > to any

в файле настройки /usr/local/etc/sshit.conf увеличиваем параметр RESET_IP (время в секундах, на сколько блокировать нежелательный хост)

RESET_IP = 86400

Теперь при трех неудачных попытках авторизоваться, удаленный хост будет заблокирован на сутки.
Перезагружаемся.

У меня уже через час появился один заблокированный адрес.
Просмотреть список заблокированных адресов можно так:

pfctl -t badhosts -T show

Для мониторинга сетевых соединений в режиме реального времени есть очень удобная и простая утилита - pftop, которая находится в портах и работает по принципу стандартной unix-овой команды top.

cd /usr/ports/sysutils/pftop/
make install clean

Вот собственно и все. Мы соединили два офиса в одну сеть. Аналогичным образом можно подключить несколько сетей.

1. Обновления системы и дерева портов

обновляем систему, используя утилиту для бинарного обновления системы - freebsd-update:

 freebsd-update fetch && freebsd-update install

скачиваем и обновляем коллекцию портов

portsnap fetch
portsnap extract

1
# ntfs-3g -o rw,locale=ru_RU.UTF-8 /dev/ad0s1 /mnt/disk_c

можно монтировать еще так

1
# ntfs /dev/ad0s1 /mnt/disk_c

Теперь можно не только копировать с монтированого диска, но и записывать на него, создавать директории ну и естественно удалять каталоги/файлы :)

Задача.

В наличии есть боевой сервер под управление FreeBSD 9.1

есть гипервизор на базе Virtualbox под управление Ubuntu

перенести боевой сервер с вируальную среду.

Решение

1. Создаем виртуальную машину с 2 дисками 100 гигов и 50 для бекапа

2. Ставим  любую FreeBSD версию хоть с LiveCD

Порядок действий.

1. Присоединяем второй новый винчестер к станции (например, как слейв - он появится в системе как /dev/ad1)

2. Создаем на новом винчестере FreeBSD - раздел (c атрибутом "загрузочный") и размечаем его на данные и swap (например, через /stand/sysinstall).

3. Инсталлируем на новый винчестер bootlader

boot0cfg /dev/ad1

4. Запускаем СТАНЦИЮ c новым винчестером в качестве мастера. Убеждаемся, что загружается бутлоадер

5. Опять включаем станцию с новым винчестером в качестве слейва, загружаемся.

6. Маунтим новый винчестер и переходим в раздел

mount /dev/ad1s1a /mnt cd mnt

6. Запускаем процесс dump restore через ssh следующей командой

ssh user-on-server@server 'sudo dump -af- /dev/ad0s1a' | restore -rf-

Пояснения

user-on-server - аккаунт на сервере, который может выполнять команды от рута с помощью sudo

server - имя или ip сервера, с которого будем делать дамп

sudo - команда, которая позволяет обычному пользователю выполнить команду из под рута. если ее нет или она не настроена на этого пользователя, то надо настроить sshd на сервере таким образом, чтобы можно было заходить в систему по ssh рутом (это можно сделать в ssh.conf) и тогда вместе user-on-server использовать root.

 

/dev/ad0s1a - это тот партишн, который мы хотим сдампить на сервере (он может быть и другим в зависимости от того как размечен на сервере диск). Посмотреть какую партицию надо дампить можно командой df.

 

7. После этого Вас спросят пароль пользователя на СЕРВЕР и пойдет процесс dump restore.

PS. Можно также с самого сервера пускать дамп сервера и писать на удаленной машине в файл. Например, вот такой командой

 

sudo dump -af- /dev/ad0s1a | bzip2 | ssh someuser@server-to-dump 'sudo dd of=/dumps/gw-070105-root.dump.bz2'

dump -0au -f - /dev/da0p2 | bzip2 | ssh Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. -p 22 dd of=/mnt/palladin.dump

без использование копий журналирования

с использованием snapshot указываем параметр

dump -0auL 

Если действительно дело в журналировании, то его можно отключить так:
tunefs -J disable /dev/adaxxx
tunefs -n disable /dev/adaxxx
tunefs -j disable /dev/adaxxx

 

 rsync -avz --exclude '/dev' --exclude '/proc' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:/ /

 
rsync -avz --exclude '/dev' --exclude '/proc' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:/ /

 

Ставим на обои машины rsync

На копируемой машине включаем логин от рута

C новой машины 
rsync -avz --exclude '/dev' --exclude '/proc' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:/ /

Процесс копирования пошел.

 

Исходные данные
1. Freebsd
#uname -a
FreeBSD ultra.vesp.ru 9.1-RC2 FreeBSD 9.1-RC2 #0 r241106: Mon Oct 1 18:26:44 UTC 2012 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:/usr/obj/usr/src/sys/GENERIC amd64
(Фри 64 бита)
2. Windows XP диск, либо его образ
-----------------------------------------------------
Задача
1. Установить WinXP
2. подключить сеть
3. Настроить контролируемый доступ
4. запустить демоном
5. забыть о его существовании как виртуализация. :)
-----------------------------------------------------

Для подключения сети будем использовать if_bridge который будет модулем подгружаться в ядро.

% cd /usr/ports/emulators/qemu/
sudo make config
(работаем от юзера с настроенным sudo)

Отмечаем для компилятора модуль KQEMU

[*] ADD_AUDIO Emulate more audio hardware (experimental!) | |
[*] ALL_TARGETS Also build non-x86 targets | |
[*] CDROM_DMA IDE CDROM DMA | |
[*] CURL libcurl dependency (remote images) | |
[*] GNS3 gns3 patches (udp, promiscuous multicast) | |
[*] GNUTLS gnutls dependency (vnc encryption) | |
[*] KQEMU Build with (alpha!) accelerator module | |
[*] PCAP pcap dependency (networking with bpf) | |
[*] RTL8139_TIMER allow use of re(4) nic with FreeBSD guests | |
[ ] SAMBA samba dependency (for -smb) | |
[*] SDL SDL/X dependency (graphical output)

Компилируем, устанавливаем, убираем грязь

%sudo make install clean
%rehash

У меня так, но скорее всего с самбой было бы лучше, но это не важно эмулятор работать будет.

Ждем не долгий процесс компиляции (за что мне нравится этот эмулятор).

2. Подгружаем модуль ускорителя KQEMU (эмулятор работает без него но очень заметно подтормаживает, с KQEMU будет комфортнее)
%sudo kldload kqemu

Чтобы модуль подгружался при загрузке, нужно добавить строку в конфигурационный файл /boot/loader.conf:
kqemu_load="YES"
Подгружаем модуль асинхронного ввода-вывода
%sudo kldload aio
и тоже заносим его в файл загрузки ядра /boot/loader.conf
aio_load="YES"
Убедимся что все нормально.
%kldstat
6 1 0xffffffff8157e000 f4d0 aio.ko
9 1 0xffffffff82478000 2bdf0 kqemu.ko

3. Создаем образ жесткого диска, на который далее будем ставить Windows
%mkdir ./VirtualPC
%qemu-img create ./VirtualPC/WinXP.img 20G

Делаем образ HDD 20 гигов (ну кто на что горазд)

3. Устанавливаем WinxP (у меня есть диск потому я буду ставить из устройства, но можно ставить из образа iso)

$ qemu -localtime -m 512 -boot d -cdrom /dev/cd0 -hda ./VirtualPC/WinXP.img -name "Windows"

-localtime устанавливает время в Windows равным времени FreeBSD
-m задает размер памяти в мегабайтах, которая будет выделена для Windows
-boot говорит QEMU откуда нужно загружаться (d - компакт-диск, c - жесткий диск)
-cdrom указывает путь к компакт-диску
-hda указывет путь к жесткому диску
-name выводит в заголовке окна QEMU название запущенной в нем операционной системы (необязательная опция, чисто для красоты)

Проводим установку.
Стартуем.
$ qemu -localtime -m 512 -boot с -cdrom /dev/cd0 -hda ./VirtualPC/WinXP.img -name "Windows"

4. Подключение сети. (в сети водится DHCP сервер, так что все настройки ip протокола виртуальной машины ложится на плечи обладателя сего чуда)

Windows, запущенная в QEMU, не имеет выхода в сеть. Для того, чтобы Windows могла выходить в сеть, нужно приложить некоторые усилия.

Представьте, что у нас есть два компа, один из которых подключен к сети. Мы хотим, чтобы второй комп, который не имеет собственного выхода в сеть, тем не менее, тоже мог выходить в сеть. Для этого мы комп, не имеющий сети, подключаем к компу, на котором сеть есть. А комп, на котором сеть есть, настраиваем так, чтобы он все пакеты, которые ему присылает второй комп, пропускал сквозь себя в сеть. Таким образом, первый комп становится для второго компа своеобразным "мостом", по которому безсетевой комп может выйти в сеть.

Такая схема подключения называется "сетевой мост".

В нашем случае в качестве первого компа выступает FreeBSD, имеющая выход в сеть, а в качестве второго компа, не имеющего выхода в сеть - Windows, запущенная в QEMU. Соответственно, наша задача заключается в том, чтобы подключить Windows к FreeBSD, а FreeBSD, в свою очередь, настроить так, чтобы она пропускала через себя в сеть пакеты, отправляемые из Windows.

%ifconfig
Выясняем, как называется реальный физический интерфейс, через который во FreeBSD работает сеть
У меня он называется msk0, у вас это название может быть другим, например, rl0.
Создаем виртуальный сетевой интерфейс, к которому будет подключен Windows

%sudo ifconfig tap0 create

Создаем виртуальный сетевой интерфейс, который будет выполнять функции моста
%sudo ifconfig bridge0 create

Объединяем интерфейсы в мост
%sudo ifconfig bridge0 addm msk0 addm tap0 up

Чтобы автоматизировать процесс создания моста при перезагрузки системы делаем следующее
в конфигурационный файл /etc/rc.conf добавляем :

cloned_interfaces="tap0 bridge0"
ifconfig_bridge0="addm msk0 addm tap0 up"

Включаем автоматическое поднятие интерфейса tap0
%sudo sysctl net.link.tap.up_on_open=1
Разрешаем непривилегированному пользователю соединяться с интерфейсом tap0
%sudo sysctl net.link.tap.user_open=1
Чтобы эти переменные инициализировались при загрузке, нужно добавить строку в конфигурационный файл /etc/sysctl.conf

net.link.tap.up_on_open=1
net.link.tap.user_open=1

Разрешаем непривилегированному пользователю открывать устройство /dev/tap0
%sudo chmod 666 /dev/tap0
При перезагрузках интерфейс пересоздается с ненужными нам правами для этого нужно добавить строку в конфигурационный файл /etc/devfs.conf чтоб было все как надо

perm tap0 0666

Ну и все Windows можно запускать с поддержкой сети

% qemu -localtime -m 1024 -boot c -hda ./VirtualPC/WinXP.img -name "Windows" -net nic -net tap,ifname=tap0
(увеличили память до 1G включили сеть)

Как видите, к параметрам обычного запуска добавились два параметра -net
Первый -net со значением nic создает "внутри" QEMU сетевую карту, которую дальше увидит и будет использовать Windows.
Второй -net со значением tap подключает эту сетевую карту к виртуальному интерфейсу tap0. Указываемая через запятую опция ifname=tap0 говорит о том, что подключиться нужно именно к интерфейсу tap0. В принципе, это не обязательная опция, но иногда, по каким-то своим соображениям, QEMU пытается подключится не с дефолтному tap0, а, скажем, к tap1 или к tap4. В этом случае можно явно указать нужный интерфейс, добавив эту опцию.

Все, загрузившись, Windows обнаружит сетевую карту и будет ходить в сеть через нее.

Далее задача могла бы и завершиться, но мне необходимо "Забыть о эмуляции"

% qemu -soundhw ac97 -usb -enable-kqemu -localtime -m 1024 -boot c -hda ./Win7_qemu.img -name "Windows" -net nic -net tap,ifname=tap0 -daemonize -nographic

И наш эмулятор работает в фоне никому не мешает доступ через RDP или VNC тайм вивер все что угодно

Есть небольшая загвоздка после перезагрузки
sysctrl отрабатывает быстрей net.link.tap.user_open=1 чем создается сам tap
надо net.link.tap.user_open=1 выполнять после загрузки системы

Часто требуется проверять канал на работоспособность

скрипт работает через cron у меня проверяется каждые 20 минут
необходим bash

#!/usr/local/bin/bash
pings="0";
a=5;
pings=`/sbin/ping -c $a 8.8.8.8 | grep -c "ttl"`
if [ "$pings" = "$a" ]; then
echo "OK" >> /var/log/ppp_restart.log
else

/bin/kill -9 `cat /var/run/tun0.pid`
/sbin/ifconfig tun0 destroy

sleep 5

/usr/sbin/ppp -quiet -ddial -nat INSATCOM
# INSATCOM название провайдера в /etc/ppp/ppp.conf

date >> /var/log/ppp_restart.log
fi

############################################################
записи в rc.conf

ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"
ppp_profile="INSATCOM"

##/etc/ppp/ppp.conf
Конфигурация ppp.conf
#######################
default:
set log Phase tun command
set ifaddr 10.0.0.1/0 10.0.0.2/0

INSATCOM:
set device PPPoE:rl0
# rl0 имя сетевого интерфейса думаю понятно
set authname ***login_name***
set authkey ****pass****
set dial
set login
add default HISADDR
set redial 0 0
set timeout 0

nat enable yes
# nat port tcp 192.168.0.1:80 80
nat port tcp 172.22.7.1:22 24
# nat port tcp 192.168.1.132:443 443

# nat port tcp 192.168.1.12:1723 1723

nat log yes
nat same_ports yes
nat unregistered_only yes
enable dns

Итоги работы скрипта выводятся в /var/log/ppp_restart.log

Как преобразовать образ виртуальной машины Qemu в VirtualBox и VmWare

Для преобразования образа виртуальной машины Qemu в вид пригодный для запуска в VirtualBox,
можно использовать следующие команды:

qemu-img convert qemu.img tmp.bin
VBoxManage convertdd tmp.bin virtualbox.vdi
VBoxManage modifyvdi virtualbox.vdi compact

Для старых версий VirtualBox, нужно было использовать вместо VBoxManage - vditool:

vditool DD virtualbox.vdi tmp.bin
vditool SHRINK virtualbox.vdi

Преобразование qemu образа в формат пригодный для использования в VmWare:

qemu-img convert -6 qemu.img -O vmdk vmware.vmdk

Для преобразования формата VmWare в qemu:

qemu-img convert vmware.vmdk -O qcow2 qemu.img

Для преобразования образа диска или livecd в вид пригодный для использования в qemu:

qemu-img convert -f raw disk.img -O qcow2 qemu.img
qemu-img convert -f cloop cloop.img -O qcow2 qemu.img