From: DEMAINE Benoit-Pierre <benoit@demaine.info>
To: netfilter@vger.kernel.org
Subject: Re: ebtables to perform MAC NAT ?
Date: Tue, 22 Jul 2008 01:09:14 +0200 [thread overview]
Message-ID: <4885171A.1080709@demaine.info> (raw)
In-Reply-To: <4884E580.5000909@riverviewtech.net>
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)
next prev parent reply other threads:[~2008-07-21 23:09 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-21 6:09 ebtables to perform MAC NAT ? DEMAINE Benoit-Pierre
2008-07-21 15:08 ` Grant Taylor
2008-07-21 15:58 ` DEMAINE Benoit-Pierre
2008-07-21 19:37 ` Grant Taylor
2008-07-21 23:09 ` DEMAINE Benoit-Pierre [this message]
2008-07-22 16:34 ` Grant Taylor
2008-07-23 18:54 ` DEMAINE Benoit-Pierre
2008-07-30 14:11 ` DEMAINE Benoit-Pierre
2008-07-22 8:25 ` Oscar N
2008-07-22 16:01 ` DEMAINE Benoit-Pierre
2008-07-23 7:57 ` Oscar N
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4885171A.1080709@demaine.info \
--to=benoit@demaine.info \
--cc=netfilter@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox