BananaPro WiFi Access Point
The BananaPro has built-in WiFi which you can use as a WiFi Client or as a WiFi Access Point. Having spent a lot of time working with Raspberry Pi systems that operate as access points, I thought I would try to do the same with the BananaPro. I faced similar challenges with the compatibility between the wifi driver and the hostapd application when using the Bananian operating system as I had with the Raspberry Pi with the Raspbian O/S. The good news is that after a number of attempts, I was able to make the BananaPro work as an Access Point with repeatable success.
The information I was able to find on the Internet was always incomplete and left me with a system that would not run as expected. I tried a number of suggestions and got very close. Either the BananaPro would not load the hostapd module at boot time, or I could see the ESSID and not connect with the proper password. Then I remembered the guidance from Dave Conroy. He compiled hostapd from source, backed up the binary hostapd, and linked the new hostapd application to the /usr/sbin/ folder where the binary normally installs. That little linking trick saved my bacon from even more hours of tearing out my hair.
The following are the steps I took to create a working BananaPro Wireless Access Point with the built-in Wifi adapter and the hostapd module.
The Hardware
My B-Pro came with an external antenna, which you must use to have any chance of any WiFi client connecting. It is a very small and fragile connector. I purchased a BananaPro Kit from Eleduino that included a simple plastic case, and I had to enlarge the slot for the antenna to pass through so I could connect it without feeding the connector through the side panel of the case. I also used a 5v 2A power supply to ensure there is plenty of power available for all the goodies on this board.
Setting up the SD Card with the Bananian O/S
Start by downloading the latest version of Bananian (which was January 11, 2015). I selected an 8GB micro SD card, formatted it and used Win32DiskImager to write the Bananian distro to the card. Install the SD card in the BananaPro, connect a monitor and keyboard, and power it up.
At the prompt log in as “root” with the password “pi”. Next, run the bananian-config script and set up the unit to your liking – but be sure to set the hardware configuration to “BananaPro”. This activates the WiFi hardware. Reboot the BananaPro to activate the changes you just made.
After logging in again, I ran the bananian-update script to see if there were any updates to the distro – and at the time of this writing there were none.
Load the WiFi Driver
Run the following command to load the WiFi driver at boot time.
root@bananapi ~ # nano /etc/modules # add the wifi driver ap6210 op_mode=2
Compiling and Installing hostapd
Since this distro is highly minimized you can’t compile applications without first installing a LOT of modules. So the first step is to install the modules needed to compile hostapd. Install all of the development tools required to compile hostapd.
apt-get install git build-essential u-boot-tools uboot-mkimage libusb-1.0-0-dev libncurses5-dev gcc libc6-dev libssl-dev libnl-dev make hostapd
I rebooted after installing this many modules, just to be sure there we no issues with the installations, and that all the modules would function after a reboot (trust issues, yeah).
Take the following steps to download and compile the source for hostapd:
git clone git://w1.fi/srv/git/hostap.git cd hostap/hostapd cp defconfig .config make cp hostapd /usr/local/sbin cp hostapd_cli /usr/local/sbin cp /usr/sbin/hostapd /usr/sbin/hostapd.old rm /usr/sbin/hostapd ln -s /usr/local/sbin/hostapd /usr/sbin/hostapd
hostapd requires a configuration file that you must create. Edit the /etc/hostapd/hostapd.conf file and paste in these contents. Change the SSID and the wpa-passphrase values to what you prefer.
interface=wlan0 driver=nl80211 ssid=ap6210_ap_test channel=1 hw_mode=g macaddr_acl=0 auth_algs=3 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ctrl_interface=/var/run/hostapd beacon_int=100
For the hostapd module to use this configuration, edit the /etc/default/hostapd file and change the configuration of the DAEMON_CONF value to the following:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Lastly, you must edit your /etc/network/interfaces file to include these settings for your new WiFi interface. You can use a different network subnet if you wish.
allow-hotplug wlan0 iface wlan0 inet static address 192.168.10.1 netmask 255.255.255.0
Installing the DHCP Server
I used isc-dhcp-server in my build. Install the server as follows:
apt-get install isc-dhcp-server
When it installs, you will see the startup fail, and thats ok because we have a couple things to add before it will work. First, edit the /etc/default/isc-dhcp-server file to add the “wlan0” interface:
INTERFACES="wlan0"
Next, you need to add the subnet to the /etc/dhcp/dhcpd.conf so your WiFi clients will get an IP address.
shared-network banana { subnet 192.168.10.0 netmask 255.255.255.0 { option routers 192.168.10.1; option domain-name-servers 8.8.8.8, 8.8.4.4; range 192.168.10.50 192.168.10.99; } }
After rebooting you should have a working system that will broadcast a WiFi ESSID, and you should be able to connect a WiFi client and get an IP address.
Adding Internet Access
While your WiFi users can connect to your BananaPro, they can’t do much else except to run apps on the BananaPro. Assuming you have your eth0 port connected to a network that has internet access, you can give them access to the Internet. All it requires is enabling IPv4 forwarding to allow traffic to pass between the eth0 and wlan0 ports.
echo 1 > /proc/sys/net/ipv4/ip_forward
To make this permanent, edit the /etc/sysctl file and un-comment the line:
net.ipv4.ip_forward = 1
Next, set a NAT rule to translate the IP addresses of your WiFi users to the IP address of the eth0 ports IP address
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
This will let traffic pass through the BananaPro, but you should also set up some firewall rules. Here is the bare minimum you should use:
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
This should get your BananaPro up and running as a WiFi access point and Internet gateway. To make sure your BananaPro iptable rules survive a reboot, save iptables rules to a file and reload them at boot time:
iptables-save > /etc/iptables.up.rules
Place this command at the end of the /etc/network/interfaces file to reinstate your firewall rules after the interfaces are established.
pre-up iptables-restore < /etc/iptables.up.rules
Enjoy!