* snat bridge routes reply packets
@ 2005-09-28 16:05 Amin Azez
2005-09-28 19:56 ` Henrik Nordstrom
0 siblings, 1 reply; 17+ messages in thread
From: Amin Azez @ 2005-09-28 16:05 UTC (permalink / raw)
To: netfilter-devel
I have a bridge setup snat'ing some IP's that aren't actually on the
bridge subnet.
That works fine except that the nat code doesn't know what to do with
the de-snat'd packets and tries to send them to the default gateway.
This makes sense, but it's routing, not bridging.
Bridging dnat would keep track of the physdev and src mac as well as the
src ip and ignore arp altogether when re-issueing the de-snat'd
responses; it would write the de-snat'd packet back out to the original
interface and targeted to the original mac.
I think bridging snat can be detected when the target mac of the packet
that causes the conntrack to be created does not match the mac of the
physdev the packet comes in on (i.e. the snat'ing box is not being used
as a gateway).
In such cases the physdev and srcmac must be saved.
(Co-incidentally I'm already doing this in my contrack mods which will
no doubt get merged into nf_conntrack that does some layer 2 stuff)
So my real questions are:
1) Am I nuts?
2) Any tips on skipping the arp cache stuff on the de-snat'd response,
as I have a reference to the physdev and target mac already available?
I also think there is some mileage in checking the src_mac when looking
up conntracks in the orig direction, to avoid having to presume that the
same ip address does not exist on different physdev of the same bridge -
to thus allow them both to be snat'd independantly.
Sam Azez
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-28 16:05 snat bridge routes reply packets Amin Azez
@ 2005-09-28 19:56 ` Henrik Nordstrom
2005-09-29 8:42 ` Amin Azez
0 siblings, 1 reply; 17+ messages in thread
From: Henrik Nordstrom @ 2005-09-28 19:56 UTC (permalink / raw)
To: Amin Azez; +Cc: netfilter-devel
On Wed, 28 Sep 2005, Amin Azez wrote:
> I have a bridge setup snat'ing some IP's that aren't actually on the
> bridge subnet.
>
> That works fine except that the nat code doesn't know what to do with
> the de-snat'd packets and tries to send them to the default gateway.
>
> This makes sense, but it's routing, not bridging.
As soon as you NAT a packet in bridge-netfilter it is intercepted and
given to routing, no longer bridged. This to allow REDIRECT and a number
of other highly interesting applications of NAT.
Yes, this causes a bit of headache if your bridge does not have correct
routing, but it's a fairly small price to pay for a wealth of interesting
functionality which would not be possible if the bridge did not reroute
packets after applying NAT.
At a first glance one could think that SNAT would not need to do this, but
then you realize that by SNAT:in you break the IP-MAC relation of the
traffic flow, especially in the return direction which is a DNAT
operation. Doing DNAT without rerouting does not make much sense as the
packets would then still be delivered to the same destination MAC, and
things like REDIRECT would not be possible.
> 1) Am I nuts?
No. Just on a different angle than how the bridge-netfilter integration is
designed wrt NAT.
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-28 19:56 ` Henrik Nordstrom
@ 2005-09-29 8:42 ` Amin Azez
2005-09-29 10:11 ` Henrik Nordstrom
0 siblings, 1 reply; 17+ messages in thread
From: Amin Azez @ 2005-09-29 8:42 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel
Thanks for your interesting response;
Henrik Nordstrom wrote:
> On Wed, 28 Sep 2005, Amin Azez wrote:
>
>> I have a bridge setup snat'ing some IP's that aren't actually on the
>> bridge subnet.
>>
>> That works fine except that the nat code doesn't know what to do with
>> the de-snat'd packets and tries to send them to the default gateway.
>>
>> This makes sense, but it's routing, not bridging.
>
> As soon as you NAT a packet in bridge-netfilter it is intercepted and
> given to routing, no longer bridged. This to allow REDIRECT and a number
> of other highly interesting applications of NAT.
>
> Yes, this causes a bit of headache if your bridge does not have correct
> routing, but it's a fairly small price to pay for a wealth of
> interesting functionality which would not be possible if the bridge did
> not reroute packets after applying NAT.
True enough, the outward bound snat'd packet is routed. The bridge does
have correct routing for the snat'd items.
> At a first glance one could think that SNAT would not need to do this,
> but then you realize that by SNAT:in you break the IP-MAC relation of
> the traffic flow, especially in the return direction which is a DNAT
> operation. Doing DNAT without rerouting does not make much sense as the
> packets would then still be delivered to the same destination MAC, and
> things like REDIRECT would not be possible.
I am curious about this.
It is a change of the response dnat that I am suggesting. The DNAT
packets need delivering to the original MAC/IP/PHYSDEV in bridging mode,
and in routing mode the routing stack will probably find the same
MAC/IP/PHYSDEV using its routing tricks and ARP. In bridging mode the
routing code cannot find this.
This is, I admin, using iptables as a partial bridge/router when
snat'ing; however the outward packets ARE handled fine, I want to fix up
the return packets.
>> 1) Am I nuts?
>
>
> No. Just on a different angle than how the bridge-netfilter integration
> is designed wrt NAT.
Heh. I think I could permit the reverse snat'ing in bridge mode without
damaging the other behaviour.
I was planning to use whether the target mac of the first packet matched
the mac of the incoming physdev as an indicator of bridging or routing,
but then I wondered if the interface merely being in promiscuous mode
would cause trouble, but I don't think so; but maybe I should do IP
checks instead and bridging is where the dest IP address of the first
packet doesn't match the ip address of the devices (not physdev) it came
in on?
Anyway, although this is not how the bridge-netfilter integration was
planned, do you think my proposal is sound?
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 8:42 ` Amin Azez
@ 2005-09-29 10:11 ` Henrik Nordstrom
2005-09-29 12:19 ` Amin Azez
0 siblings, 1 reply; 17+ messages in thread
From: Henrik Nordstrom @ 2005-09-29 10:11 UTC (permalink / raw)
To: Amin Azez; +Cc: netfilter-devel
On Thu, 29 Sep 2005, Amin Azez wrote:
> It is a change of the response dnat that I am suggesting. The DNAT
> packets need delivering to the original MAC/IP/PHYSDEV in bridging mode,
> and in routing mode the routing stack will probably find the same
> MAC/IP/PHYSDEV using its routing tricks and ARP. In bridging mode the
> routing code cannot find this.
More likely ARP is your problem.
When you SNAT to another address on the LAN you need to make sure there is
something answering to ARP on that address, if not the receiving station
won't be able to ARP for the MAC where to send return traffic.
> Heh. I think I could permit the reverse snat'ing in bridge mode without
> damaging the other behaviour.
If the problem is what I suspect then "fixing" the NAT to not route the
traffic won't make much difference.
> I was planning to use whether the target mac of the first packet matched
> the mac of the incoming physdev as an indicator of bridging or routing,
this is not sufficient and would break REDIRECT.
> but then I wondered if the interface merely being in promiscuous mode
> would cause trouble, but I don't think so; but maybe I should do IP
> checks instead and bridging is where the dest IP address of the first
> packet doesn't match the ip address of the devices (not physdev) it came
> in on?
this too would break REDIRECT.
the thing with NAT:ing in the bridge is that you change the IP addressing
of the packet. As the IP addressing is changed there is a very high
probability it needs to be rerouted. Bridgeing and preserving the MAC is
in many cases not correct.
Yes, in MASQUERADE type flows where the firewall SNATs flows to it's own
address it might be possible in certain cases to
remember the original "client" MAC address, and avoid the ARP:ing on
return traffic. But this is on the assumption that the client network is
symmetric. It is possible the traffic was received via an assymetric route
where return traffic should go to another MAC address and ARP is required
to figure this out.
> Anyway, although this is not how the bridge-netfilter integration was
> planned, do you think my proposal is sound?
I see only two approaches. Either the current behaviour relying on routing
being correctly configured, or an explicit flag in each NAT rule telling
if the packets in this session should be rerouted or not moving the burden
to the firewall administrator. Actually this flag might be good for
iptables in general to optimize NAT performance slightly and not only when
using bridge-netfilter. The constant rerouting of packets in a NAT session
is a significant overhead and often it can be priorly known (by the admin)
that this rerouting is not needed for the traffic flows in question.
But I strongly suspect your problems is not at all related to routing. It
would only be routing related if your bridge does not have correct routing
info for either the source or destination. If you have routing for both
source and destination then your problem is almost certainly not routing
related but most likely ARP related.
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 10:11 ` Henrik Nordstrom
@ 2005-09-29 12:19 ` Amin Azez
2005-09-29 12:49 ` Martijn Lievaart
2005-09-29 14:35 ` Henrik Nordstrom
0 siblings, 2 replies; 17+ messages in thread
From: Amin Azez @ 2005-09-29 12:19 UTC (permalink / raw)
To: netfilter-devel
Henrik Nordstrom wrote:
> On Thu, 29 Sep 2005, Amin Azez wrote:
>
>> It is a change of the response dnat that I am suggesting. The DNAT
>> packets need delivering to the original MAC/IP/PHYSDEV in bridging mode,
>> and in routing mode the routing stack will probably find the same
>> MAC/IP/PHYSDEV using its routing tricks and ARP. In bridging mode the
>> routing code cannot find this.
>
> ./net/ipv4/ipvs/ip_vs_proto_tcp.c:tcp_snat_handler
> More likely ARP is your problem.
>
> When you SNAT to another address on the LAN you need to make sure there
> is something answering to ARP on that address, if not the receiving
> station won't be able to ARP for the MAC where to send return traffic.
Precicely, ARP is the problem. Because the de-nat'd return packet of the
snat'd flow is not on any local bridge subnets, no arp requests are
made. There are also other reasons for preferring not to make arp requests.
>> Heh. I think I could permit the reverse snat'ing in bridge mode without
>> damaging the other behaviour.
>
> If the problem is what I suspect then "fixing" the NAT to not route the
> traffic won't make much difference.
I'm still having difficulty seeing this. I only want to stop routing out
of the reply when it was bridged in rather than routed in.
>> I was planning to use whether the target mac of the first packet matched
>> the mac of the incoming physdev as an indicator of bridging or routing,
>
> this is not sufficient and would break REDIRECT.
How would it do that?
>> but then I wondered if the interface merely being in promiscuous mode
>> would cause trouble, but I don't think so; but maybe I should do IP
>> checks instead and bridging is where the dest IP address of the first
>> packet doesn't match the ip address of the devices (not physdev) it came
>> in on?./net/ipv4/ipvs/ip_vs_proto_tcp.c:tcp_snat_handler
>
> this too would break REDIRECT.
>
> the thing with NAT:ing in the bridge is that you change the IP
> addressing of the packet. As the IP addressing is changed there is a
> very high probability it needs to be rerouted. Bridgeing and preserving
> the MAC is in many cases not correct.
I still want to route on the output of the snat'd packet, I just want to
avoid routing on the de-nat'd return packets. I'm not sure how this
breaks redirects.
> Yes, in MASQUERADE type flows where the firewall SNATs flows to it's own
> address it might be possible in certain cases to remember the original
> "client" MAC address, and avoid the ARP:ing on return traffic. But this
> is on the assumption that the client network is symmetric. It is
> possible the traffic was received via an assymetric route where return
> traffic should go to another MAC address and ARP is required to figure
> this out.
Yes, this is a strong assumption, we would only do this when snat-ing
bridged traffic. There may be assymetric bridging which would break, but
then snat is already broken for bridging.
>> Anyway, although this is not how the bridge-netfilter integration was
>> planned, do you think my proposal is sound?
>
> I see only two approaches. Either the current behaviour relying on
> routing being correctly configured, or an explicit flag in each NAT rule
> telling if the packets in this session should be rerouted or not moving
> the burden to the firewall administrator. Actually this flag might be
> good for iptables in general to optimize NAT performance slightly and
> not only when using bridge-netfilter. The constant rerouting of packets
> in a NAT session is a significant overhead and often it can be priorly
> known (by the admin) that this rerouting is not needed for the traffic
> flows in question.
>
This sounds like a good solution, and in my preferred deployment an
option of the flag would be to "guess" whether or not to route the
return packet based on my stated criteria.
> But I strongly suspect your problems is not at all related to routing.
> It would only be routing related if your bridge does not have correct
> routing info for either the source or destination.
My bridge does may not have routing for the source in many instances.
> If you have routing
> for both source and destination then your problem is almost certainly
> not routing related but most likely ARP related.
quite so.
Thanks for your helpful input. The matter of assymetric routes had not
applied to me, but I don't think it will be a problem, I only wish to
change behaviour where input routing was not happening.
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 12:19 ` Amin Azez
@ 2005-09-29 12:49 ` Martijn Lievaart
2005-09-29 13:12 ` Amin Azez
2005-09-29 14:35 ` Henrik Nordstrom
1 sibling, 1 reply; 17+ messages in thread
From: Martijn Lievaart @ 2005-09-29 12:49 UTC (permalink / raw)
To: azez; +Cc: netfilter-devel
Amin Azez zei:
> Henrik Nordstrom wrote:
>> But I strongly suspect your problems is not at all related to routing.
>> It would only be routing related if your bridge does not have correct
>> routing info for either the source or destination.
>
> My bridge does may not have routing for the source in many instances.
Maybe a stupid remark, but if you create routes for the source to the
existing IP where you want the packet delivered? Does that solve your
problem?
M4
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 12:49 ` Martijn Lievaart
@ 2005-09-29 13:12 ` Amin Azez
2005-09-29 15:20 ` Martijn Lievaart
0 siblings, 1 reply; 17+ messages in thread
From: Amin Azez @ 2005-09-29 13:12 UTC (permalink / raw)
To: netfilter-devel
Martijn Lievaart wrote:
> Amin Azez zei:
>
>>Henrik Nordstrom wrote:
>>
>>>But I strongly suspect your problems is not at all related to routing.
>>>It would only be routing related if your bridge does not have correct
>>>routing info for either the source or destination.
>>
>>My bridge does may not have routing for the source in many instances.
>
>
> Maybe a stupid remark, but if you create routes for the source to the
> existing IP where you want the packet delivered? Does that solve your
> problem?
My actual problem is that I need a bridging kernel that can be deployed
in unknown network environments and nat to a known gateway that is the
only machine guaranteed to be on the same subnet. It's not pretty.
We have created broad network aliases for the bridge so that all IP
addresses are local and roughly get the scenario you speak of, but then
we need to add static arp entries to assign the default gateway's mac to
specific known non-local ip, which is of course a worse hack than
mending snat for source-bridge scenarios.
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 12:19 ` Amin Azez
2005-09-29 12:49 ` Martijn Lievaart
@ 2005-09-29 14:35 ` Henrik Nordstrom
2005-09-30 9:56 ` Amin Azez
1 sibling, 1 reply; 17+ messages in thread
From: Henrik Nordstrom @ 2005-09-29 14:35 UTC (permalink / raw)
To: Amin Azez; +Cc: Netfilter Developers
On Thu, 29 Sep 2005, Amin Azez wrote:
> Precicely, ARP is the problem. Because the de-nat'd return packet of the
> snat'd flow is not on any local bridge subnets, no arp requests are
> made. There are also other reasons for preferring not to make arp requests.
So you do not have routing for the initiating host? Or what is your
problem more exacly?
> I'm still having difficulty seeing this. I only want to stop routing out
> of the reply when it was bridged in rather than routed in.
There is not really any difference in request/reply to the bridge. Both
are just packets. One is SNAT:ed, the other DNAT:ed. But it is true that
conntrack knows reasonably well which direction the packet is flowing
assuming "normal" traffic flows so it is not impossible.
>>> I was planning to use whether the target mac of the first packet matched
>>> the mac of the incoming physdev as an indicator of bridging or routing,
>>
>> this is not sufficient and would break REDIRECT.
>
> How would it do that?
If you do not reroute DNAT:ed packets then the bridge would deliver the
packet to the original destination MAC, not to the local host.
Same applies if you DNAT within the local subnet.
> I still want to route on the output of the snat'd packet, I just want to
> avoid routing on the de-nat'd return packets. I'm not sure how this
> breaks redirects.
For the same reasons the return packets needs to be routed. These packets
are implicitly DNAT:ed, changing the destination IP to a different IP than
the sending host ARP:ed for.
>> Yes, in MASQUERADE type flows where the firewall SNATs flows to it's own
>> address it might be possible in certain cases to remember the original
>> "client" MAC address, and avoid the ARP:ing on return traffic. But this
>> is on the assumption that the client network is symmetric. It is
>> possible the traffic was received via an assymetric route where return
>> traffic should go to another MAC address and ARP is required to figure
>> this out.
>
> Yes, this is a strong assumption, we would only do this when snat-ing
> bridged traffic. There may be assymetric bridging which would break, but
> then snat is already broken for bridging.
I would not agree. Both SNAT and DNAT works just fine in bridgeing
assuming the IP level is properly set up to support the addresses used.
You can not SNAT to an otherwise non-existing IP as there then is no MAC
address for the receiving host to sent the replies to (no ARP answer when
the receiving host wants to send reply packets, so it can't).
> This sounds like a good solution, and in my preferred deployment an
> option of the flag would be to "guess" whether or not to route the
> return packet based on my stated criteria.
This "guess" must be done by the administrator when creating the rule, if
not it gets very confusing.
Thinking this over there actually needs to be several different modes
- Don't reroute the packet at all. All MAC addressing is preserved as-is
on each packet. (relevant to both normal IP level iptables and bridgeing)
- Track the initiating source MAC address, and reroute at MAC level all
packets in the reply direction to this address. (only relevant to
bridgeing). But route packets in the forward direction. **
- Reroute all NAT:ed packets. (the default, what we have today).
One drawback of the proposed solution is that conntrack needs to be
extended with MAC addressing in each direction.
**) This is only meaningful in MASQUERADE type SNAT setups where the
bridge does not have routing to all "internal clients".
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 13:12 ` Amin Azez
@ 2005-09-29 15:20 ` Martijn Lievaart
2005-09-29 16:33 ` Henrik Nordstrom
0 siblings, 1 reply; 17+ messages in thread
From: Martijn Lievaart @ 2005-09-29 15:20 UTC (permalink / raw)
To: azez; +Cc: netfilter-devel
Amin Azez zei:
> We have created broad network aliases for the bridge so that all IP
> addresses are local and roughly get the scenario you speak of, but then
> we need to add static arp entries to assign the default gateway's mac to
> specific known non-local ip, which is of course a worse hack than
> mending snat for source-bridge scenarios.
Why would creating routes for those specific non-local IPs to that gateway
not work?
I still fail to see what you are trying to achieve. In short, you SNAT
packets. You don't want to send the return packet to the original
source-IP based on normal ip-routing. Instead, you want to send it to the
MAC adres it was originally addressed to. I fail to see the value of this,
so I think I'm still missing something.
However, you can still achieve this by adding a route for the original
source IP to the IP it gets natted to. This would bypass the arp mechanism
and instead route the packet to the natted IP.
HTH,
M4
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 15:20 ` Martijn Lievaart
@ 2005-09-29 16:33 ` Henrik Nordstrom
2005-09-30 5:27 ` Martijn Lievaart
2005-09-30 9:28 ` Amin Azez
0 siblings, 2 replies; 17+ messages in thread
From: Henrik Nordstrom @ 2005-09-29 16:33 UTC (permalink / raw)
To: Martijn Lievaart; +Cc: netfilter-devel, azez
On Thu, 29 Sep 2005, Martijn Lievaart wrote:
> I still fail to see what you are trying to achieve. In short, you SNAT
> packets. You don't want to send the return packet to the original
> source-IP based on normal ip-routing. Instead, you want to send it to the
> MAC adres it was originally addressed to. I fail to see the value of this,
> so I think I'm still missing something.
Simplest setup explaining the case as I understood it:
unknown network mesh -> Bridge running SNAT -> Internet
and you want the bridge to SNAT whatever is seen from the internal
network, no matter what address is being used. The bridge does not have
full knowledge of how the internal network mesh looks like, only that
packets coming in on that interface is from the internal network.
Today this works fine for packets coming from the internal network going
towards the Internet, but fails on return traffic as the bridge does not
know where to route the "client" traffic.
If connection tracking in this kind of setup remembered the original
source MAC of the incoming packet then this could be used in the implicit
DNAT of the return traffic to route the packets (at level 2, not IP) to
the sending host/router on the internal network mesh without requiring
full routing information on the bridge.
This is in some senses similar to the level 3 routing without routing
tables problem triggering my development of CONNMARK years ago. CONNMARK
was initially triggered by the need to have a Internet gateway/firewall
without any detailed knowledge of what the internal network looked like
except for a router address where internal traffic could be sent.
Quite likely the problem Amin Azez is trying to address can be solved more
cleanly by proxy-ARP + CONNMARK based policy routing than by bridge
firewalling, but without knowing/understanding the exact layout of his
network mess it's hard to say what it best. But I know from experience
that bridge firewalling with NAT is very rarely the best approach in the
long run, only perhaps the quickest if you are in a pinch with very
limited time or prevented of doing it right.
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 16:33 ` Henrik Nordstrom
@ 2005-09-30 5:27 ` Martijn Lievaart
2005-09-30 11:24 ` Henrik Nordstrom
2005-10-03 10:48 ` Amin Azez
2005-09-30 9:28 ` Amin Azez
1 sibling, 2 replies; 17+ messages in thread
From: Martijn Lievaart @ 2005-09-30 5:27 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel, azez
Henrik Nordstrom wrote:
> On Thu, 29 Sep 2005, Martijn Lievaart wrote:
>
>> so I think I'm still missing something.
>
>
> Simplest setup explaining the case as I understood it:
>
> unknown network mesh -> Bridge running SNAT -> Internet
>
> and you want the bridge to SNAT whatever is seen from the internal
> network, no matter what address is being used. The bridge does not
> have full knowledge of how the internal network mesh looks like, only
> that packets coming in on that interface is from the internal network.
>
>
Ah, now I see. The unknown network mesh uses multiple routers which are
unknown to the bridge, so the bridge does not know where to route the
return packets, although it could know if it saved the mac the original
packet came from. Right?
M4
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 16:33 ` Henrik Nordstrom
2005-09-30 5:27 ` Martijn Lievaart
@ 2005-09-30 9:28 ` Amin Azez
1 sibling, 0 replies; 17+ messages in thread
From: Amin Azez @ 2005-09-30 9:28 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel
Henrik Nordstrom wrote:
> Quite likely the problem Amin Azez is trying to address can be solved
> more cleanly by proxy-ARP + CONNMARK based policy routing than by bridge
> firewalling, but without knowing/understanding the exact layout of his
> network mess it's hard to say what it best.
Good points; the only reason the network-mess gets to bridge to the
router is that the bridge is arp-faking with ebtables to give out the
router mac address as if it were whatever the network-mess was arping
for. No doubt connmark routing would work too, I hadn't considered this;
but marks are already well used for other things.
> But I know from experience
> that bridge firewalling with NAT is very rarely the best approach in the
> long run, only perhaps the quickest if you are in a pinch with very
> limited time or prevented of doing it right.
Where the network mess cna be known in advance, I would agree, but in a
case where it "just needs to work" extending snat to bridging makes sense.
Anyway, I am proceeding with this, and appreciate the feedback. I shall
extend the snat iptables target to allow this as an optional extension.
Amin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-29 14:35 ` Henrik Nordstrom
@ 2005-09-30 9:56 ` Amin Azez
0 siblings, 0 replies; 17+ messages in thread
From: Amin Azez @ 2005-09-30 9:56 UTC (permalink / raw)
To: netfilter-devel
Henrik Nordstrom wrote:
> If you do not reroute DNAT:ed packets then the bridge would deliver the
> packet to the original destination MAC, not to the local host.
>
> Same applies if you DNAT within the local subnet.
I probably didn't make clear that I was looking at changing kernel
behaviour, not looking for iptables rules.
Oh; well that was the bit I was going to change. One of the bridgeing
code output functions (whose name I forget for now) was the trick;
>>> Yes, in MASQUERADE type flows where the firewall SNATs flows to it's own
>>> address it might be possible in certain cases to remember the original
>>> "client" MAC address, and avoid the ARP:ing on return traffic. But this
>>> is on the assumption that the client network is symmetric. It is
>>> possible the traffic was received via an assymetric route where return
>>> traffic should go to another MAC address and ARP is required to figure
>>> this out.
>>
>>
>> Yes, this is a strong assumption, we would only do this when snat-ing
>> bridged traffic. There may be assymetric bridging which would break, but
>> then snat is already broken for bridging.
>
>
> I would not agree. Both SNAT and DNAT works just fine in bridgeing
> assuming the IP level is properly set up to support the addresses used.
I agree, but pure bridging also works without this assumption and it
could work with snat bridging.
> You can not SNAT to an otherwise non-existing IP as there then is no MAC
> address for the receiving host to sent the replies to (no ARP answer
> when the receiving host wants to send reply packets, so it can't).
This is the problem I intend to solve
> - Don't reroute the packet at all. All MAC addressing is preserved
> as-is on each packet. (relevant to both normal IP level iptables and
> bridgeing)
>
> - Track the initiating source MAC address, and reroute at MAC level
> all packets in the reply direction to this address. (only relevant to
> bridgeing). But route packets in the forward direction. **
I did say in my first post that my conntrack mods are already tracking
the mac address and phsedv of the originating packet; this is what I was
planning to do.
>
> - Reroute all NAT:ed packets. (the default, what we have today).
>
> One drawback of the proposed solution is that conntrack needs to be
> extended with MAC addressing in each direction.
already got it, and afact nf_netfilter already does much in this
direction anway.
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-30 5:27 ` Martijn Lievaart
@ 2005-09-30 11:24 ` Henrik Nordstrom
2005-10-03 10:48 ` Amin Azez
1 sibling, 0 replies; 17+ messages in thread
From: Henrik Nordstrom @ 2005-09-30 11:24 UTC (permalink / raw)
To: Martijn Lievaart; +Cc: netfilter-devel, azez
On Fri, 30 Sep 2005, Martijn Lievaart wrote:
> Ah, now I see. The unknown network mesh uses multiple routers which are
> unknown to the bridge, so the bridge does not know where to route the return
> packets, although it could know if it saved the mac the original packet came
> from. Right?
This is my understanding of the original question, yes.
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-09-30 5:27 ` Martijn Lievaart
2005-09-30 11:24 ` Henrik Nordstrom
@ 2005-10-03 10:48 ` Amin Azez
2005-10-03 12:24 ` Henrik Nordstrom
1 sibling, 1 reply; 17+ messages in thread
From: Amin Azez @ 2005-10-03 10:48 UTC (permalink / raw)
To: Martijn Lievaart; +Cc: netfilter-devel, Henrik Nordstrom
Martijn Lievaart wrote:
>
> Ah, now I see. The unknown network mesh uses multiple routers which
> are unknown to the bridge, so the bridge does not know where to route
> the return packets, although it could know if it saved the mac the
> original packet came from. Right?
Yes. And having saved the mac address (and physdev) it will use the
bridge output functions instead of the ip route functions.
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-10-03 10:48 ` Amin Azez
@ 2005-10-03 12:24 ` Henrik Nordstrom
2005-10-04 10:58 ` Amin Azez
0 siblings, 1 reply; 17+ messages in thread
From: Henrik Nordstrom @ 2005-10-03 12:24 UTC (permalink / raw)
To: Amin Azez; +Cc: netfilter-devel, Martijn Lievaart
On Mon, 3 Oct 2005, Amin Azez wrote:
> Yes. And having saved the mac address (and physdev) it will use the
> bridge output functions instead of the ip route functions.
Saving the MAC should be sufficient. The implicit DNAT of return traffic
in SNAT:ed connections is run in PREROUTE and should be before the bridge
forwarding table..
Regards
Henrik
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: snat bridge routes reply packets
2005-10-03 12:24 ` Henrik Nordstrom
@ 2005-10-04 10:58 ` Amin Azez
0 siblings, 0 replies; 17+ messages in thread
From: Amin Azez @ 2005-10-04 10:58 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel, Martijn Lievaart
Henrik Nordstrom wrote:
> On Mon, 3 Oct 2005, Amin Azez wrote:
>
>> Yes. And having saved the mac address (and physdev) it will use the
>> bridge output functions instead of the ip route functions.
>
>
> Saving the MAC should be sufficient. The implicit DNAT of return traffic
> in SNAT:ed connections is run in PREROUTE and should be before the
> bridge forwarding table..
Thanks for this tip. I've been working through the conntrack and natting
code again looking for the most judicious point to apply this.
There is a wiki up with my findings I'll announce in another post.
Sam
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2005-10-04 10:58 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-28 16:05 snat bridge routes reply packets Amin Azez
2005-09-28 19:56 ` Henrik Nordstrom
2005-09-29 8:42 ` Amin Azez
2005-09-29 10:11 ` Henrik Nordstrom
2005-09-29 12:19 ` Amin Azez
2005-09-29 12:49 ` Martijn Lievaart
2005-09-29 13:12 ` Amin Azez
2005-09-29 15:20 ` Martijn Lievaart
2005-09-29 16:33 ` Henrik Nordstrom
2005-09-30 5:27 ` Martijn Lievaart
2005-09-30 11:24 ` Henrik Nordstrom
2005-10-03 10:48 ` Amin Azez
2005-10-03 12:24 ` Henrik Nordstrom
2005-10-04 10:58 ` Amin Azez
2005-09-30 9:28 ` Amin Azez
2005-09-29 14:35 ` Henrik Nordstrom
2005-09-30 9:56 ` Amin Azez
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.