Thread (25 messages) 25 messages, 5 authors, 2004-09-01

Re: [RFC] MASQUERADE / policy routing ("Route send us somewhere else")

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2004-08-31 06:43:37
Also in: netfilter-devel

On Mon, Aug 30, 2004 at 10:39:20PM -0700, David S. Miller wrote:
quoted
If you're wondering why the second lookup is returning a different
interface at all, it's because the routing lookup in MASQUERADE is
done as if the packet was generated by localhost.  This is obviously
going to differ from the normal routing lookup if the packet was
forwarded.
I understand this description.

Would it be enough to set 'out' to rt->u.dst.dev after the call to
ip_route_output_key() in ipt_MASQUERADE.c?
Unfortunately no.  You see the result of ip_route_output_key() is
not used at all so you can set rt->u.dst.dev all you like and it
isn't going to make any difference :)

The only reason we're making that call in MASQUERADE is so that we
can get the source address from the resulting dst.

Now if the dst is pointing to the wrong device, then that source
address may be invalid.

In fact I wonder if Alexey was aware of the fact that this dst is
not going to be used for routing the packet.  It's thrown away
immediately after we get the source address.

In this case I really don't see what's wrong with setting oif in
the key.  In fact that's exactly what we want to do: Get the
preferred source address when the localhost is going to send
a packet to *that* device.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help