Официальный форум СВД Встраиваемые Системы
19 Март, 2024, 14:23:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

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

Сообщений: 3140



« : 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
Ветеран

Сообщений: 345


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

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

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

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

Записан
Олег Большаков
Легенда

Сообщений: 3140



« Ответ #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.

Спасибо.



Записан
Олег Большаков
Легенда

Сообщений: 3140



« Ответ #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 видно, что пакеты залетают.
Записан
Олег Большаков
Легенда

Сообщений: 3140



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

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

Сообщений: 6


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

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

Сообщений: 48



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-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

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

В последний раз google посещал эту страницу 06 Март, 2024, 06:35:16