[ale] seeking advanced proxy ARP assistance
Jay Libove
libove at felines.org
Tue May 17 07:34:06 EDT 2005
Hi ALE -
I need help with an advanced proxy ARP configuration. I'll happily trade
beer and pizza (or your beverage and food of choice, within reason!) for
successful assistance.
I have Speakeasy Internet service with 10 static bridged IP addresses.
I have Vonage Voice over IP phone service with a Linksys RT31P2.
I want to put the RT31P2 in front of my whole network to take advantage of
its traffic shaping capability.
The problem is that the RT31P2 neither bridges nor proxy ARPs, so though
it can route (just well enough, it does have quirks but I've worked around
them I think), Speakeasy's (Covad's) router ARPs for my static IP
addresses and does not get answers (except for the one which I assign to
the RT31P2 itself of course).
My idea is to configure my Linux (Fedora Core 3) firewall to have an extra
ethernet adaptor which does not have an IP address but will listen for and
answer the ARP requests coming from the Speakeasy / Covad router,
supplying as the target MAC address the MAC of the outside interface of
the RT31P2.
The basic automagic proxy ARP functionality of the 2.6.x kernel does not
handle this properly. For one thing, it does not seem to want to answer at
all unless there is some (any) IP address assigned to the interface. Okay,
I could drop another RFC1918 address on that interface, though I'd prefer
to not do so. With an address assigned, it always provides that
interface's MAC address as the target, despite published permanent ARP
entries I set on that interface saying that the target should be something
else. (Took me right off the net until the router's ARP cache timed out
again, heh).
Next attempt: ebtables, with this command:
# ebtables -t nat -A PREROUTING -p arp -i eth3 --arp-opcode request \
--arp-ip-dst one_of_my_statics -j arpreply \
--arpreply-mac MAC_of_RT31P2_outer_interface
along with appropriate INPUT and OUTPUT permissions in iptables:
# iptables -A INPUT -i eth3 -j ACCEPT
# iptables -A OUTPUT -o eth3 -j ACCEPT
# iptables -A FORWARD -i eth3 -o eth3 -j ACCEPT
# iptables -A FORWARD -i eth3 -j DROP
Note that all ebtables policies are ACCEPT by default.
Then I captured on eth3:
# tethereal -n -i eth3 -s 500 -w arp.cap arp
and waited until the particular test IP address I chose in the ebtables
command above got ARP'd. Unfortunately, it got just one answer, which is
the published permanent ARP entry for the eth0 interface (which happens to
presently be plugged in to the same outside network segment hub which eth3
is in). The eth3 funny ARP entry did not get sent in reply.
I did a further test, guessing that maybe the kernel will only send a
first possible ARP reply, by removing the published ARP entry for the test
host on eth0. Unfortunately, that too did not work - instead of sending
an ARP reply from eth3, the Linux box simply sent no ARP reply at all for
that test IP address. (I seem to be very good at dropping my boxes off of
the Internet, and not so good at advanced proxy ARP configurations!).
Here's what the network should eventually look like if I can get this
funky proxy ARP working:
phone line carrying the DSL signal
|
|
BroadXent 8012 DSL modem
|
|
Outer 10Mbit Ethernet HUB (not switch)
| +-----> sniffer
|
|
Vonage Voice Terminal (Linksys RT31P2)
Static IP address 1.1.1.43
|
|
Inner 10Mbit Ethernet hub (not switch)
| +-----> sniffer
|
proxy ARP |
outside interface Outside interface
no IP address static IP address 1.1.1.42
^======firewall Linux server======^
Inside interface
local address 192.168.255.2
|
|
Core network switch
| | | | ...
various servers, workstations, &etc
Static IP addresses 1.1.1.44 through 1.1.1.51
Here's what the network actually looks like right now as I do these tests:
phone line carrying the DSL signal
|
|
BroadXent 8012 DSL modem
|
|
Outer 10Mbit Ethernet HUB (not switch)
| | +-----> sniffer
| |
| |
| +--->Vonage Voice Terminal (Linksys RT31P2)
| Static IP address 1.1.1.43
|
|
Outside interface static IP address 1.1.1.42
firewall Linux server
|
|
Core network switch
| | | | ...
various servers, workstations, &etc
Static IP addresses 1.1.1.44 through 1.1.1.51
Sorry for the sucky ASCII artwork... I'm a computer security engineer, not
a draftsman :)
Thanks for any help you can offer!
-Jay Libove, CISSP
libove at felines.org
More information about the Ale
mailing list