Contenuti

NetBSD on a ROCK64 Board

Info

Questo post è stato originariamente scritto in inglese e tradotto in italiano tramite AI. Se noti errori di traduzione o passaggi poco chiari, segnalamelo pure.

🇬🇧 Leggi il post originale in inglese

Questo è il seguito del post precedente FreeBSD su una scheda ROCK64. Per farla breve, ho avuto la possibilità di resuscitare 4 single-board computer che stavano raccogliendo polvere nel mio ufficio. Ho deciso di installare FreeBSD su uno di essi ed è stato un successo. Questa volta ti mostrerò come e perché ho installato NetBSD su una seconda scheda ROCK64.

Aggiungiamo la connettività alla scheda FreeBSD

Il processo che ho descritto nel post precedente è stato divertente e istruttivo. Tuttavia, ho usato un adattatore USB-seriale per collegarmi alla scheda e, anche se andava bene per completare l’installazione, volevo un modo più comodo per connettermi alla scheda.

Ti ho detto che ho un sacco di dispositivi che raccolgono polvere nel mio ufficio?

Mi sono ricordato di avere una chiavetta wifi USB che avevo comprato qualche anno fa. Questo adattatore si basa sul chipset Atheros AR9271, sapevo che era supportato da Linux all’epoca, ma non ero sicuro riguardo FreeBSD. Dopo una rapida ricerca, ho trovato la pagina wiki di FreeBSD dedicata al supporto dei driver wireless Atheros. E sai una cosa? Il chipset AR9271 non è ancora ben supportato insieme all’HAL USB correlato.

Mmm, ok, compriamo una chiavetta wifi USB economica che sia supportata da FreeBSD.

Questa è stata la mia prima idea, e ho iniziato a guardare la lista dei dispositivi e poi a cercare il supporto driver su FreeBSD. È stato in quel momento che mi è venuta in mente un’idea strana: se questo dispositivo non è supportato da FreeBSD, perché non provarlo con NetBSD?

/images/rock64-006.jpg

NetBSD in soccorso

Come avevo fatto con FreeBSD, sono andato alla pagina delle release software di Rock64 nella sezione NetBSD. È stato molto interessante scoprire che l’immagine NetBSD per la mia scheda era pronta per essere scaricata e usata. Pochi minuti dopo avevo l’immagine sul mio computer e ero pronto a scriverla sulla scheda SD.

1
$ sudo dd if=NetBSD-10-aarch64--rock64.img of=/dev/sda bs=1M status=progress

Ha funzionato alla perfezione, a differenza di FreeBSD, NetBSD supporta l’avvio da eMMC, quindi è stato tutto molto semplice. Ottimo, il passo successivo era collegare la chiavetta wifi e vedere se veniva riconosciuta dal sistema.

1
2
3
4
$ dmesg

[     2.755663] : Atheros AR9271
[     2.755663] athn0: rev 1 (1T1R), ROM rev 15, address 00:c0:ca:--:--:--

Il dispositivo è stato riconosciuto e il driver è stato caricato. Il comando ifconfig mostrava la nuova interfaccia athn0. Il piano era chiaro: dovevo configurare il sistema NetBSD come gateway e collegarlo alla scheda FreeBSD tramite cavo ethernet.

Configurare l’interfaccia wifi

NetBSD ha una pagina web dedicata che spiega come configurare l’interfaccia wifi, quindi ho seguito le istruzioni e configurato l’interfaccia athn0.

1
2
3
$ cat /etc/ifconfig.athn0

inet 192.168.1.2 netmask 255.255.255.0

NetBSD usa WPA supplicant per gestire la connessione wifi, quindi ho dovuto creare un file di configurazione per la rete wifi.

1
2
3
4
5
6
7
8
9
$ cat /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
update_config=1
network={
	ssid="my-wifi-ssid"
	psk=--------------------------------
}

Dopo aver configurato l’interfaccia wifi, ho dovuto modificare il file /etc/rc.conf per abilitare il servizio wpa_supplicant e impostare il defaultroute con l’indirizzo IP del gateway.

1
2
3
4
5
6
$ cat /etc/rc.conf

...
wpa_supplicant=YES
wpa_supplicant_flags="-B -D bsd -i athn0 -c /etc/wpa_supplicant.conf"
defaultroute="192.168.1.1"

Infine, ho dovuto impostare il nameserver nel file /etc/resolv.conf.

1
2
3
$ cat /etc/resolv.conf

nameserver 192.168.1.1

Il sistema era pronto a connettersi alla rete wifi ed era in grado di raggiungere Internet. Il passo successivo era configurare l’interfaccia ethernet per collegarsi alla scheda FreeBSD.

Configurare l’interfaccia ethernet

Seguendo gli stessi passaggi di prima, ho configurato l’interfaccia awge0 con l’indirizzo IP

1
2
3
$ cat /etc/ifconfig.awge0

inet 10.0.0.1 netmask 255.255.255.0

Dopo aver configurato l’interfaccia ethernet, ho dovuto istruire il sistema a inoltrare i pacchetti IP abilitando l’IP forwarding nel file /etc/sysctl.conf.

1
2
3
4
$ cat /etc/sysctl.conf

...
net.inet.ip.forwarding=1

L’ultimo passo era configurare il firewall npf per abilitare il NAT e inoltrare i pacchetti dall’interfaccia awge0 all’interfaccia athn0. Ho creato il file /etc/npf.conf con le seguenti regole.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ext_if = { inet4(athn0) }
$int_if = { inet4(awge0) }

$services_tcp = { 2222 }
$localnet = { 10.0.0.0/24 }

alg "icmp"

map $ext_if dynamic 10.0.0.0/24 -> ifaddrs($ext_if)
map $ext_if dynamic proto tcp 10.0.0.2 port 22 <- ifaddrs($ext_if) port 2222

procedure "log" {        
        log: npflog0
}

group "external" on $ext_if {
        pass stateful out final all
        pass stateful in final family inet4 proto tcp to $ext_if \
                port ssh apply "log"
        pass stateful in final proto tcp to $ext_if \
                port $services_tcp
}

group "internal" on $int_if {
        block in all
        pass in final from $localnet
        pass out final all
}

group default {
        pass final on lo0 all
        block all
}

Le regole del firewall permettono connessioni alla scheda FreeBSD via ssh sulla porta 2222. La pagina man npf.conf è stata molto utile per capire la sintassi e le regole, e contiene un buon esempio da cui partire. Dopo aver creato il file npf.conf, ho dovuto abilitare il servizio npf nel file /etc/rc.conf.

1
2
3
4
$ cat /etc/rc.conf

...
npf=YES

E questo era tutto, il sistema NetBSD era pronto ad agire come gateway e connettersi alla scheda FreeBSD.

Configurare la scheda FreeBSD

L’ultimo passo era configurare la scheda FreeBSD per connettersi al gateway NetBSD. Ho configurato l’interfaccia dwc0 con un indirizzo IP statico e impostato il defaultrouter con l’indirizzo IP del gateway NetBSD.

1
2
3
4
5
6

$ cat /etc/rc.conf

...
ifconfig_dwc0="inet 10.0.0.2 netmask 255.255.255.0"
defaultrouter="10.0.0.1"

/images/rock64-007.jpg

E… ha funzionato! Sono riuscito a connettermi alla scheda FreeBSD via ssh sulla porta 2222 utilizzando il gateway NetBSD!

Mi sono divertito molto a configurare il sistema NetBSD come gateway e a collegarlo alla scheda FreeBSD. Ho imparato molto su NetBSD e sono rimasto colpito dalla semplicità e chiarezza della documentazione. Userò sicuramente NetBSD in futuro per altri progetti!