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=progressPak 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ů.