网络如何在QEMU的客户操作系统中运行?

Mep*_*fel 3 networking operating-system host qemu

我有一个问题,了解客户操作系统(Ubuntu)中的Qemu和网络是如何工作的.我已阅读本手册和其他人.如果我理解,如果你想在客户操作系统中选择互联网,你需要在主机操作系统中创建点击界面.之后链接eth0tap0接口:

  1. 通过使用NAT路由
  2. 通过使用bridge(link tap0eth0-host)

现在我在主机中有这些接口(ppp0 - 3G-modem - Internet,lo):

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)
Run Code Online (Sandbox Code Playgroud)

在阵风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
      ...
Run Code Online (Sandbox Code Playgroud)

在阵风OS工作的互联网!如果我在真实ppp0和访客界面之间没有链接,那么在客户操作系统中工作网络的方式和原因是什么?我甚至没有任何人在主机上为客户操作系统接口.

如果我理解那是因为来宾转发数据通过默认主机接口.但为什么?

Qemu选项:

qemu -hda ~/virt.disk -cdrom /dev/cdrom -boot once=dc -m 1024M -usb -smp 2 -enable-kvm 
Run Code Online (Sandbox Code Playgroud)

主机路由表:

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
Run Code Online (Sandbox Code Playgroud)

访客路由表:

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
Run Code Online (Sandbox Code Playgroud)

pca*_*tin 5

看起来您想要使用TAP设备,但遇到问题.要使用TAP,您应该在qemu命令行中输入以下内容:

-net nic,model=rtl8139 -net tap
Run Code Online (Sandbox Code Playgroud)

在这些参数中,将rtl8139替换为您计算机上任何可用的nic设备.如果您不知道可用的nic设备,请使用以下命令列出它们:

qemu -net nic,model=?
Run Code Online (Sandbox Code Playgroud)

您还必须确保创建了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
Run Code Online (Sandbox Code Playgroud)

运行此脚本后,使用-net tap参数启动的VM 应该是网络就绪并使用TAP.