Re: ebtables to perform MAC NAT ?

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

 



Grant Taylor wrote:
(Grant sorry for double, I forgot to change the To: field)

No problem. Someone (possibly me?) needs to suggest that the mailing list be tweaked to direct replies directly to it rather than the sender of the message being replied to.

Adding a reply to is usually enough.

IPv6 is not today's problem.

*nod* I was more concerned about the fact that IP(v4) was not bound to the interfaces that it needed to be bound to.

Yup, hostap things made mess in your head; the only way for me to
understand which interface to use is to look at the MAC length: a long
MAC like the eth1's would never fit any network (802.3 or 802.11 :) ).
The only place where I have seen long MACs like this is ethernet over
FireWire.

It's what i have been said years ago; that's why 3y ago, when brctl failed, i did not spend more than 10 minutes testing it, and moved *at once* to (IP) NAT. And, IMHO, my tests confirm it again. So, the point of this thread is to "workaround" this :)

*nod*

Is there a reason you did not look in to standard routing verses NAT? I would think it would be trivial to get your workstations to connect through your system as a router? Though, depending on what your internet router is, you may not be able to tell it that there is another subnet behind the system (Gluton) acting as the AP / Router.

Yes: because i know what i would imply. Imagine a world where my house
would have 5 machines like Gluton; there would be at least a base
network/mask for the "root", and a different network/mask per zone
behind each machine; each bridge would be easier, cause they would be
simple routers; but this would require long routing tables. If a machine
in the middle zone wanted to be able to talk to any machine, it would
require to have a default net, a default gate, plus 4 local gates. It
easy to do manually for any good UNIX admin; it's way more difficult to
implement when you want to use a hardware DHCP and deliver zones to
Windows (i would not even be able to declare routes and gates in a Home
Windows).

=> to keep things simple, let me have a single homogeneous network.
Every one in the same network (yes there will be broadcasting problems;
in fact, i am already having ARP broadcast problems :) it's even the
only problem i have left to fix :D )

I could also buy hardware repeaters (like WDS machines), but they cost
130 euro each, and I got enough hardware to do it myself, so, let's try
the soft way before buying more stuff.

First, let's start with terminology. Here's what things are called and the layer they are used on.

Thanks for the lecture :) I had computing lectures in my french, and,
math and electronic lectures in english, so, things are a bit mixed in
my head :) Words are important ... except you did not really specify the
layers :) nm

Proxy ARP (to the best of my knowledge) is a way for a two devices on separate non-connected networks to communicate with each other.

Some people mentioned proxyarp, but i did not found so called package in
Debian or Gentoo; maybe the package has an other name ? as long as it
can help brctl to bridge correctly ... I am open minded.

If the device being ARPed is in the same subnet but in another non-connected network one (or more) routers can be configured to Proxy ARP for it. In this case a client will send an ARP requestreqeust for the target device, to which the router doing the Proxy ARP will respond with its own MAC address. Thus the client sending the ARP request will have an answer and a target MAC address to send the traffic to.

ok

When the client does send its traffic, it will do so with an ethernet frame with its own MAC as the source address and the router's MAC address as the destination address with an IP packet with the expected source and destination IP addresses. The router doing the Proxy ARPing will then receive this packet and alter the source and destination MAC addresses and send a new ethernet frame on out to the next network segment containing an unmodified IP packet.

Yup, all known, and works already this way when i do as said in my first
post:
The whole problem lays in arp tables: if after
     ebtables -t nat -F ; ebtables -t nat -A POSTROUTING -j snat
     --to-source 00:09:5B:91:56:08 --snat-arp ;
I declare arp tables manually on all hosts, everything works fine.

Maybe there is a magical ebtables option I did not remark, or a friend tool specially dedicated to help brctl in this kind of configurations. Many people bought MA311, so, I really hope this case have been met by many people, and hopefully, some solved it.

Faulty hardware is usually extremely tough to get around.

If we cant do it using ebtable/netfilter/proxyarp ... either I have to
revert IP-NAT, or buy an Atheros, or buy a Fonera or Linksys ...


Seeing as how I believe the problem to be with the MA301 and bridging with its needed promiscuouspromiscious mode, I think you will have better luck with Proxy ARP. With Proxy ARP all ethernet frames will be directly to the raw ethernet or MA301 MAC address.

What's the package name in distributions ?
or, do I have to install it manually ?

Why not just use standard routing?

See higher: to day, I am *trying* to get unified network.

Keep in mind that the ""problem is not with the brctl command (read: binary file). Brctl is just the user space utility to adjust bridging in the kernel, much like IPTables is the user space utility to adjust firewalling in the kernel.

Also, this is not a problem with bridging so much as it is a problem with the MA311 ethernet device. If you were using a different ethernet device we would not be having this discussion.

Could things be different if I did stuff in PREROUTING ? maybe there is
a way to do things in the PREROUTING place, a way that would look like
an ARP proxy ... ?

- answer not coming back through

The answers do not come back through because you have altered the destination of the ARP reply (source of the modified ARP requestreqeust) to be the MAC address of the MA3111. So by all rights bridging is not suppose to pass the ARP reply on.

In IPtables NAT, the answers comes back with the gateway IP address as
destination, and then, the gateway rebuilds a packet with the LAN IP a
new destination. This is what I was expecting ebtables would do with
MACs when providing --snat-arp.

Maybe there is a workaround, still in rperouting: imagine we record the
... "frame" number sequence, and other parameters at the moment we do
SNAT; if we can predict what the answer should look like (sequence
number should be the same IMHO, but with a frame number incremented),
then we can identify the answer coming in, and then ... do DNAT in
PREROUTING ? we need to identfy whether an answer is coming back for
Gluton itself, or for a machine it is NATing ...

- bug in --snat-arp

No, I don't think so. SNAT is doing what it is suppose to. At least in so far as modifying the "source hardwarehardare address" with in the ARP request packet. (You would probably want to modify the source MAC address of the ethernet frame carryingcarying the ARP requestreqeust too.)

Maybe; that's the point where I say: I dont know enough about networking
to know what frames should look like, and the tools to check what they
actually look like :)

In effect you are wanting a way to pass the ARP reply on to the internal system that initiated the original ARP request. This is more of a stateful operation verses the stateless operation that the majority of this operatesopeates on.

Like Iptables NAT would do.

I did not detailed this point in my first post, but after the simple snat thing, host B get A's MAC in his ARP tables. Considering this point, plus tcpdumps just means: my ebtables rule does forward the question, but the question still contains A's MAC even when using --snat-arp (that should IMHO work "inside" the question). I can send details on this if you want within 24h. I would need to move two machines in the network to do that.

No, don't go to that trouble.  Do some reading on Proxy ARP first.

I wondered if brctl was bothered by the fact the answer comes back with it's own MAC as destination; once ARP tables are declared, all works fine, maybe because of IP routing tables; ARP queries seem to be more in trouble.

I don't think that the bridging portion of the kernel even considered passing the packet out the bridge because the destination MAC of the frame was to the bridge its self, not another system on the other side of the bridge.

It's normal the broadcast goes through: it has destination different
than local MAC; that's why I think, if we change the destination of the
answer in PREROUTING, the answer should be routed back to the one who
asked the question :)

But if proxyarp already does that ... => how is it called in debian ?

--
 >o_/ DEMAINE Benoit-Pierre (aka DoubleHP) http://benoit.demaine.info/
If computing were an exact science, IT engineers would not have work \_o<

"So all that's left, Is the proof that love's not only blind but deaf."
(FAKE TALES OF SAN FRANCISCO, Arctic Monkeys)

--
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