Construir um router com o Banana Pi R1 – Parte III

DSA, HostAPD, IPTables e encaminhamento IP

Esta é a ter­ceira parte da série de arti­gos Con­stru­ir um router com o Banana Pi. Para con­sul­tar a primeira parte, veja aqui e para a segun­da parte, veja aqui.

Na ter­ceira parte des­ta série de arti­gos, vou demon­strar como se insta­lam os três serviços bási­cos de qual­quer router para casa: HostAPD, para aceitar lig­ações de clientes WiFi, DHCP, para atribuição de endereços IP, e encam­in­hamen­to IP, para, como o nome indi­ca, encam­in­har cor­rec­ta­mente os pacotes IP de e para a Inter­net.

Mas, antes dis­so, vou dar con­ta de alter­ações que fiz ao sis­tema oper­a­ti­vo e ao hard­ware, em relação ao que men­cionei na segun­da parte.

Alteração ao sistema operativo e hardware

Nos últi­mos dias andei a tes­tar difer­entes con­fig­u­rações de soft­ware e hard­ware por for­ma a insta­lar o Banana Pi R1 como router.

Deparei-me com vários prob­le­mas:

  • O sis­tema oper­a­ti­vo não era muito actu­al. A ver­são do ker­nel do Lin­ux era da série 3.4, que foi lança­do em Maio de 2012;
  • O con­tro­lador WiFi do Banana Pi R1 não é muito estáv­el. Este con­tro­lador é basea­do no chip Real­Tek RTL8192CU, que, ain­da por cima, está lig­a­do ao Banana Pi R1 por USB (sol­da­do na moth­er­board). Ain­da não con­segui deter­mi­nar se o prob­le­ma de esta­bil­i­dade é cau­sa­do pelo dri­ver (do ker­nel 3.4) ou do próprio hard­ware.
  • Adquiri um adap­ta­dor WiFi TP-Link TP-WN722N (USB) para usar, mas não con­seguia (por lim­i­tações do dri­ver) alter­ar o “domínio reg­u­latório” (mais sobre isto à frente) para Por­tu­gal, o que, na práti­ca, nos impede de usar os canais WiFi 12 e 13 (fre­quên­cias por­ta­do­ras 2,467GHz e 2,472GHz) que nor­mal­mente são menos usa­dos e, logo, mel­hores.

Versão do kernel

O ker­nel que tin­ha insta­l­a­do era a ver­são 3.4.113. Ape­sar de esta ter sido lança­da em Out­ubro de 2016, a série 3.4 já tem mais de 5 anos, pelo que deci­di tes­tar uma ver­são mais recente. Deste modo, mudei a imagem do sis­tema oper­a­ti­vo para a imagem com o ker­nel 4.9.7 (link direc­to para down­load https://dl.armbian.com/lamobo-r1/archive/Armbian_5.25_Lamobo-r1_Debian_jessie_next_4.9.7.7z).

Esta ver­são obrigou a alter­ar a con­fig­u­ração do switch BCM53125, pois já não é pos­sív­el usar o util­itário swcon­fig, que é usa­do para definir VLANs para os inter­faces vir­tu­ais de rede (LAN e WAN). Ao invés, nes­ta ver­são, tem que se usar uma fun­cional­i­dade chama­da DSA (Dis­trib­uted Switch Archi­tec­ture).

Vis­to isto, a con­fig­u­raçã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 for­ma a inte­grar a ini­cial­iza­ção dos inter­faces com o sys­temd, é necessário comen­tar as lin­has ip link set br0 up e ip link br1 up.

Com estas duas lin­has comen­tadas, 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 soft­ware que per­mite a lig­ação de clientes WiFi a um sis­tema Lin­ux é, tradi­cional­mente, o HostAPD.

O HostAPD não vem pré-insta­l­a­do no Arm­bian, mas a sua insta­lação é extrema­mente sim­ples:

apt install hostapd

ou, no caso de se estar a usar o inter­face WiFi do Banana Pi ou um adap­ta­dor exter­no basea­do em chipsets Real­Tek:

apt install hostapd-realtek

A con­fig­u­ração é muito sim­ples. O ficheiro de con­fig­u­raçã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 ver­são HostAPD para chipsets Real­tek, dev­er-se-á sub­sti­tuir a lin­ha

driver=nl80211

por

driver=rtl871xdrv

IPTables

Antes de acti­var o encam­in­hamen­to IP no router, é necessário con­fig­u­rar o IPT­a­bles, que é a fire­wall pre­sente no Lin­ux.

Uti­lizei 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 acti­vam NAT no inter­face br1, bem como autor­iza­ções bási­cas para entra­da e saí­da de pacotes IP na chain FORWARD, que é a chain por onde pas­sam os pacotes IP não des­ti­na­dos ao próprio router. As duas primeiras regras (lin­has 3 e 4) autor­izam tam­bém qual­quer lig­ação TCP vin­da da rede inter­na (inter­face br0).

Encaminhamento IP

Final­mente, acti­va-se o encam­in­hamen­to IP com o coman­do

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

ou

sysctl net.ipv4.ip_forward=1

Configurações permanentes

Como últi­mo pas­so, por for­ma a faz­er com que estas con­fig­u­rações fiquem acti­vas no arranque do sis­tema, deve-se gravar a con­fig­u­ração DSA no ficheiro /etc/network/if-pre-up.d/dsa, a con­fig­u­ração de IPT­a­bles no ficheiro /etc/network/if-pre-up.d/iptables, e edi­tar o ficheiro /etc/sysctl.conf e procu­rar a lin­ha com refer­ên­cia à var­iáv­el net.ipv4.ip_forward e reti­rar o comen­tário:

net.ipv4.ip_forward=1

Não esque­cer de faz­er

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

E pron­to, o nos­so router está pron­to a fun­cionar. Para tes­tar a con­fig­u­ração pode-se ten­tar ago­ra faz­er reboot.

Na parte IV, falarei de alguns toques finais, como mon­i­tor­iza­ção e re-encam­in­hamen­to de por­tas.

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 *