kernel module acquiring virtual ip's
I have a kernel module which "acquires" virtual ips ( not assigned to anyone in n/w )
and then respond to any future packets coming to this virtual ip.
I am handling ARP, TCP, UDP protocols in my module.
To get the arp stuff working I handle all the ARP requests for virtual IP and reply to
them with my local hardware address. I can now receive all the packets destined to virtual IP.
E.g Local IP is 192.168.1.2
Virtual ip is 192.168.1.244 ( Not existing in network )
I catch every arp request for .244 and reply with my mac. I can now
recive all IP packets ( handled in my netfilter hooks ) destined for .244.
According to the natting rules in my module I nat the packets for .244 and redirect them to
some listening port on 192.168.1.2
Also I handle all the outgoing packet from 192.168.1.2 and replace the source to 192.168.1.244
So that the client machine recives reply from virual IP, as expected.
192.168.1.21 -> 192.168.1.244
Nat Destination 192.168.1.21 -> 192.168.1.2
(Reply) 192.168.1.2 -> 192.168.1.21
Nat Source 192.168.1.244 -> 192.168.1.21.
Module works perfectly and I can establish any tcp connection ( E.g telnet ) with a non exitsing
IP ( 192.168.1.244) from any machine in the network.
Problem is :-
I want the same behaviour from the module if I try to connect from the same machine (local machine )
to the virtual IP.
E.g 192.168.1.2 -> 192.168.1.244
Nat Destination 192.168.1.2 -> 192.168.1.2
***** But somehow this packet after natting is dropped be the kernel and never reaches 192.168.1.2
Is this because the source and destination ip of this packet is same ?????
Hoping to get good reponse for this loooong mail