Instalace distribuce Armbian na mikropočítač Espressobin – router

Autor: | 5. 6. 2021 | IT, Linux

Štítky: armbian | debian | espressobin | linux | wifi

Již nějakou dobu jsem měl zprovozněný router Espressobin s distribucí Armbian. Bohužel zhruba každý měsíc jsem měl přeputý filesystém do režimu readonly a vždycky bylo příčinou poškození filesytému. Tentokrát jsem měl poškození filesystému tak fatální, že jsem přestal routeru důvěřovat a rozhodl jsem se pro novou instalaci. Mé rozhodnutí podpořily ještě další důvod. Zjistil jsem, že připravený nový firmware datovaný k 4.1.2021. Doufám tedy, že nový firmware pomůže k lepší stabilitě – pro moji verzi Espressobinu se jedná o firmware: flash-image-ddr4-1g-1cs-1000_800.bin.

Na Armbianu jsem měl starší jádro, takže dalším vylepšením je  novější jádro. A jako poslední důvod, proč jsem do toho šel je výměna SD karty za SandDisk High Endurance, která by měla být odolnější proti neustálemu přepisování.

Flashování bootovacího firmware

Nejprve je třeba flashnout bootovací firmware. Postup i aktuální firmware je popsaný na stránkách Armbianu. Nejprve nahrát firmware na flash disk (formátovaný FAT32). Flash disk připojit do USB 3.0 portu Espressobinu. Mít vytaženou SD kartu, aby se systému nepodařilo nabootovat. Připojit napájení a připojit se přes terminál pomocí minicomu. Podrobnější popis, jak se připojit pomocí minicomu jsem psal už v tomto článku.

Pak stačí napsat:

bubt flash-image-ddr4-1g-1cs-1000_800.bin spi usb

Za pár vteřin dojde k aktualizaci firmware. Jen upozorňuji, že příkazový řádka nenapoví, jaké soubory jsou na USB disku. Musel jsem název napsat přesně a musí se shodovat s názvem firmware, který bude instalován.

Příprava SD karty

Stáhnul jsem ze stránek Armbianu aktuální image distribuce pro Espressobin založenou na jádře 5.10. Image jsem rozbalil a nahrál na SD kartu.
xz -d Armbian_21.05.1_Espressobin_buster_current_5.10.34.img.xz
dd if=Armbian_21.05.1_Espressobin_buster_current_5.10.34.img of=/dev/sda bs=1024k status=progress
Pak už jenom stačilo vložit SD kartu do Expressobin a nabootovat. Armbian jako první krok po nabootování zvětší filesystém na maximum konkrétní SD karty. Poté provede základním nastavením jako je heslo pro roota a vytvoření nového uživatele.

Drobná oprava message of the day

Po přihlášení do systému se zobrazí základní informace – MOTD – Message Of The Day.
 _____                                   _     _       
| ____|___ _ __  _ __ ___  ___ ___  ___ | |__ (_)_ __  
|  _| / __| '_ \| '__/ _ \/ __/ __|/ _ \| '_ \| | '_ \ 
| |___\__ \ |_) | | |  __/\__ \__ \ (_) | |_) | | | | |
|_____|___/ .__/|_|  \___||___/___/\___/|_.__/|_|_| |_|
          |_|                                          
Welcome to Armbian 21.05.2 Buster with Linux 5.10.34-mvebu64

No end-user support: community creations

System load:   8%               Up time:       4 min
Memory usage:  13% of 983M      IP:            10.112.234.1 84.42.251.238
CPU temp:      36°C             Usage of /:    8% of 29G    
RX today:      Error: Unable to read database "/var/lib/vnstat/br0": No such file or directory Merge "br0+eth0+lan0+lan1+wan+wlp1s0+w" failed. 

V posledním řádku je chyba. Funkčně to nemá na nic vliv. Nicméně jsme perfekcionista a hodně mě to dráždilo. Příčina problému byla v tom, že systém nemohl rozhodnout, která síťová karta bude primární. Když se podíváme na výpis vnstat, tak ukazuje kolik dat se přeneslo přes které zařízení.
root@espressobin# vnstat

                      rx      /      tx      /     total    /   estimated
 lan1:
       May '21        25 KiB  /       3 KiB  /      28 KiB
       Jun '21      2.67 GiB  /  137.06 MiB  /    2.81 GiB  /   17.86 GiB
     05/07/2021        25 KiB  /       3 KiB  /      28 KiB
         today      2.67 GiB  /  137.06 MiB  /    2.81 GiB  /    3.72 GiB

 lan0:
       May '21         0 KiB  /       4 KiB  /       4 KiB
       Jun '21      1.75 MiB  /    1.93 MiB  /    3.68 MiB  /   12.00 MiB
     05/07/2021         0 KiB  /       4 KiB  /       4 KiB
         today      1.75 MiB  /    1.93 MiB  /    3.68 MiB  /       2 MiB

 eth0:
       May '21        36 KiB  /      11 KiB  /      47 KiB
       Jun '21      2.80 GiB  /  142.85 MiB  /    2.94 GiB  /   18.70 GiB
     05/07/2021        36 KiB  /      11 KiB  /      47 KiB
         today      2.80 GiB  /  142.85 MiB  /    2.94 GiB  /    3.89 GiB

 wan: Not enough data available yet.
  Řešením byla oprava v souboru: /etc/default/armbian-motd.  Zakomentoval jsem původní řádek s PRIMARY_INTERFACE a změnil na zařízení, které chci vidět:
#PRIMARY_INTERFACE="$(ls -1 /sys/class/net/ | grep -v lo | sed -n -e 'H;${x;s/\n/+/g;s/^+//;p;}')"
PRIMARY_INTERFACE="eth0"

Nastavení sítě – inicializace síťových zařízení

Nejprve k síťovým zařízením. Espressobin využívám jako router. Internet mám připojený do zařízení lan1. V routeru mám připojenu mini PCI kartu Wifi 5 GHz a USB Wifi kartu 2,4 GHz.

Zbytek zařízení mám tedy v bridgi a pro přístup do internetu budou forwardovány na lan1. A s touto vidinou začnu nastavovat síťová zařízení. Prvním krokem je nastavit síťová zařízení v /etc/systemd/network:

root@espressobin:/etc# cd /etc/systemd/network/

root@espressobin:/etc/systemd/network# ls -l 
total 24 
-rw-r--r-- 1 root root 30 May  7 20:23 10-br0.netdev 
-rw-r--r-- 1 root root 72 Jun  5 12:16 10-br0.network 
-rw-r--r-- 1 root root 40 May  7 20:23 10-eth0.network 
-rw-r--r-- 1 root root 40 May  7 20:23 10-lan0.network 
-rw-r--r-- 1 root root 41 Jun  5 12:17 10-lan1.network 
-rw-r--r-- 1 root root 40 May  7 20:23 10-wan.network

root@espressobin:/etc/systemd/network# cat 10-br0.netdev 
[NetDev]
Name=br0
Kind=bridge

root@espressobin:/etc/systemd/network# cat 10-br0.network 
[Match]
Name=br0

[Network]
#DHCP=ipv4
DHCP=no
Address=192.168.1.1/24


root@espressobin:/etc/systemd/network# cat 10-eth0.network
[Match]
Name=eth0

[Network]
DHCP=ipv4

root@espressobin:/etc/systemd/network# cat 10-lan0.network  
[Match] 
Name=lan0 

[Network] 
Bridge=br0


root@espressobin:/etc/systemd/network# cat 10-lan1.network  
[Match] 
Name=lan1 

[Network] 
#Bridge=br0
#DHCP=ipv4 -> pokud bych dále nenastavoval statickou IP adresu, přidal bych tento řádek.

root@espressobin:/etc/systemd/network# cat 10-wan.network  
[Match] 
Name=wan  

[Network] 
Bridge=br0

Nastavení statické IP adresy

Protože mám statickou IP adresu, tak ji nastavím editací souboru /etc/network/interfaces:

auto lan1
iface lan1 inet static 
           address xx.xx.xx.xx 
           netmask 255.255.255.255 
           gateway xx.xx.xx.xx

 

Změna MAC adresy síťového zařízení

Pokud bych si nechat přidělovat IP adresu z DHCP, tak je vázána u mého poskytovatele na MAC adresu síťové karty.  Může se stát, že v čase budu něco konfigurovat a budu chtít využít dynamického přidělování, tak ať nejsem nemile překvapen, rovnou jsem změnil MAC adresu síťového zařízení lan1. Mac adresa se nastavuje v souboru /boot/armbianEnv.txt . Abych rozpoznal která karta je která, tak jsem si nejprve vypsal přehled síťových zařízení, která systém vidí. Následně porovnal se souborem /boot/armbianEnv.txt. V mém případě jsem potřeboval změnit MAC adresu zařízení eth3addr:

root@espressobin:# ip addr

root@espressobin:/boot# cat armbianEnv.txt   
verbosity=1 
emmc_fix=off 
spi_workaround=off 
eth1addr=0E:BA:9F:93:CB:03 
eth2addr=fa:ad:4e:84:25:2f 
eth3addr=D0:AF:CC:23:24:ED 
rootdev=UUID=4ab813fc-eda7-41af-a81e-1dca466c4454 
rootfstype=ext4 usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

Změna portu SSH

Jeden z kroků, který u serverů dělám je, že měním port, na kterém běží SSH démon.

root@espressobin:/etc/ssh# cat /etc/ssh/sshd_config |grep -i port 
Port 8888

root@espressobin:/etc/ssh# systemctl sshd restart

Instalace wifi karet

Pro kontrolu jsem si vypsal, zda jádro detekovalo obě Wifi zařízení.

root@espressobin:~# lspci  
00:00.0 PCI bridge: Marvell Technology Group Ltd. Device 0100 
01:00.0 Network controller: Qualcomm Atheros QCA986x/988x 802.11ac Wireless Network Adapter

root@espressobin:~# lsusb  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub 
Bus 002 Device 002: ID 0cf3:9271 Qualcomm Atheros Communications AR9271 802.11n 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

To vypadalo nadějně, ale když jsem dal vypsat konkrétní jména zařízení, tak nebyla nalezena žádná, která by příslušela Wifi kartě.

root@espressobin:~# iwconfig  
lo        no wireless extensions. 

eth0      no wireless extensions. 

wan       no wireless extensions. 

lan0      no wireless extensions. 

lan1      no wireless extensions. 

br0       no wireless extensions. 

 

První mě napadnulo, že nemám nainstalovaný firmware Wifi kartám. A můj odhad byl správný. K instalaci firmwaru lze využít utilitu přímo od armbianu. Jedná se o příkaz armbian-config.

root@espressobin:~# armbian-config

V zobrazeném menu je nutné se proklikat na Software (System and 3rd party software install) -> Mini (Install mini firmware package). Po instalaci firmware a restartování mikropočítače už byly Wifi karty funkční.

root@espressobin:~# iwconfig  
lo        no wireless extensions. 

eth0      no wireless extensions. 

wan       no wireless extensions. 

lan0      no wireless extensions. 

lan1      no wireless extensions. 

br0       no wireless extensions. 

wlx00117f1bf337  IEEE 802.11  ESSID:off/any   
         Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm    
         Retry short limit:7   RTS thr:off   Fragment thr:off 
         Encryption key:off 
         Power Management:off 
          
wlp1s0    IEEE 802.11  ESSID:off/any   
         Mode:Managed  Access Point: Not-Associated   Tx-Power=-2147483648 dBm    
         Retry short limit:7   RTS thr:off   Fragment thr:off 
         Encryption key:off 
         Power Management:on

Nastavení automatického přidělování IP adres – DHCP

Jednotlivá síťová zařízení jsou nakonfigurována, nyní je třeba nastavit automatické přidělování IP adres. Tento krok předchází konfigurace konkrétních wifi sítí. K tomu využívám nástroj dnsmasq.

root@espressobin:~# apt install dnsmasq

Ovšem po čerstvé instalaci se mi zobrazila chybová hláška a démon nešel spustit.

Jun  5 13:26:11 espressobin dnsmasq[1661]: dnsmasq: failed to create listening socket for port 53: Address already in use

Chvíli jsme se potrápil, proč čestvá instalace nefunguje. Pak jsem přišel, že je potřeba konfigurace a problém způsobuje chybějící parametr bind-interfaces v konfiguraci. Vytvořil jsem tedy soubor /etc/dnsmasq.d/settings.conf:

root@espressobin:/etc/dnsmasq.d# cat settings.conf  
interface=br0 
listen-address=192.168.1.1 
bind-interfaces 
server=8.8.8.8 
domain-needed 
bogus-priv 
dhcp-range=192.168.1.50,192.168.1.150,12h 


#přiřazení konkrétní IP adresy na základě MAC adresy 
dhcp-host=02:8d:04:23:9B:6A,192.168.1.45 

Network manager

Poslední krok je nastavení NetworkManagera aby pracoval s dnsmasq démonem a aby ignoroval wifi zařízení.

root@espressobin:/etc/NetworkManager# vim NetworkManager.conf

root@espressobin:/etc/NetworkManager# cat NetworkManager.conf  
[main] 
dns=dnsmasq 
rc-manager=file 
plugins=ifupdown,keyfile 

[ifupdown] 
managed=true


root@espressobin:/etc/NetworkManager/conf.d# cat 10-ignore-interfaces.conf  
[keyfile] 
unmanaged-devices=interface-name:eth*,interface-name:wan*,interface-name:lan*,interface-name:br*,interface-name:wlp1s0,interface-name:wlx00117f1bf337

Nastavení wifi AP – hostapd

Hostapd démon byl již na zařízení nainstalován. Stačilo do souboru /etc/hostapd.conf vložit konfigurace k síti. Tady jsem se zase chvíli potrápil, protože konfigurace nefungovala. Postupně jsem tedy odstraňoval řádky v konfiguračním souboru do chvíle, než jsem našel problém. Účelem článku není podrobně rozepsat konfiguraci Wifi, proto sem vložím svoji funkční konfiguraci.

ssid=ESSPRESSOBIN5
interface=wlp1s0
channel=40
bridge=br0
driver=nl80211

logger_syslog=0
logger_syslog_level=0
wmm_enabled=1
wpa=2
preamble=1

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

## IEEE 802.11n
ieee80211n=1
ht_capab=[HT40-][LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40
country_code=CZ
ieee80211d=1

## IEEE 802.11a
hw_mode=a

## IEEE 802.11ac
ieee80211ac=1
vht_capab=[MAX-MPDU-11454][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP3]
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42

# controlling enabled
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

Zde ještě konfigurace USB Wifi /etc/hostapd-usb.conf

ssid=ESSPRESSOBIN2
interface=wlx00117f1bf337
hw_mode=g
channel=9
bridge=br0
driver=nl80211

logger_syslog=0
logger_syslog_level=0
wmm_enabled=1
wpa=2
preamble=1

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

## IEEE 802.11n
ht_capab=[LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40][SMPS-STATIC]
country_code=CZ
ieee80211d=1

# controlling enabled
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

Nyní je potřeba nastavit spuštění hostapd po startu systému. Nejprve jsem v /etc/defaults/hostapd nastavil, kde má démon načítat hlavní konfigurační soubor a poté zapnul.

root@espressobin:~# cat /etc/default/hostapd  
# Defaults for hostapd initscript 
# 
# See /usr/share/doc/hostapd/README.Debian for information about alternative 
# methods of managing hostapd. 
# 
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration 
# file and hostapd will be started during system boot. An example configuration 
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz 
# 
DAEMON_CONF="/etc/hostapd.conf"

# Additional daemon options to be appended to hostapd command:- 
#       -d   show more debug messages (-dd for even more) 
#       -K   include key data in debug messages 
#       -t   include timestamps in some debug messages 
# 
# Note that -B (daemon mode) and -P (pidfile) options are automatically 
# configured by the init.d script and must not be added to DAEMON_OPTS. 
# 
#DAEMON_OPTS=""

root@espressobin:~# systemctl enable hostapd 
hostapd.service is not a native service, redirecting to systemd-sysv-install. 
Executing: /lib/systemd/systemd-sysv-install enable hostapd

Pro spuštění konfigurace USB Wifi 2,4 GHz je nutné spustit druhou instanci démona po spuštění. To jsem vyřešil tak, že do souboru /etc/rc.local jsem přidal řádek:

/usr/sbin/hostapd -B /etc/hostapd-usb.conf

Výsledkem je, že po restartu systému by se měla načíst všechna síťová zařízení a mělo by docházet k přidělování IP adres. Poslední, co je potřeba nastavit je firewall a routování, protože internet ještě fungovat nebude.

Routování a nastavení firewallu

Pro nastavení firewallu jsem zvolil utilitu UFW. Nastavoval jsem čistě pro ipv4. Po instalaci jsem nejprve zapnul forwardování ipv4 v /etc/sysctl.conf. Rovnou jsem nastavil v souboru další věci – jako je například snížené swapování a hlavně větší alokaci paměti. Změny se projeví až po restartu zařízení.

root@espressobin:# cat /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.swappiness=0 

vm.min_free_kbytes=65536 
vm.overcommit_memory = 1

Dále bylo nutné povolit forwardování ipv4 v souboru /etc/ufw/sysctl.conf:

net/ipv4/ip_forward=1

Dále forwardování v souboru /etc/default/ufw:

DEFAULT_FORWARD_POLICY="ACCEPT"

Routování v souboru /etc/ufw/before.rules – musí být hned na začátku souboru:

*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to match you out-interfac
-A POSTROUTING -s 192.168.1.0/24 -o lan1 -j MASQUERADE
COMMIT

Protože jsem měl už nachystaná uživatelská pravidla pro připojení SSH a další, tak jsem přepsal soubor /etc/ufw/user.rules souborem z předchozího systému, kde už mám veškerá nastavení nachystána.

root@espressobin:~# ufw enable
root@espressobin:~# ufw status

A teď už konečně začalo routování fungovat. Mohl jsem se připojit přes SSH a pustit se do nastavení dalších programů.

Další články