As 802.11b becomes more and more congested, we're looking at alternatives to use for relay or backhaul links. Price is always an issue, so we're considering 802.11a gear which thanks to 802.11g now seems to be largely ignored in the consumer realm and is thus sometimes quite cheap.
The project pages below describe how we built our own backhaul for approximately $450 using two $22 surplus Proxim Harmony APs, a Soekris board, patch antennas etc.
Important Note About FCC Compliance: We are currently evaluating the FCC compliance of the prototype 802.11a system described here. Anyone seeking to emulate our design should do likewise! We take compliance seriously and will modify the design to comply if at all necessary.
The key to our 802.11a backhaul project was finding the Proxim 802.11a Harmony 8571 which is a rare 802.11a device because it has removable antennas. These are available at www.justdeals.com for $15, but with $12 shipping for the first and $4 for subsequent devices, they average out around $23 each for two with shipping. Still pretty reasonable for a device that was originally $600!
We took one apart and discovered it has an 'unwrapped' PCMCIA card in it with standard SMA connector pigtails. Its also potentially re-programmable as a bridge which would make this whole relay unbelievably cheap, but we lack the expertise to get that far! The non-standard PoE support was a nice bonus - as is the ability to run with the standard power supply 100 feet away.
The next piece of the puzzle was antennas. Most point to point 802.11a antennas are in the 5.8GHz range where point to point is allowed by the FCC. The proxim is at 5.3GHz as its designed for multipoint. Fortunately SuperPass has a suitable patch antenna that someworks across the entire 802.11a 5GHz range of 5.1-5.9GHz. At 18.5dbi with 12 degree H and 32 degree V beam its a great solution (so far).
We decided to use the Proxim AP unmodified at one end of the link and a Soekris board with a Proxim PCMCIA card removed from another AP at the other. The Soekris adds a lot to the expense, but does provide a lot of configuration flexibility. The MadWiFi Atheros chip drivers work fine with this chipset (at least for our needs).
There's a couple of ways to slice this as some new products are almost available. First, here are the parts that stay the same regardless:
| Item# | Description | Vendor | Qty | Price | Ext Price |
|---|---|---|---|---|---|
SPPJ28 | 18.5dbi 5.1-5.9 GHz panel antenna | www.superpass.com | 2 | 65 | 130 |
48M2MLMR400 | 48 in RP-TNC Male - N Male LMR400 | www.fab-corp.com | 2 | 20 | 40 |
various | outdoor cases | local electrical supply store / supermarket | 2 | 10 | 20 |
190 |
Here's the rest of the parts that reflect how we built the prototype version:
| Item# | Description | Vendor | Qty | Price | Ext Price |
|---|---|---|---|---|---|
15451130 | net4511-30 Board only | www.soekris.com | 1 | 161 | 161 |
31954804 | PoE Power Supply | www.soekris.com | 1 | 22 | 22 |
8571-01_Combo | Proxim Harmony 8571 | www.JustDeals.com | 2 | 23 | 46 |
RSA-3452 | SMA-M TO N-Female Adapter | www.radiooutfitter.com | 2 | 6 | 12 |
64MB CF | 64MB Compact Flash card for Soekris | 1 | 25 | 25 | |
homebrew PoE | PoE Hack Adapter - injector only | www.socalfreenet.org/poe | 1 | 10 | 10 |
276 |
Here's a 2nd variation that replaces the Proxim radio and AP with a miniPCI a/b/g card and uses the latest Soekris boards (available at the end of March):
| Item# | Description | Vendor | Qty | Price | Ext Price |
|---|---|---|---|---|---|
15452620 | net4526-20 Board only (32MB, 15MB CF) | www.soekris.com | 2 | 129 | 268 |
31954804 | PoE Power Supply | www.soekris.com | 2 | 20 | 40 |
| #5354 MP ARIES | 5354 ARIES MP 802.11a/b/g miniPCI card | www.netgate.com | 2 | 90 | 180 |
| #PIG-UFL-NF-19 | U.FL to N FEMALE bulkhead Pigtail | www.netgate.com | 2 | 13 | 26 |
514 |
And then there's the combination option that uses one cheap Proxim AP unmodified, and a Soekris board plus miniPCI radio card (thereby avoiding hacking a Proxim AP):
| Item# | Description | Vendor | Qty | Price | Ext Price |
|---|---|---|---|---|---|
15452620 | net4526-20 Board only (32MB, 15MB CF) | www.soekris.com | 1 | 135 | 135 |
31954804 | PoE Power Supply | www.soekris.com | 1 | 22 | 22 |
| #5354 MP ARIES | 5354 ARIES MP 802.11a/b/g miniPCI card | www.netgate.com | 1 | 90 | 90 |
| #PIG-UFL-NF-19 | U.FL to N FEMALE bulkhead Pigtail | www.netgate.com | 1 | 13 | 13 |
8571-01_Combo | Proxim Harmony 8571 | www.JustDeals.com | 1 | 27 | 27 |
RSA-3452 | SMA-M TO N-Female Adapter | www.radiooutfitter.com | 1 | 6 | 6 |
homebrew PoE | PoE Hack Adapter - injector only | www.socalfreenet.org/poe | 1 | 10 | 10 |
303 |
The cheapest possible version would cost $78 and requite no hardware hacking at all (just outdoor cases) - but it involves changing the firmware in the Proxim. Its possible in theory, but perhaps not in practice unfortunately:
| Item# | Description | Vendor | Qty | Price | Ext Price |
|---|---|---|---|---|---|
8571-01_Combo | Proxim Harmony 8571 | www.JustDeals.com | 2 | 23 | 46 |
RSA-3452 | SMA-M TO N-Female Adapter | www.radiooutfitter.com | 2 | 6 | 12 |
homebrew PoE | PoE Hack Adapter - injector only | www.socalfreenet.org/poe | 2 | 10 | 20 |
78 |
Notes about pricing:
These pages describe how we assembled the first 'prototype' version of the relay. Now that we know its working, we'll refine everything - e.g. by replacing the plastic food containers :-).
The relay has two ends. The radios are configured so that one end is an Access Point and the other is a client. We chose to do it this way because the Proxim only supports Access Point mode, unlike some APs that also have bridge mode capability. The Access Point end is pretty simple: basically a Proxim modified for PoE in an outdoor case with a high gain antenna.
The other end of the relay is more complicated. We chose a Soekris board and installed a second Proxim radio taken from a Proxim AP. We installed Pebble on the board which is probably overkill. We'll try Leaf Wisp for our next install.
First add straight-thru leads for the ethernet signal between the two connectors as shown. Then, cut the plugpack lead, and solder it to some solid core ethernet cable strands. We used cat-5 wiring standard T-568B for our adapter.
The white stripe on the plugpack wire goes to 4-5 (blue/bluewhite) and the totally black lead goes to 7-8 (brown-brownwhite). Then feed those strands into a double ethernet jack box. Punch those strands down as color coded on the block and you're done!
According to this poe calculator at 100ft it should still
get 12.5 even at the full 1 Amp (probably more than the AP draws).
DO NOT PLUG IN A STANDARD POE ADAPTER. Although the AP supports power on its ethernet port, close reading of the Proxim Harmony Power System manual, which also contains the PoE pinouts, suggests that Proxim was using 24V rather than the 48V which was later adopted as standard. Maybe someone can review the parts on the board and provide a definitive answer?
One end of the AP uses an unmodified Proxim Harmony AP. Unmodified as in - you could return this under warranty. Accordingly, this is the simple end of the relay. The parts you need for this end are:
Putting everything in the case is a fun part. There's a few non-obvious details however. By taking some simple signal strength measurements, we found that the antenna connector furthest from the ethernet jack is the 'primary' antenna, so be sure to use that. Also, sometimes the AP won't boot if the other antenna is left disconnected. Sure enough, the manual even says this on page 44: For Model 8571, you must use two antennas. This was inconsistent - sometimes it would boot and not others, so we left the 2nd antenna connected.
We decided to use an SMA to N-Female adapter because we're standardizing all our radios to have N-Female connectors so our antenna cables can all be identical. However you could instead buy a custom cable to suit. Note that this is an SMA connector, not the Reverse Polarity SMA (RP-SMA) connector that many 802.11b/g Access Points use.
Connecting and mounting the antenna is simple enough. Note there's no up/downtilt on this antenna mount. You can fudge this by jamming something appropriate at the top or bottom fitting to tilt up or down as needed.
The final piece of the puzzle is to create a PoE adapter. The Proxim already has internal support to take up to 24V power from the ethernet cable, so we just need an 'injector' to add the power to the ethernet cable. I.e., this is half of the PoE project. We measured the voltage from the supplied plug pack at 13.7VDC under load which was far enough above the manual's specified 12VDC input that we thought we could use the standard plugpack. Our first installation is running succesfully at 105 feet, so it seems to work in practice ok.
Pebble does not come with SNMP installed. Fortunately there is a contribution that makes it available.
Here is how we installed SNMP on a Pebble that was already in operation (always a scary thing to do!).
Get the avcNetSNMPv3-0.0.2.tar.gz file onto the pebble box. We used the scp that was built into the ssh client I was using. By default it will end up in the /root directory. The untar it and install it as follows:
tar -xvzf avcNetSNMPv3-0.0.2.tar.gz remountrw cp init.d/snmpd /etc/init.d chmod +x /etc/init.d/snmpd mkdir /ro/etc/snmp cp ro/etc/snmp/snmpd.conf /ro/etc/snmp mkdir /ro/var/net-snmp cp ro/var/net-snmp/snmpd.conf /ro/var/net-snmp/ cp sbin/snmpd /sbin chmod +x /sbin/snmpd mkdir /etc/snmp ln -s /rw/etc/snmp/snmpd.conf /etc/snmp/snmpd.conf mkdir /var/net-snmp/ ln -s /rw/var/net-snmp/snmpd.conf /var/net-snmp/snmpd.conf
If you think you got it all correct, you can then issue a fastreboot command to restart your machine.
Now that its installed, you can test it. Do this with:
/etc/init.d/snmpd start cat /var/log/snmpd.log
You may see some errors about renaming files. These should go away after the next reboot.
Once you're satisfied its working correctly, you can now set it up to automatically start when Pebble boots. This can be done as follows:
cd /etc/rc0.d ln -s ../init.d/snmpd K20snmpd cd /etc/rc1.d ln -s ../init.d/snmpd K20snmpd cd /etc/rc2.d ln -s ../init.d/snmpd S20snmpd cd /etc/rc3.d ln -s ../init.d/snmpd S20snmpd cd /etc/rc4.d ln -s ../init.d/snmpd S20snmpd cd /etc/rc5.d ln -s ../init.d/snmpd S20snmpd cd /etc/rc6.d ln -s ../init.d/snmpd K20snmpd
Now if you do a fastreboot you should find snmpd running succesfully.
Now you're ready to fire up your favourite snmp client and start generating pretty graphs.
The bridge end of the relay takes the feed from the 802.11a AP end and routes it for use locally (e.g. to feed an 802.11b Access Point). We used a Proxim card and antenna lead taken from a Proxim 8571 AP. Software is NYCWireless's Pebble distribution.
(Yes, we'll expand on this page!)
We decided to use Pebble for the client end of the relay - in part because it was the only distro we tried that would recognise the Atheros-based radio card.
First you'll need a compact flash with pebble. For this you'll need a Linux system and a CF adapter that works with it (we used the 'test' release of Debian's Sarge version). Then follow the instructions in the pebble readme. If you follow the directions it works great. This is not trivial for a Linux newcomer, so get help if need be.
Now plug your Soekris into a serial port, run a suitable terminal program (like Tera Term) set it to 19200 baud and fire it up. Iinterrupt the boot sequence within 5 secs with Ctrl-P and then enter the following commands:
set conspeed 9600 set pxeboot disabled set bootdelay 2
The console speed is set to match the default pebble console speed. Disabling PXE boot seems like a good idea. And the minimum 2 seconds boot delay shaves 3 seconds off the boot time.
Now power off the Soekris, plug the flash card into it and power up again, or type 'reboot' if you already have the card installed. Change your terminal program speed to 9600 and (hopefully) watch the pebble boot sequence unfold. Now we're ready to configure Pebble.
What we're trying to achieve is:
With the above in mind, let's get things set up! Log in to pebble via the serial port (using 'root' and the password you specified when building pebble). Then issue the command:
/usr/local/sbin/remountrw
so that your changes can be saved. Now edit the /etc/network/interfaces file. (I used 'vi /etc/network/interfaces'). Comment out or remove what's there and add the following:
auto lo
iface lo inet loopback
iface ath0 inet static
address 10.0.0.129
netmask 255.255.255.0
broadcast 10.0.0.255
gateway 10.0.0.1
up iwconfig ath0 ap 00:20:A6:47:F9:77
# alternatively use
# up iwconfig ath0 mode managed essid socalfreenet.org
auto eth0
iface eth0 inet static
address 10.0.3.1
netmask 255.255.255.0
broadcast 10.0.3.255
This tells it that 'ath0', the radio card, will be at 10.0.0.129 on the 10.0.0.x (/24) subnet and its gateway is 10.0.0.1. The iwconfig line tells it to register with the AP specified by the mac address that follows. It then configures the eth0 port for a static IP of 10.0.3.1/24. Save the changes and exit the editor (Shift ZZ in vi).
Now the IPs are specific, but the atheros radio isn't started yet (type ifconfig at the prompt to confirm). Some magic is needed to get it going. At least it seemed like magic to me. I'm sure there's a simpler, more elegant and more correct way to do this, but this is what worked for me. We need to create a new file /etc/rcS.d/S99local and place in it:
#!/bin/sh modprobe ath_pci ifup --force -v ath0
Then issue the command:
chmod 777 /etc/rcS.d/S99local
This file will be executed at the appropriate place in the startup sequence and will start the radio card.
April 6 update: Another configuration we've started using is a Soekris 4511 with an 802.11a and 802.11b card. This becomes a combination AP and relay radio in one box. If you're using the miniPCI card, you need to add the following commands to the S99local file:
modprobe hostap_pci ifup --force -v wlan0
Alternatively, if you use a Soekris 4521 and a PCMCIA 802.11b card as the 2nd card, then you can omit the modprobe hostap_pci line.
For our scenario we wanted to disable nocat. To do this, mount the CF read-write and edit /etc/inittab to comment out the last line where it is started. After editing it should read:
#NC:23:respawn:start-stop-daemon -S -c nocat --exec /usr/local/nocat/bin/gateway -- -F
We're not done yet, but this is a good point to restart and check your work so far. Type:
/usr/local/sbin/fastreboot
to save all the changes made so far to the compact flash and then reboot the Soekris. After logging in, the (trimmed) ifconfig command output will look something like this:
pebble:~# ifconfig
ath0 Link encap:Ethernet HWaddr 00:20:A6:47:86:7A
inet addr:10.0.0.129 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:633 errors:0 dropped:0 overruns:0 frame:0
TX packets:30 errors:7 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:199
RX bytes:46932 (45.8 KiB) TX bytes:2062 (2.0 KiB)
Interrupt:10 Memory:c4895000-c48a5000
eth0 Link encap:Ethernet HWaddr 00:00:24:C1:8C:34
inet addr:10.0.3.1 Bcast:10.0.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:120 (120.0 b) TX bytes:0 (0.0 b)
Interrupt:11 Base address:0x7000
and you should be able to ping the access point:
PING 10.0.0.128 (10.0.0.128): 56 data bytes 64 bytes from 10.0.0.128: icmp_seq=0 ttl=15 time=59.2 ms 64 bytes from 10.0.0.128: icmp_seq=1 ttl=15 time=1.7 ms --- 10.0.0.128 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 1.7/30.4/59.2 ms
You may see some console output as the atheros card adjusts its rate due to errors:
ath_rate_ctl: 36M -> 24M (0 ok, 2 err, 2 retr). You can avoid this link retraining by specifying a link speed in the /etc/network/interfaces file.
So far, so good. You should now be able to log in using an ssh client on your network. This will be faster than using console, but either works.
Now we can get the machine running correct as a gateway on eth0. Again mount the CF read/write with:
/usr/local/sbin/remountrw
Now add the DNS servers by editing /etc/resolv.conf and replacing the servers listed with your own, e.g.:
nameserver 10.0.0.1 nameserver 64.81.45.2
Now we configure the DNS cache / forwarder. Enter the following commands:
echo 10.0.3.1 >/ro/var/dnscache/env/IP touch /ro/var/dnscache/root/ip/10.0.3 ln -s /rw/var/dnscache/root/ip/10.0.3 /var/dnscache/root/ip/10.0.3 rm /ro/var/dnscache/root/ip/192.168.*
(Answer 'y' when prompted by rm.). These commands tell the DNS caching program, djbdns which interface to listen on (10.0.3.1) and to provide DNS service for the 10.0.3 subnet.
With the DNS servers configured, we can now setup the DHCP server to hand out DNS server addresses along with local IPs. Edit the file /etc/default/dhcp so it contains the single (non-commented) line:
INTERFACES="eth0"
which tells the DHCP server which interface to operate on. Next, edit the file /etc/dhcpd.conf so it has the ilnes:
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.3.0 netmask 255.255.255.0 {
range 10.0.3.10 10.0.3.99;
option routers 10.0.3.1;
option broadcast-address 10.0.3.255;
option domain-name-servers 10.0.3.1,10.0.0.1;
}
Here we've specified both 10.0.3.1 and the main DNS forwarder 10.0.0.1 both as possible DNS servers. Now save your changes and reboot again:
/usr/local/sbin/fastreboot
After the reboot is complete, you're ready to test your configuration.
Update: Mar 22 2004: It's handy to set the time after getting everything going. In our configuration where our gateway runs an ntp server, you can do this with
ntpdate -u 10.0.0.1 /sbin/hwclock --systohc
This makes the logs much easier to compare with other logs after updating.
Some quick notes now that we're using Metrix boxes for most of our a/b relay/AP installs (mostly for myself so I don't have to remember each time!). Note that Metrix has bind installed and not djbdns.
/etc/network/interfaces
/etc/default/dhcp to add the interfaces which will have a DHCP server running
/etc/dhcpd.conf so it serves appropriate addresses
/etc/bind/named.conf and uncomment the query-source line and add the forwarders. Also add the line "forward only", not to be confused with the perhaps pre-existing commented out line "forward-only".
Here's some pictures of the inside of the Proxim Harmony 802.11a AP with removable antennas:
Update (Dec 2004): The device can be reflashed with Linux, but its 'nontrivial'. Read the gory details. Also the telnet password is 'notbrando'. Not sure what extra facilities that provides.
This radio was recently available for $15 + shipping and tax (originally $600).
Its features, well documented in the manual include:
Getting inside was a little tricky. The screws are some special type with an outside pattern and inside hump that makes using a screwdriver, torx or hex key impossible. However by drilling out the center hump with a 5/64 bit, its possible to then use a 5/64 hex (allen) key to remove the screws. Failing that you can easily drill out the screw head - but then its hard to get the cover back on.
POE is supported, sort of. Its designed to be used with the Harmony Power System which supplies 24VDC with ethernet pins 4-5 DC+ and 7-8 DC-. Thus a regular 48V POE is likely to be problemmatic (though I don't pretend to understand the POE spec in any detail!). It definitely should be ok to use for short runs with a homebrew POE adapter like this one where we reuse the supplied PS which is marked 12VDC but measures 14V under load. Having the wiring already internal to the AP saves building the splitter part of a standard homebrew PoE injector.