4

ゲスト OS (Ubuntu) で Qemu とネットワークがどのように機能するかを理解するのに問題があります。このマニュアルと他のマニュアルを読みました。また、ゲスト OS でインターネットを利用したい場合は、ホスト OS でタップインターフェイスを作成する必要があります。その後、eth0tap0インターフェースをリンクします。

  1. NAT ルーティングを使用する
  2. ブリッジを使用する (リンクtap0およびeth0-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)

ガスト 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
      ...

ガスト OS でインターネットが機能します。実際の ppp0 とゲスト インターフェイスの間にリンクがない場合、ゲスト OS でネットワークが機能しているのはなぜですか? ゲスト OS のホストにインターフェースを持っている人さえいません。

私が理解しているのは、ゲストがデフォルトのホスト インターフェイスを介してデータを転送するためです。しかし、なぜ?

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
4

1 に答える 1

5

TAPデバイスを使用したいようですが、問題があります。TAPを使用するには、qemuコマンドラインに次のようなものが必要です。

-net nic,model=rtl8139 -net tap

これらの引数で、rtl8139をマシンで使用可能なNICデバイスに置き換えます。使用可能な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引数で開始されたVMは、ネットワーク対応であり、TAPを使用している必要があります。

于 2011-01-07T15:37:35.610 に答える