qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Barrett <dbarrett@quinthar.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Two taps, same IP?
Date: Tue, 15 Jul 2008 21:25:41 -0700	[thread overview]
Message-ID: <487D7845.6040709@quinthar.com> (raw)
In-Reply-To: <20080716130547.b109f83a.mle+tools@mega-nerd.com>

Erik de Castro Lopo wrote:
> David Barrett wrote:
> 
>> I'm considering a tap-based alternative to the -redir patch I proposed 
>> earlier, but I'm just not quite getting how it works.  In particular, 
>> I'm able to access the webserver on one image just fine, but not the 
>> other: wget fails with "Connecting to 172.20.0.3:80... failed: No route 
>> to host."
>>
>> Can you explain why and set me straight?
>>
>> Specifically, I have two Debian qemu images (0 and 1), identical in all 
>> respects except that image0 and image1 are configured to use static IPs 
>> 172.20.0.2 and 172.20.0.3, respectively.  I've launched both 
>> simultaneously with the following commands:
>>
>> sudo qemu -kernel-kqemu -net nic,vlan=0 -net tap,vlan=0 image0.raw
>> sudo qemu -kernel-kqemu -net nic,vlan=0 -net tap,vlan=0 image1.raw
>>
>> Each image is configured with the following /etc/network/interfaces:
>>
>> auto lo
>> iface lo inet loopback
>> allow-hotplug eth0
>> iface eth0 inet static
>> address 172.20.0.2  <--- image1 has: address 172.20.0.3
>> netmask 255.255.0.0
>> gateway 172.20.0.1
>>
>> This creates two tap interfaces (0 and 1) on the Ubuntu host, curiously 
>> with the same IP:
>>
>> tap0      Link encap:Ethernet  HWaddr 00:ff:84:12:9d:72
>>            inet addr:172.20.0.1  Bcast:172.20.255.255  Mask:255.255.0.0
>>            inet6 addr: fe80::2ff:84ff:fe12:9d72/64 Scope:Link
>>            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>            RX packets:18 errors:0 dropped:0 overruns:0 frame:0
>>            TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
>>            collisions:0 txqueuelen:500
>>            RX bytes:1336 (1.3 KB)  TX bytes:4704 (4.5 KB)
>>
>> tap1      Link encap:Ethernet  HWaddr 00:ff:af:9a:48:29
>>            inet addr:172.20.0.1  Bcast:172.20.255.255  Mask:255.255.0.0
>>            inet6 addr: fe80::2ff:afff:fe9a:4829/64 Scope:Link
>>            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>            RX packets:24 errors:0 dropped:0 overruns:0 frame:0
>>            TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
>>            collisions:0 txqueuelen:500
>>            RX bytes:1656 (1.6 KB)  TX bytes:4664 (4.5 KB)
>>
>> "wget http://172.20.0.2" and "wget http://172.20.0.3" each work fine 
>> inside their respective VMs.  But each is unable to wget the other's 
>> webserver.
> 
> I have multiple machines set up to run through one tap device (named
> qtap0). Originally I tried a number of different qemu networking options
> but in the end, I settled on VDE as that was the only one which worked
> reliably.
> 
> When I first set it up, I think I went from this document:
> 
>     http://lists.gnu.org/archive/html/qemu-devel/2005-06/txtDAJWgugtC1.txt
> 
> The clients have unique MAC addresses and request DHCP addresses from
> the host. The DHCP client on each guest is set up to send its host name
> back to the DHCP/DNS server (I'm using dnsmasq) and all the running
> guests can see all the other running guests as well as the host and
> other machines in the network.
> 
> I have a quite a few guests (32 bit Debian, 64 bit Debian, 64 bit
> Fedora, 64 bit Gentoo, 64 bit FreeBSD etc), but don't have enough RAM
> to run more than 2 or 3 at a time.
> 
>> Thanks for any tips you can provide!
> 
> Maybe try the VDE networking option.
> 
> Cheers,
> Erik

Success!  I didn't go the VDE route, I just fixed it so tap0 and tap1 
have different IPs.  It's so obvious I don't know why it didn't occur to 
me before.

I did this by simply skipping the default "qemu-ifup" script, which is:

david@SonOfLappy:/svn/staging$ cat /etc/qemu-ifup
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
david@SonOfLappy:/svn/staging$

And instead creating separate image0-ifup and image1-ifup scripts as:

david@SonOfLappy:/svn/staging$ cat image0-ifup
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
david@SonOfLappy:/svn/staging$ cat image1-ifup
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.21.0.1
david@SonOfLappy:/svn/staging$

Then I start it with:

sudo qemu -kernel-kqemu -net nic,macad0:00:00:00 -net 
tap,script=image0-ifup image0.raw

sudo qemu -kernel-kqemu -net nic,macad0:00:00:11 -net 
tap,script=image1-ifup image1.raw

Now it works great, I can wget from the host to both guests.  Granted, 
the guests can't talk to each other, but that's actually a good thing as 
I'm explicitly trying to segment them apart.  Hooray for qemu, and 
thanks for all your help!

-david

      reply	other threads:[~2008-07-16  4:25 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-16  1:38 [Qemu-devel] Two taps, same IP? David Barrett
2008-07-16  1:44 ` Anthony Liguori
2008-07-16  2:11   ` David Barrett
2008-07-16  3:04     ` Erik de Castro Lopo
2008-07-16 13:51     ` Anthony Liguori
2008-07-16  3:05 ` Erik de Castro Lopo
2008-07-16  4:25   ` David Barrett [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=487D7845.6040709@quinthar.com \
    --to=dbarrett@quinthar.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).