Routing packets via a C program
jengelh at linux01.gwdg.de
Sat Jan 27 15:55:29 CET 2007
On Jan 22 2007 09:58, Luca Bedogni wrote:
> i'm writing down a simple program for routing the packets manually. The
>idea is: if a packet comes from a specific IP (192.168.0.2) I set ip->saddr to
>my ip and then accept it. And, if a packets comes from the outside, i set
>ip->daddr to 192.168.0.2 and then accept it. I recalculate the checksum and
>it's correct (i can see that by printing out it).
What for - are you trying some nifty SNAT/DNAT trick?
>The basic problem is that, sniffing packets with wireshark, i can see the
>packet from 192.168.0.2 to outside, but not mine to outside.
>I also tried with NF_REPEAT and NF_ACCEPT and NF_QUEUE when calling
>ipq_set_verdict, but nothing changed..
You should be fine by QUEUEing packets in PREROUTING (or at least somewhere
before the <Routing Decision> in [PacketFlow]), modify them in your userspace
program, reinject them, and have the <Routing Decision> do the right then.
More information about the netfilter