Construir um router com o Banana Pi R1 – Parte III

DSA, HostAPD, IPTables e encaminhamento IP

Esta é a terceira parte da série de artigos Construir um router com o Banana Pi. Para consultar a primeira parte, veja aqui e para a segunda parte, veja aqui.

Na terceira parte desta série de artigos, vou demonstrar como se instalam os três serviços básicos de qualquer router para casa: HostAPD, para aceitar ligações de clientes WiFi, DHCP, para atribuição de endereços IP, e encaminhamento IP, para, como o nome indica, encaminhar correctamente os pacotes IP de e para a Internet.

Mas, antes disso, vou dar conta de alterações que fiz ao sistema operativo e ao hardware, em relação ao que mencionei na segunda parte.

Alteração ao sistema operativo e hardware

Nos últimos dias andei a testar diferentes configurações de software e hardware por forma a instalar o Banana Pi R1 como router.

Deparei-me com vários problemas:

  • O sistema operativo não era muito actual. A versão do kernel do Linux era da série 3.4, que foi lançado em Maio de 2012;
  • O controlador WiFi do Banana Pi R1 não é muito estável. Este controlador é baseado no chip RealTek RTL8192CU, que, ainda por cima, está ligado ao Banana Pi R1 por USB (soldado na motherboard). Ainda não consegui determinar se o problema de estabilidade é causado pelo driver (do kernel 3.4) ou do próprio hardware.
  • Adquiri um adaptador WiFi TP-Link TP-WN722N (USB) para usar, mas não conseguia (por limitações do driver) alterar o “domínio regulatório” (mais sobre isto à frente) para Portugal, o que, na prática, nos impede de usar os canais WiFi 12 e 13 (frequências portadoras 2,467GHz e 2,472GHz) que normalmente são menos usados e, logo, melhores.

Versão do kernel

O kernel que tinha instalado era a versão 3.4.113. Apesar de esta ter sido lançada em Outubro de 2016, a série 3.4 já tem mais de 5 anos, pelo que decidi testar uma versão mais recente. Deste modo, mudei a imagem do sistema operativo para a imagem com o kernel 4.9.7 (link directo para download https://dl.armbian.com/lamobo-r1/archive/Armbian_5.25_Lamobo-r1_Debian_jessie_next_4.9.7.7z).

Esta versão obrigou a alterar a configuração do switch BCM53125, pois já não é possível usar o utilitário swconfig, que é usado para definir VLANs para os interfaces virtuais de rede (LAN e WAN). Ao invés, nesta versão, tem que se usar uma funcionalidade chamada DSA (Distributed Switch Architecture).

Visto isto, a configuração de VLANs fica assim:


ip link set eth0 down
ip addr flush eth0
ip link set eth0 up
ip link add link eth0 name eth0.101 type vlan id 101
ip link add link eth0 name eth0.102 type vlan id 102
ip link add name br0 type bridge
ip link add br1 type bridge
ip link set lan1 master br0
ip link set lan2 master br0
ip link set lan3 master br0
ip link set lan4 master br0
ip link set wan master br1
bridge vlan add vid 101 dev lan1 pvid untagged
bridge vlan add vid 101 dev lan2 pvid untagged
bridge vlan add vid 101 dev lan3 pvid untagged
bridge vlan add vid 101 dev lan4 pvid untagged
bridge vlan del dev lan1 vid 1 self
bridge vlan del dev lan2 vid 1 self
bridge vlan del dev lan3 vid 1 self
bridge vlan del dev lan4 vid 1 self
bridge vlan del dev lan1 vid 1 master
bridge vlan del dev lan2 vid 1 master
bridge vlan del dev lan3 vid 1 master
bridge vlan del dev lan4 vid 1 master
bridge vlan add vid 102 dev wan pvid untagged
bridge vlan del dev wan vid 1 seld
bridge vlan del dev wan vid 1 self
bridge vlan del dev wan vid 1 master
ip link set eth0.101 master br0
ip link set eth0.102 master br1
ip link set br0 up
ip link set lan1 up
ip link set lan2 up
ip link set lan3 up
ip link set lan4 up
ip link set wan up
ip link set br1 up

Por forma a integrar a inicialização dos interfaces com o systemd, é necessário comentar as linhas ip link set br0 up e ip link br1 up.

Com estas duas linhas comentadas, o ficheiro /etc/network/interfaces fica assim:

iface lo inet loopback

auto eth0.101
iface eth0.101 inet manual

auto eth0.102
iface eth0.102 inet manual

allow-hotplug wlan0
iface wlan0 inet manual

allow-hotplug wlan1
iface wlan1 inet manual

# WAN
auto br1
iface br1 inet dhcp

# LAN
auto br0
iface br0 inet static
 address 192.168.2.254
 netmask 255.255.255.0

HostAPD

O software que permite a ligação de clientes WiFi a um sistema Linux é, tradicionalmente, o HostAPD.

O HostAPD não vem pré-instalado no Armbian, mas a sua instalação é extremamente simples:

apt install hostapd

ou, no caso de se estar a usar o interface WiFi do Banana Pi ou um adaptador externo baseado em chipsets RealTek:

apt install hostapd-realtek

A configuração é muito simples. O ficheiro de configuração que estou a usar é:

ssid=ARMBIAN
interface=wlan1
hw_mode=g
channel=11
bridge=br0
driver=nl80211
wds_sta=1

logger_syslog=-1
logger_syslog_level=0

wmm_enabled=1
ieee80211n=1
wpa=2
preamble=1

wpa_passphrase=123456
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0

noscan=1

ht_capab=[HT40-][SHORT-GI-40][SHORT-GI-40][DSSS_CCK-40]
country_code=PT
ieee80211d=1

No caso de se estar a usar a versão HostAPD para chipsets Realtek, dever-se-á substituir a linha

driver=nl80211

por

driver=rtl871xdrv

IPTables

Antes de activar o encaminhamento IP no router, é necessário configurar o IPTables, que é a firewall presente no Linux.

Utilizei as seguintes regras:

iptables -F
iptables -t nat -F
iptables -A INPUT -i br0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i br0 -j ACCEPT
iptables -A FORWARD -d 192.168.2.0/24 -i br1 -j ACCEPT
iptables -t nat -A POSTROUTING -o br1 -j MASQUERADE
iptables -P INPUT DROP
iptables -P FORWARD DROP
exit 0

Estas regras activam NAT no interface br1, bem como autorizações básicas para entrada e saída de pacotes IP na chain FORWARD, que é a chain por onde passam os pacotes IP não destinados ao próprio router. As duas primeiras regras (linhas 3 e 4) autorizam também qualquer ligação TCP vinda da rede interna (interface br0).

Encaminhamento IP

Finalmente, activa-se o encaminhamento IP com o comando

echo 1 > /proc/sys/net/ipv4/ip_forward

ou

sysctl net.ipv4.ip_forward=1

Configurações permanentes

Como último passo, por forma a fazer com que estas configurações fiquem activas no arranque do sistema, deve-se gravar a configuração DSA no ficheiro /etc/network/if-pre-up.d/dsa, a configuração de IPTables no ficheiro /etc/network/if-pre-up.d/iptables, e editar o ficheiro /etc/sysctl.conf e procurar a linha com referência à variável net.ipv4.ip_forward e retirar o comentário:

net.ipv4.ip_forward=1

Não esquecer de fazer

chmod a+x /etc/network/if-pre-up.d/dsa
chmod a+x /etc/network/if-pre-up.d/iptables

E pronto, o nosso router está pronto a funcionar. Para testar a configuração pode-se tentar agora fazer reboot.

Na parte IV, falarei de alguns toques finais, como monitorização e re-encaminhamento de portas.

Esta entrada foi publicada em Administração, Configuração, Linux, Redes, Sistemas Operativos. ligação permanente.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *