Re: Get source IP of packet through PREROUTING CHAIN

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

What I need is to be able to know the source IP and port of the
packets received at a particular port (10000 here) in user space
through a C language interface or may be can I read somewhere from the
proc directory?

For example,

Machine X <------>| Network |<------->(eth0) My Machine (eth1) <----->Machine A
Machine Y <------>|             |

Machine X - 192.168.1.13
Machine Y - 192.168.1.14

My Machine eth0 - 192.168.1.100
My Machine eth1 - 172.16.1.100

Machine A - 172.16.1.200 is a slave device controlled by my machine.

My machine receives some packets on port 10000 on eth0. Its job is to
simply forward them to Machine A. It does so by

iptables -t nat -I PREROUTING -i eth0 -p udp \
      --dport 10000 -j DNAT --to-destination 172.16.1.200

Machine A is configured to send packets to Machine X. My machine is
default gateway for Machine A.

I do masquerading on eth0 and forwarding is enabled - eth1 to eth0.

Now I need that in case Machine Y is sending on port 10000 instead of
Machine X, I should have the *choice* whether to configure Machine A
continue sending to X or instead now configure it to send to Machine
Y.

Hope I am clear,
Elison

2009/8/11 Gáspár Lajos <swifty@xxxxxxxxxxx>:
> Hi Elison,
>
> The conntrack subsystem knows about every connection.
> So maybe you need to check that.
>
> Elison Niven írta:
>>
>> Hi List,
>>
>> I have two interfaces eth0 and eth1 on my machine.
>>
>> My machine has eth0 = 192.168.1.100 and eth1 = 172.16.1.100
>>
>> The scenario is that I will be receiving packets at port 10000 on eth0
>> of my machine. I do not know from which IP the packets are being
>> received (Can be any machine - I do not need to apply a source address
>> matching rule).
>>
>
> You may not know the source IP, but your machine will, because it sees the
> packets coming from eth0's network.
>>
>> I need to forward these packets to another machine B that I do so with
>> this rule:
>>
>> iptables -t nat -I PREROUTING -i eth0 -p udp \
>>       --dport 10000 -j DNAT --to-destination 172.16.1.200
>>
>> Note that I have not added any -s option to the rule for source
>> address matching.
>>
>> This also works properly. Now I need to _know_ the source IP and
>> source Port of the packets that are being received at port 10000 on
>> eth0. (For example to send some data back to the _same_machine_ that
>> is sending packets at port 10000)
>>
>
> Again. If the conntrack (in your machine) knows the source IP/port numbers
> then it will automagically replace them on the backroute.
> It may be also a problem if your response packets are not SNAT-ed. (In the
> case the sender machines sending the packets directly to your machine.)
>>
>> How do I achieve this?
>>
>> Best Regards,
>> Elison
>>
>
> Swifty
>
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux