LINUX.ORG.RU

QEMU в реальную сеть через WiFi

 ,


5

3

Проблема проста. Есть ноутбук подключенный к сети через WiFi.

Надо обеспечить доступ виртуальной машины на QEMU в эту же сеть.

Я понимаю, что для этого теоретически, надо создать tap сетевой адаптер и создать мост включающий его и сетевую карту, через которую реальная машина подключена к сети.

Вот тут и проблема - нельзя просто взять и создать мост с WiFi картой. Или как-то можно?

Подскажите пожалуйста. Возможно есть другие пути?

Виртуалка просто должна работать в реальной сети как еще один компьютер.

Интересует именно QEMU, как это сделать с Virtualbox я знаю, но он не подходит.

#####РЕШЕНИЕ#######

Спасибо @Pinkbyte! Я осилил по твоему совету.

Включаем Proxy ARP

# sysctl net.ipv4.conf.all.proxy_arp=1

Включаем IP Forwarding

# sysctl net.ipv4.ip_forward=1

Создаем tap сетевой интерфейс, доступный для пользователя (важно! qemu работает от пользователя !)

# tunctl -p -t tap0 -u <username>

Создаем маршрут для ip адреса виртуалки через tap0

ip route add 192.168.1.199 dev tap0

Запускаем QEMU с параметрами сети

-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=mynet0

На гостевой системе - настраиваем статический ip адрес 192.168.1.199.

После этого все работает, виртуалка видна по своему адресу снаружи как отдельный компьютер.

★★★

Последнее исправление: James_Holden (всего исправлений: 2)

нельзя просто взять и создать мост с WiFi картой

Зависит от драйвера Wi-Fi карты.

Или как-то можно?

Можно через proxy arp и маршрутизацию это разрулить

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Зависит от драйвера Wi-Fi карты

Как точка доступа карта может работать. Но мне же надо как клиент, насколько я понимаю.

Можно через proxy arp и маршрутизацию это разрулить

Что-то слишком навернуто это.

James_Holden ★★★
() автор топика
Ответ на: комментарий от James_Holden

Как точка доступа карта может работать. Но мне же надо как клиент, насколько я понимаю.

Не важно точка доступа или клиент, важно чтобы драйвер не запрещал добавлять устройство в мост

Что-то слишком навернуто это.

Обычно ответ на вопрос «как сделать чтобы было как при A, не делая само A?» - всегда такой

Pinkbyte ★★★★★
()

Лучше сделать две сети - одну NAT, другую host-only и на хосте прокинуть нужные порты на виртуалку. Другие варианты не рекомендуются.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Чисто практический пример - на виртуалке приложение, которое ищет сервер в сети широковещательным запросом по подсети. Для этого мне надо чтобы виртуалка была в той же подсети, что и реальная сеть.

Разве это можно через проброс портов?

James_Holden ★★★
() автор топика
Ответ на: комментарий от James_Holden

По какому протоколу запрос? UDP? Надо больше деталей, какой запрос, куда приходит ответ, на какой порт и тд. Может и можно.

А вообще с WiFi это всё работает плохо и ненадёжно. Там даже между клиентами зачастую связи нет, лично сталкивался не раз, только к роуеру и назад пакеты идут, остальное роутер не пускает.

Ещё как вариант чисто в рамках брейншторма - прокинуть USB-карту в виртуалку и там уже её использовать.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

Ещё как вариант чисто в рамках брейншторма - прокинуть USB-карту в виртуалку и там уже её использовать.

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

По какому протоколу запрос?

Хотелось бы по любому, чтобы это было как будто виртуалка действительно прямо в сети.

James_Holden ★★★
() автор топика
Ответ на: комментарий от No

У меня дешманский роутер белорусский, вряд ли можно.

James_Holden ★★★
() автор топика
Ответ на: комментарий от Legioner

Еще вариант.

Использовать мобильник подключённый через usb вместо штатной wifi карты. И wifi подключенте дает, и в бридж соединяется потому что виден как ethernet.

James_Holden ★★★
() автор топика
Ответ на: комментарий от Legioner

Сделал через proxy arp как советовал @Pinkbyte.

Добавил в шапку решение.

James_Holden ★★★
() автор топика
11 января 2024 г.

день добрый

запускаю «что-то подобное» у себя
- в теме говориться, что будет использоваться wifi-интерфейс/карта, так?! в системе она одна поднята и весь сет. трафик ходит через нее, так? т.е. никаких привязок именно к данному интерфейсу в командах нет (неявно есть, но неявно :о)
вопрос по ходу:
у меня используется две сетевухи
- eth0 - локальная сеть
- wlan0 - выход в инет
специальных настроек/маршрутов для «типа связи/пробороса» пакетов из локалки в инет и наоборот на раб.станции не делал, инет и локалка видны раб.станции (и замечательно)
применил ваши команды, почти «гуд», раб.станция и виртуалка - видят др.друга, пингуются, но инет из виртуалки не виден
... пытаюсь разобраться ... (*)

(*) надо добавить поднятие интерфейса

4. поднимаем интерфейс
sudo /sbin/ifconfig tap0 up

sunjob ★★★★
()
Ответ на: комментарий от sunjob

### РЕШЕНИЕ ###

конфигурация раб.станции

eth0  - 192.168.0.xxx (IP прописан жестко, локальная сеть)
wlan0 - 192.168.0.yyy (IP выдается по DHCP, интернет)

в !!! виртуальной машине !!! - надо добавить деф.маршрут (gateway) на лок.интерфейс eth0
если-бы у wlan-интерфейса был-бы стат. адрес, то можно было-бы сразу на него отправлять,
но т.к. он «динамический», то выкручиваемся, как можем :о)

вариант 1 - временный, для отладки и поиска вшей :о)

sudo /sbin/route add -host 0.0.0.0 dev eth0
-->
kvm# netstat -nr
-->
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.0.xxx   0.0.0.0         UG        0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

вариант 2 - для постояннки (решение для slackware)

/etc/rc.d/rc.inet1.conf
GATEWAY="192.168.0.xxx"

СПАСИБО

sunjob ★★★★
()
Последнее исправление: sunjob (всего исправлений: 5)
Ответ на: комментарий от sunjob

###!!! Дополнение !!!###

для управления сетью используется NetworkManager Applet-1.8.4, который поднимая любой интефейс бездумно добавляет дефолтный маршрут в таблицу (ну идиот, чего с него взять?! :о)

в конечном итоге, после активации обоих интерфейсов eth0 & wlan0 - в таблице будет два «дефолтных» маршрута (шлюза)... и что-бы у компа не сорвало башню мы самый ненунжный маршрут «отчикрыжим», а самый «нужный и религиозно-верный» - оставим!

ну а т.к. NM запускается в user-окружении, уже после всех системных активаций, да еще думает достаточно долго, то эту важную операцию поручим скрипту в автозагрузке:
- он выжидаеn ~ 1 мин, пока NM прокалбасится, а потом под sudo удаляет лишний маршрут.

#!/bin/sh
T=60
echo "sleep $T ..."; sleep $T
sudo route del -net 192.168.0.0 gw 0.0.0.0 netmask 255.255.255.0 dev eth0

вот теперь точно все :о)

sunjob ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.