Transformando sua Raspberry Pi, odroid, Banana pi, Orange Pi em um pequeno roteador wifi

Olá meus amigos, neste tutorial irei demonstrar o compartilhamento da internet usando uma raspberry pi.
Relaxa, este tutorial é para linux, engloba várias placas, incluindo as citadas no título.

Para prosseguir neste tutorial, vou assumir que sua interface wifi é “wlan0” e que você já possui driver instalado.
Instalando os pacotes necessários 
Hostapd é um servidor accesspoint com suporte a IEEE 802.11 e autenticação /WPA/WPA2/EAP.

Udhcpd é um servidor dhcp, leve e pequeno. Geralmente usado em sistemas embarcados. Para finalizar, vamos instalar também o zd1211, firmware usada pelo hostapd.

   # apt-get update
   # apt-get install hostapd udhcpd d1211-firmware 
Habilitando udhcpd para iniciar automaticamente 
   # sed -i 's/^(DHCPD_ENABLED=s*).*$/1"yes"/' /etc/default/udhcpd
   # update-rc.d udhcpd enable

Configurando udhcpd
Vamos editar o arquivo /etc/udhcpd.conf para configurar o servidor udhcpd. A configuração é simples, deixei um exemplo abaixo, personalize ao seu gosto.

# pico /etc/udhcpd.conf

# inicio do range de ip que sera utilizado pelo udhcpd.
start           192.168.6.40

# fim do range de ip que sera utilizado pelo udhcpd.
end             192.168.6.254

# interface que sera usada como ponto de acesso.
interface       wlan0

# remaining definido com “yes”, armazena o tempo restante para cada alocacao. Se estiver definido com “no”, armazena o tempo de expiracao  para cada alocacao.
remaining       yes

# escreve as informacoes do lease no arquivo definido.
lease_file      /var/lib/misc/udhcpd.leases

# guarda o pid do processo no arquivo definido.
pidfile         /var/run/udhcpd.pid

# Esta opção lista os servidores de nomes (DNS) a serem utilizados para resolução de nomes.
opt     dns     8.8.4.4 8.8.8.8

# Mascara de subrede que sera fornecida aos clientes.
option  subnet  255.255.255.0

# Ip da placa. Sera o gateway para os clientes.
opt     router  192.168.6.22

# Nome do dominio
option  domain  local

# tempo do lease em segundos.
option  lease   864000

Configurando wlan0 como ip estático

Edite o arquivo /etc/network/interfaces, insira as diretrizes abaixo:

   # pico /etc/network/interfaces
    auto lo
    iface lo inet loopback
    iface eth0 inet dhcp

    iface wlan0 inet static
        address 192.168.6.22
        netmask 255.255.255.0

Configurando o Hostapd
Vamos editar este arquivo /etc/hostapd/hostapd.conf, para maiores informações, clique aqui 

# Interface usada para o ponto de acesso
interface=wlan0

# firmware driver
driver=nl80211

# nome do ponto de acesso SSID
ssid=rpi2maker

# modo de operacao (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
hw_mode=g

# canal do ponto de acesso
channel=11

# Station MAC address -based authentication
# Please note that this kind of access control requires a driver that uses
# hostapd to take care of management frame processing and as such, this can be
# used with driver=hostap or driver=nl80211, but not with driver=atheros.
# 0 = accept unless in deny list
# 1 = deny unless in accept list
# 2 = use external RADIUS server (accept/deny lists are searched first)
macaddr_acl=0

# IEEE 802.11 specifies two authentication algorithms. hostapd can be
# configured to allow both of these or only one. Open system authentication
# should be used with IEEE 802.1X.
# Bit fields of allowed authentication algorithms:
# bit 0 = Open System Authentication
# bit 1 = Shared Key Authentication (requires WEP)
auth_algs=1

# Send empty SSID in beacons and ignore probe request frames that do not
# specify full SSID, i.e., require stations to know SSID.
# default: disabled (0)
# 1 = send empty (length=0) SSID in beacon and ignore probe request for
#     broadcast SSID
# 2 = clear SSID (ASCII 0), but keep the original length (this may be required
#     with some clients that do not support empty SSID) and ignore probe
#     requests for broadcast SSID
ignore_broadcast_ssid=0

# Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
# entries are separated with a space. WPA-PSK-SHA256 and WPA-EAP-SHA256 can be
# added to enable SHA256-based stronger algorithms.
wpa_key_mgmt=WPA-PSK

# password
wpa_passphrase=rpiwifirouter

# Enable WPA. Setting this variable configures the AP to require WPA (either
# WPA-PSK or WPA-RADIUS/EAP based on other configuration). For WPA-PSK, either
# wpa_psk or wpa_passphrase must be set and wpa_key_mgmt must include WPA-PSK.
# Instead of wpa_psk / wpa_passphrase, wpa_psk_radius might suffice.
# For WPA-RADIUS/EAP, ieee8021x must be set (but without dynamic WEP keys),
# RADIUS authentication server must be configured, and WPA-EAP must be included
# in wpa_key_mgmt.
# This field is a bit field that can be used to enable WPA (IEEE 802.11i/D3.0)
# and/or WPA2 (full IEEE 802.11i/RSN):
# bit0 = WPA
# bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled)
wpa=2

# set ciphers
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Habilitando o hostapd para inciar automaticamente

   # sed -i '/#DAEMON_CONF=/cDAEMON_CONF="/etc/hostapd/hostapd.conf"' /etc/default/hostapd
   # update-rc.d hostapd enable

Configurando redirecionamento NAT
Habilitando o redirecionamento ipv4 (permanentemente)

   # sed -i '/^#net.ipv4.ip_forward/s/^#//g' /etc/sysctl.conf

Criando as regras de redirecionamento

# iptables -F
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
# iptables-save > /etc/iptables.rules

Edite o arquivo /etc/network/interfaces, insira no bloco do “wlan0”:
up iptables-restore < /etc/iptables.rules

Ficando dessa forma:

   auto wlan0
   iface wlan0 inet static
    address 192.168.6.22
    netmask 255.255.255.0
    up iptables-restore > /etc/iptables.rules

Iniciando serviços

   # echo 1 > /proc/sys/net/ipv4/ip_forward
   # touch /var/lib/misc/udhcpd.leases
   # ifdown wlan0 && ifup wlan0
   # service udhcpd start
   # service hostapd start

Possiveis erros
Analise o /var/log/syslog, se pegar um erro como esse:
Fev 02 23:06:29 rpi2maker udhcpd[15815]: udhcpd (v1.20.2) started
Fev 02 23:06:29 rpi2maker udhcpd[15815]: can’t open ‘/var/lib/misc/udhcpd.leases’: No such file or directory

Solução:

   # touch /var/lib/misc/udhcpd.leases
   # service udhcpd restart

Hostapd não inicializa
Pode ser vários motivos, dentre elas a incompatibilidade do hostapd com alguns adaptadores wifi. No meu caso, tive problema com o rtl8192cu.
A Solução que encontrei foi compilar o binário do hostapd. Porém, encontrei um já compilado, segue o passo-a-passo abaixo:

Troque o driver no /etc/hostapd/hostapd.conf, para rtl871xdrv:

   # sed -i 's/^(driver=s*).*$/1rtl871xdrv/' /etc/hostapd/hostapd.conf

Faça o download do hostapd e instalação do hostapd

   $ wget http://adafruit-download.s3.amazonaws.com/adafruit_hostapd_14128.zip -O /tmp/hostapd.zip
   $ cd /tmp && unzip hostapd.zip
   # mv /usr/sbin/hostapd /usr/sbin/hostapd-orig
   # mv hostapd /usr/sbin
   # chmod +x /usr/sbin/hostapd
Que tal nos encontrar no SeuTubo para ver dicas, tutoriais e Reviews de placas? Canal Sistemas Embarcados
Que tal na página do Facebook?
Quem sabe Google Plus?
Que tal no Pinterest?
Ou talvez me encontrar no Twitter para receber as ultimas noticias quentinhas: @SEmbarcados
E não esqueça que também tem o email, sistemasembarcadosbr@gmail.com
Conheça também nossos grupos do Facebook:
Abraços e até a próxima.