Как работает сеть в гостевой ОС QEMU? - PullRequest
3 голосов
/ 16 декабря 2010

У меня проблема с пониманием того, как работают Qemu и сеть в гостевой ОС (Ubuntu).Я прочитал это руководство и другие.И если я понимаю, если вы хотите подключиться к Интернету в гостевой ОС, вам нужно настроить tap интерфейс в хост-ОС.После этого связать eth0 и tap0 интерфейсы:

  1. Используя NAT-маршрутизацию
  2. Используя мост (ссылка tap0 и eth0-хост )

Теперь у меня есть эти интерфейсы в хосте ( ppp0 - 3G-модем - Интернет, вот):

ppp0      Link encap:Point-to-Point Protocol  
      inet addr:10.245.146.78  P-t-P:10.64.64.64  Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:49635 errors:0 dropped:0 overruns:0 frame:0
      TX packets:42745 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:3 
      RX bytes:52405401 (52.4 MB)  TX bytes:5988643 (5.9 MB)

В gust OS ( eth0 , lo):

eth0        Link encap:Ethernet HWaddr:52:54:00:12:34:56
      inet addr:10.0.2.15  Bcast:10.0.2.255 Mask:255.255.255.0
      ...

Интернет в gust OS работает!Как и почему работает сеть в гостевой ОС, если у меня нет связи между реальным ppp0 и гостевым интерфейсом?У меня даже нет ни одного интерфейса в хосте для гостевой ОС.

Если я понимаю, это потому, что гость пересылает данные через интерфейс хоста по умолчанию.Но почему?

Опции Qemu:

qemu -hda ~/virt.disk -cdrom /dev/cdrom -boot once=dc -m 1024M -usb -smp 2 -enable-kvm 

Таблица маршрутизации хоста:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
default         10.64.64.64     0.0.0.0         UG    0      0        0 ppp0

Таблица гостевой маршрутизации:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        *               255.255.255.0 U    1      0        0 eth0
link-local      *               255.255.0.0   U    1000   0        0 eth0
default         10.0.2.2        0.0.0.0       UG   0      0        0 eth0

1 Ответ

5 голосов
/ 07 января 2011

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

-net nic,model=rtl8139 -net tap

В этих аргументах замените rtl8139 на любое доступное устройство на вашем компьютере. Если вы не знаете доступных устройств nic, используйте следующую команду для их перечисления:

qemu -net nic,model=?

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

# For Network Bridging/TAP
# Set permissions of tun device
chown root.users /dev/net/tun 
chmod g+rw /dev/net/tun

#Add a bridge, add eth0
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc
brctl addif br0 eth0
dhclient br0

# Create tap0
tunctl -t tap0 -u username #replace username by your username

# Enable tap0
brctl addif br0 tap0
ifconfig tap0 up

После запуска этого сценария виртуальные машины, запущенные с -net tap , должны быть готовы к работе в сети и использовать TAP.

...