On 08/30/2012 12:58 PM, John Basila wrote:
> Please allow me to add a few comments:
> 
> The problem here is related to the fact that QEMU is executed with multiple 
> instances and all instances start from the same snapshot, thus if they all 
> send a UDP DNS query, they will all create a packet - for example - 
> 10.0.0.2:2345 -> DNSERVER:53. The source port is the same. The first packet 
> that reaches the ipfilter will result in going over the iptables rules and 
> get NATed properly, the second QEMU instance that will send the same UDP 
> packet will not get to run over the iptables rules as the ipfilter already 
> saw this packet and the packet should be "RELATED" to a different connection 
> and thus will cause the response packets of machine B to be received via 
> machine A as the NAT rule will de-NAT the return packet to to the relevant 
> connection which is related to machine A.
> 
> John
> 
> -----Original Message-----
> From: Stefan Hajnoczi [mailto:stefa...@gmail.com] 
> Sent: Thursday, August 30, 2012 1:44 PM
> To: John Basila
> Cc: qemu-devel@nongnu.org; Anthony Liguori; Rusty Russell; 
> netfil...@vger.kernel.org
> Subject: Re: Adding support for Stateless Static NAT for TAP devices
> 
> On Thu, Aug 30, 2012 at 10:27 AM, John Basila <jbas...@checkpoint.com> wrote:
>> I have tried NAT and this is why I came up with this feature.
> 
> QEMU's net/tap.c is the wrong place to add NAT code.  The point of tap is to 
> use the host network stack.  If you want userspace networking, use -netdev 
> user or -netdev socket.
> 
> Please look into iptables more.  I have CCed the netfilter mailing list.  The 
> question is:
> 
> The host has several tap interfaces (tap0, tap1, ...) and the machine on the 
> other end of each tap interface uses IP address 10.0.0.2.  So we have:
> 
> tap0 <-> virtual machine #0 (10.0.0.2)
> tap1 <-> virtual machine #1 (10.0.0.2)
> tap2 <-> virtual machine #2 (10.0.0.2)
> 
> Because the virtual machines all use the same static IP address, they cannot 
> communicate with each other or the outside world (they fight over ARP).  We'd 
> like to NAT the tap interfaces:
> 
> tap0 <-> virtual machine #0 (10.0.0.2 NAT to 192.168.0.2)
> tap1 <-> virtual machine #1 (10.0.0.2 NAT to 192.168.0.3)
> tap2 <-> virtual machine #2 (10.0.0.2 NAT to 192.168.0.4)
> 
> This would allow the virtual machines to communicate even though each 
> believes it is 10.0.0.2.
> 
> How can this be done using iptables and friends?

Why do the systems have the same IP? That seems like a broken network
config to me.

Regards,
  Dennis


Reply via email to