Официальный форум СВД Встраиваемые Системы
04 Декабря, 2016, 09:02:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Настройка сети при работе с QEMU в QNX  (Прочитано 16557 раз)
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« : 10 Апреля, 2010, 15:51:09 »

Настройка сети при работе с QEMU в QNX
(english version)

Эмулятор аппаратного обеспечения QEMU предоставляет широкие возможности сетевой конфигурации. Этому способствует и большой набор эмулируемых сетевых контроллеров (NE2000, Intel 82551, Intel 82557B, Intel 82559ER, Realtek RTL8139, Intel E1000 и т.д.), что позволяет ожидать работу с сетью подавляющего большинства гостевых систем. Думаю, что будет сложно найти развитую операционную систему, в которой отсутствует поддержка NE2000 или RTL8139. Также немалую роль в работе сети играют и гибкие варианты конфигурации сети, сетевого взаимодействия между гостевыми и хост системами. В данной заметке будут рассмотрены различные варианты конфигурации сети при работе QEMU в QNX хост. Также стоит отметить, что дополнительную информацию по этому вопросу можно найти в сети, стоит учитывать, что сетевая подсистема QNX6 очень похожа на NetBSD.

Примечание 1. Во всех примерах для демонстрации работы сети в качестве гостевой системы будет использоваться установочный диск Archlinux (archlinux-2009.08-netinstall-i686.iso). Но точно также можно настраивать сеть и в других гостевых ОС, например, Windows, QNX 4.25 или NetBSD, с учётом их специфики. Хост система представляет собой QNX Neutrino 6.4.1, аналогично можно использовать QNX 6.4.0 или QNX 6.5.0.

Примечание 2. В примерах приняты следующие соглашения об условных обозначениях:

 -
[QNX] -- команда выполняется в QNX хост системе;
 -
[ARCH] -- команда выполняется в гостевой системе, в нашем случае в Archlinux.


Пользовательский режим работы сети

Самый простой способ соединения гостевой системы с хост системой это пользовательский (user) режим. В этом режиме QEMU обеспечивает:

 - виртуальную сеть (10.0.2.0)
 - сетевой экран, блокирующий любые входящие соединения
 - сервер DHCP (10.0.2.2)
 - шлюз (10.0.2.2)

DHCP сервер автоматически выдаёт адрес 10.0.2.15, при поступлении DHCP запроса от гостевой системы. Если хост система (QNX) имеет выход в интернет, то и гостевая система также получает доступ в глобальную сеть. Никаких дополнительных настроек не требуется.

1. [QNX] Запускаем виртуальную машину:

Код:
# qemu -net user -net nic -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

(щёлкните чтобы показать/скрыть)

2. [ARCH] Настраиваем сетевой интерфейс:

Код:
# dhcpcd eth0
# ifconfig

(щёлкните чтобы показать/скрыть)

(щёлкните чтобы показать/скрыть)

3. [ARCH] Проверяем работу сети:

Код:
# ping -c2 10.0.2.2
# telnet 10.0.2.2

(щёлкните чтобы показать/скрыть)


Объединение виртуальных сетей

Необходимо запустить первый процесс QEMU, который будет ожидать входящие соединения на определённом порту. Второй процесс QEMU будет подключаться к этому порту. Всякий раз при появлении пакета в виртуальной сети первого QEMU, он будет передан во вторую сеть, и наоборот.

Реализуем следующую конфигурацию:

 - Гостевая система 1 ожидает входящие соединения на порту 8010;
 - Гостевая система 2 подключается к гостевой системе 1 через localhost:8010.

1. [QNX] Запускаем гостевую систему 1:

Код:
# qemu  -net nic,macaddr=52:54:00:12:34:57 -net socket,listen=:8010 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

2. [QNX] Запускаем гостевую систему 2:

Код:
# qemu  -net nic,vlan=2,macaddr=52:54:00:12:34:56 -net socket,vlan=2,connect=127.0.0.1:8010 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [ARCH1] Конфигурируем сеть в гостевой системе 1:

Код:
# ifconfig eth0 10.0.2.101 netmask 255.255.255.0 up

(щёлкните чтобы показать/скрыть)

4. [ARCH2] Конфигурируем сеть в гостевой системе 2:

Код:
# ifconfig eth0 10.0.2.102 netmask 255.255.255.0 up

(щёлкните чтобы показать/скрыть)

5. [ARCH] Проверяем работу сети в обоих гостевых системах:

Код:
# ping -c 3 10.0.2.102

(щёлкните чтобы показать/скрыть)

Код:
# ping -c 3 10.0.2.101

(щёлкните чтобы показать/скрыть)


Подключение виртуальной сети к TAP устройству

Существует другой способ организации виртуальной сети -- использование виртуального ethernet устройства при помощи TAP драйвера. Ethernet-кадры принимаемые таким устройством также появляются в виртуальной сети гостевой системы. Разумеется, ethernet-кадры посланные виртуальной сетью гостевой системы также принимаются TAP устройством.

При использования драйвера devnp-qtap.so для QNX6 приложения получают доступ к взаимодействию с сетевым устройством используя файловый дескриптор. Любые данные посланные через файловый дескриптор будут приняты на обоих сторонах. Это значит, что приложения запущенные в гостевой системе будут иметь возможность доступа и подключения к приложениям запущенным на хост системе. Если разрешена переадресация портов (port forwarding), то приложения гостевой системы также смогут иметь доступ к внешней сети (internet).

При указании параметра -net tap QEMU будет пытаться вызывать скрипты /etc/qemu-ifup для настройки TAP устройства и /etc/qemu-ifdown после завершения работы с устройством. Если скрипт /etc/qemu-ifup не будет найден, то выполнение программы прервётся. Можно изменить имена скриптов по умолчанию, либо указать, что их не надо вызывать, например так:

Код:
# qemu -net tap,script=no,downscript=no <...>

Чтобы не указывать эти параметры каждый раз, достаточно создать пустой скрипт /etc/qemu-ifup. Главное не забыть установить ему атрибуты исполняемого файла.

1. [QNX] Создаём и настраиваем TAP устройство:

Код:
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap0 10.0.0.1 netmask 255.255.255.0 up

2. [QNX] Запускаем виртуальную машину:

Код:
# qemu -net nic -net tap,ifname=/dev/tap0 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [ARCH] Настраиваем сетевой интерфейс:

Код:
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0 up
# ifconfig

(щёлкните чтобы показать/скрыть)

4. [ARCH] Проверяем работу сети:

Код:
# ping -c 2 10.0.0.1
# telnet 10.0.0.1

(щёлкните чтобы показать/скрыть)

5. [QNX] Проверяем работу сети:

Код:
# ping -c 3 10.0.0.2

(щёлкните чтобы показать/скрыть)


Подключение виртуальных сетей к TAP устройствам (две гостевые системы)

В этом примере у нас две гостевые системы (два TAP устройства). Каждая гостевая система подключается к хост системе через TAP устройство. Для того чтобы обеспечить взаимодействие между гостевыми системами необходимо настроить мост (bridge) между двумя TAP устройствами. Мост будет выступать в роли центрального сетевого узла между хостом и обоими сетевыми системами.

1.  [QNX] Создаём и настраиваем TAP устройства:

Код:
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap0 10.0.0.1 netmask 255.255.255.0 up
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap1 10.0.1.1 netmask 255.255.255.0 up

2. [QNX] Запускаем гостевую систему 1:

Код:
# qemu -net tap,ifname=/dev/tap0 -net nic,macaddr=80:00:00:12:34:57 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [QNX] Запускаем гостевую систему 2:

Код:
# qemu -net tap,ifname=/dev/tap1 -net nic,macaddr=80:00:00:12:34:56 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

4. [QNX] Создаём и конфигурируем мост:

Код:
# ifconfig bridge0 create
# brconfig bridge0 add tap0 add tap1 up

(щёлкните чтобы показать/скрыть)

5. [ARCH1] Конфигурируем сеть в гостевой системе 1:

Код:
# ifconfig eth0 10.0.0.2 netmask 255.255.0.0 up

(щёлкните чтобы показать/скрыть)

6. [ARCH2] Конфигурируем сеть в гостевой системе 2:

Код:
# ifconfig eth0 10.0.1.2 netmask 255.255.0.0 up

(щёлкните чтобы показать/скрыть)

7. Проверяем работу сети как и раньше ping'ом. Гостевые системы должны пинговать друг друга и хост систему, а также хост система должна пинговать обе гостевые.

« Последнее редактирование: 20 Мая, 2010, 12:40:00 от Александр Молодцов » Записан

LH
Опытный пользователь

Сообщений: 250


« Ответ #1 : 12 Апреля, 2010, 15:11:23 »

При попытке старта qemu с ключем -net tap,ifname=/dev/tap0  у меня выдает:

Цитировать
/etc/qemu-ifup could not lanch network script

Пож. подскажите: есть ли у вас файл /etc/qemu-ifup и что в нем?

Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #2 : 12 Апреля, 2010, 15:23:09 »

Спасибо за замечание. Действительно, это моё упущение. Просто уже давно сделал такой скрипт, в котором пусто:

Код:
#!/bin/ksh


Либо можете указать параметр script=no и даже downscript=no:

Код:
#qemu -net tap,ifname=/dev/tap0,script=no,downscript=no ...

Эти скрипты вызываются перед открытием TAP устройства и после его закрытия. В моих примерах их использование не требуется. Сейчас добавлю эту информацию в первое сообщение.
Записан

Snifer
Интересующийся

Сообщений: 6


« Ответ #3 : 28 Декабря, 2015, 19:05:05 »

Здравствуйте ! Подскажите как настроить режим моста ?

пробовал:

mount -T io-pkt /lib/dll/devnp-qtap.so
ifconfig bridge0 create
brconfig bridge0 add tap0 add en0 up
(en0 сеть 192.168.1.0)

Однако так не получилось, но гостевая система получила ip по dhcp.

Спасибо.



Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #4 : 28 Декабря, 2015, 21:16:55 »

Однако так не получилось, но гостевая система получила ip по dhcp.

Уточните, пожалуйста, что именно не получилось?
Записан

Snifer
Интересующийся

Сообщений: 6


« Ответ #5 : 29 Декабря, 2015, 08:03:35 »

Гостевая система не видит машины сети 192.168.1.0/24
WinXp как гостевая, получила настройки сети по dhcp, однако сам шлюз не пингуется.
Активность сети - отправленные есть пакеты, принятых нет.
Записан
Snifer
Интересующийся

Сообщений: 6


« Ответ #6 : 05 Января, 2016, 11:40:40 »

Аналогичная ситуация, когда гостевая система QNX4
Rх есть, Тх нету.
В qnx4 по netsniff видно, что пакеты залетают.
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #7 : 11 Января, 2016, 11:40:16 »

Скорее всего этот вопрос касается настройки Windows. Но постараемся посмотреть. Уточните, пожалуйста, версию QNX.
Записан

Snifer
Интересующийся

Сообщений: 6


« Ответ #8 : 14 Января, 2016, 08:34:42 »

6.5.0 2010/06/23
Записан
Николай Коберда
Сотрудник СВД ВС
Пользователь

Сообщений: 13



WWW
« Ответ #9 : 22 Января, 2016, 15:57:06 »

Добрый день, Snifer. Пытался воспроизвести Вашу проблему - хост и подсеть из под геста пингуются, гест на dhcp. В связи с этим для уточнения причины Вашей проблемы просьба выложить результаты команд ipconfig /all и route print на гостевой системе, результат пинга хоста из геста, а также строку запуска qemu
Записан

Snifer
Интересующийся

Сообщений: 6


« Ответ #10 : 01 Февраля, 2016, 17:29:52 »

Здравствуйте! Все действия проводились на QNX6.5 с вашего диска, с тренингов. (там была виртуальная машина с QNX6.5) Я, решил поставить полный c qnx.com  и там все завелось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 28 Ноября, 2016, 17:20:27