V posledních letech se roztrhl pytel s různými miniaturními jednodeskovými počítači v celé výkonové škále - od lowendového Arduina s 8b AVRky a 32b embedded ARMy až po nabušený Odroid. Za cenu kolem 1000 Kč vám nabídnou výkon běžného PC před cca 10 lety na malé destičce velikosti kreditní karty s příkonem pár wattů. Ty výkonnější jsou většinou osazeny aplikačními SoC procesory ARM Cortex-A7 / A9, dnes běžně s více jádry a 64b architekturou. Počet nových modelů a jejich výkon neustále roste, ceny naopak klesají. Zde bych upozornil, že cena není až tak důležitá, mnohem důležitější je podpora výrobce a mohutnost uživatelské komunity. Sebelepší HW je totiž na nic, když na něm sotva běží neodladěný FW/OS, výrobce to neřeší, nejsou k dispozici zdrojáky ani dokumentace a slabá komunita s tím nedokáže pohnout... Zde je stručný přehled základních parametrů nejrozšířenějších jednodeskových počítačů (průběžně aktualizuju):
model CPU cores GPU RAM/Flash LAN USB SATA video audio ref Raspberry Pi Pico RP2040, 133MHz 2 - 264kB/2MB - 1 OTG - - - 1, 2 Raspberry Pi Pico W RP2040, 133MHz 2 - 264kB/2MB WiFi 802.11n 1 OTG - - - 1, 2 Raspberry Pi Pico 2 RP2350, 150MHz 2 - 520kB/4MB - 1 OTG - TMDS encoder - 1 Raspberry Pi Zero BCM2835, 1GHz 1 VideoCore IV 512MB/µSD - 1 OTG - HDMI HDMI 1 Raspberry Pi A BCM2835, 700MHz 1 VideoCore IV 256MB/SD - 1 OTG - HDMI, CSI/DSI, analog HDMI, analog 1 Raspberry Pi A+ BCM2835, 700MHz 1 VideoCore IV 256/512MB/µSD - 1 OTG - HDMI, CSI/DSI, analog HDMI, analog 1 Raspberry Pi B BCM2835, 700MHz 1 VideoCore IV 256/512MB/SD 100Mbit 2 - HDMI, CSI/DSI, analog HDMI, analog 1 Raspberry Pi B+ BCM2835, 700MHz 1 VideoCore IV 512MB/µSD 100Mbit 4 - HDMI, CSI/DSI, analog HDMI, analog 1 Raspberry Pi 2 B BCM2836, 900MHz 4 VideoCore IV 1GB/µSD 100Mbit 4 - HDMI, CSI/DSI, analog HDMI, analog 1, 2 Raspberry Pi 3 BCM2837 64b, 1,2GHz 4 VideoCore IV 1GB/µSD 100Mbit + WiFi + BT 4.1 4 - HDMI, CSI/DSI, analog HDMI, analog 1, 2, 3 Raspberry Pi 3 B+ BCM2837B0 64b, 1,4GHz 4 VideoCore IV 1GB/µSD 1000Mbit + WiFi + BT 4.2 4 - HDMI, CSI/DSI, analog HDMI, analog 1 Raspberry Pi 4 B BCM2711B0 64b, 1,8GHz 4 VideoCore VI 1-8GB/µSD 1000Mbit + WiFi + BT 5.0 2x 3.0 + 2 - 2x µHDMI 2.0, DPI/CSI/DSI, analog HDMI, analog 1, 2 Raspberry Pi 5 BCM2712 64b, 2,4GHz 4 VideoCore VII 4-8GB/µSD 1000Mbit + WiFi + BT 5.0 2x 3.0 + 2 - 2x µHDMI 2.0, 2*MIPI/PCIe 2.0 x1 HDMI 1 Banana Pi M1 Allwinner A20, 1GHz 2 Mali-400MP2 1GB/SD 1000Mbit 2 + 1 OTG 1 HDMI, LVDS, CSI, analog HDMI, analog, onboard mic. 1 Banana Pi M1+ Allwinner A20, 1GHz 2 Mali-400MP2 1GB/µSD 1000Mbit + WiFi 2 + 1 OTG 1 HDMI, LVDS, CSI, analog HDMI, analog, onboard mic. 1 Banana Pi M2 Allwinner A31S, 1,2GHz 4 PowerVR SGX544MP2 1GB/µSD 1000Mbit + WiFi 4 - HDMI, LVDS, RGB, CSI HDMI, analog, onboard mic. 1 Banana Pi M2+ Allwinner H3, 1GHz 4 Mali-400MP2 1GB/µSD, 8GB eMMC 1000Mbit + WiFi + BT 4.0 2 + 1 OTG - HDMI, CSI HDMI 1 Banana Pi M3 Allwinner A83T, 1,8GHz 8 PowerVR SGX544MP1 2GB/µSD, 8GB eMMC 1000Mbit + WiFi + BT 4.0 2 + 1 OTG 1 HDMI, MIPI/DSI, CSI HDMI, analog, onboard mic. 1, 2, 3 Banana Pi M64 Allwinner A53 64b, 1,2GHz 4 Mali-400MP2 2GB/µSD, 8GB eMMC 1000Mbit + WiFi + BT 4.0 2 + 1 OTG - HDMI, MIPI/DSI, CSI HDMI, analog, onboard mic. 1 Orange Pi One Allwinner H3, 1,2GHz 4 Mali-400MP2 512MB/µSD 100Mbit 1 + 1 OTG - HDMI, CSI HDMI 1, 2 Orange Pi One Lite Allwinner H3, 1,2GHz 4 Mali-400MP2 512MB/µSD WiFi 2 + 1 OTG - HDMI, CSI HDMI, onboard mic. 1 Orange Pi+ Allwinner H3, 1,6GHz 4 Mali-400MP2 1GB/µSD 1000Mbit + WiFi 4 + 1 OTG 1 HDMI, CSI, analog HDMI, analog, onboard mic. 1, 2 Orange Pi PC Allwinner H3, 1,6GHz 4 Mali-400MP2 1GB/µSD 100Mbit 3 + 1 OTG - HDMI, CSI, analog HDMI, analog, onboard mic. 1 Orange Pi PC+ Allwinner H3, 1,3GHz 4 Mali-400MP2 1GB/µSD, 8GB eMMC 100Mbit + WiFi 3 + 1 OTG - HDMI, CSI, analog HDMI, analog, onboard mic. Orange Pi mini 2 Allwinner H3, 1,6GHz 4 Mali-400MP2 1GB/µSD 100Mbit 4 + 1 OTG - HDMI, CSI, analog HDMI, analog, onboard mic. 1 Orange Pi 2 Allwinner H3, 1,6GHz 4 Mali-400MP2 1GB/µSD 100Mbit + WiFi 4 + 1 OTG - HDMI, CSI, analog HDMI, analog, onboard mic. 1, 2 Orange Pi+ 2 Allwinner H3, 1,6GHz 4 Mali-400MP2 2GB/µSD, 16GB eMMC 1000Mbit + WiFi 4 + 1 OTG 1 HDMI, CSI, analog HDMI, analog, onboard mic. 1 Orange Pi PC 2 Allwinner H5 64b, 1,6GHz 4 Mali-450MP4 (4k) 1GB/µSD, 2MB SPI 1000Mbit 3 + 1 OTG - HDMI 1.4, CSI HDMI, analog, onboard mic. 1 Orange Pi Lite 2 Allwinner H6 64b, 1,8GHz 4 Mali T-722 (4k) 1GB/µSD WiFi + BT 4.1 1x 3.0 + 1 - HDMI 2.0a, CSI HDMI, onboard mic. 1 PINE A64 Allwinner A53 64b, 1,2GHz 4 Mali-400MP2 512MB/µSD 100Mbit 2 - HDMI, CSI, DSI HDMI, analog 1 PINE A64+ Allwinner A53 64b, 1,2GHz 4 Mali-400MP2 1GB/µSD 1000Mbit 2 - HDMI, CSI, DSI HDMI, analog 1 PINE H64 Allwinner H6 64b, 1,8GHz 4 Mali T-722 (4k) 1-4GB/µSD, eMMC5.0 1000Mbit, mini PCIe 1x 3.0 + 2 - HDMI 2.0a, analog HDMI, analog 1 ODROID-C0 Amlogic S805, 1,5GHz 4 Mali-450MP2 1GB/µSD, eMMC4.5 - 2 neos. - HDMI HDMI, I2S 1 ODROID-C1+ Amlogic S805, 1,5GHz 4 Mali-450MP2 1GB/µSD, eMMC4.5 1000Mbit 4 + 1 OTG - HDMI HDMI, I2S 1 ODROID-C2 Amlogic S905 64b, 2GHz 4 Mali-450MP3 2GB/µSD, eMMC5.0 1000Mbit 4 + 1 OTG - HDMI 2.0 HDMI 2.0, I2S 1 ODROID-XU4 Samsung Exynos5422, 2GHz 4+4 Mali-T628MP6 2GB/µSD, eMMC5.0 1000Mbit 2x 3.0 + 1 - HDMI 1.4a HDMI 1.4a, I2S 1, 2 CHIP Allwinner R8, 1GHz 1 Mali-400 512MB/4GB WiFi + BT 4.0 1 + 1 OTG - analog analog 1, 2, 3, 4 Omega2 MT7688K (MIPS), 580MHz 1 - 64MB/16MB WiFi 1 - - - 1, 2, 3 intel Edison Atom Z34XX x86, 500MHz 2 - 1GB/4GB eMMC WiFi + BT 4.0 1 + 1 OTG - - - 1, 2 intel Galileo Quark SoC X1000 x86, 400MHz 1 - 256MB/8MB, µSD 100Mbit 1 + 1 cli - ext. PCIe 2.0 - 1 86Duino Vortex86EX, 300MHz 1 - 128MB/8MB, µSD ext. 100Mbit 1 + 1 cli 1 ext. PCIe 1.0 ext. HD Audio 1, 2
25.10.2012 Různé vývojové destičky byly k dispozici i dříve, ale k masovému rozšíření došlo až po vydání prvního modelu Raspberry Pi 1 začátkem roku 2012. Vizí Raspberry Pi Foundation bylo vytvořit a dodávat malý, levný počítač pro výukové účely do škol. Eben Upton (jeden ze spoluzakladatelů) v té době pracoval ve společnosti Broadcom a podařilo se mu zajistit dodávku SoC BCM2835. Vývoj trval několik let a v době vydání už procesor nepatřil k nejvýkonnějším. Přesto však první několikatisícové série vyráběné v UK, prodávané za příznivých 25 $ (model A), resp. 35 $ (model B), zmizely z prodeje takřka okamžitě a do roku 2015 se jich prodalo už 5 miliónů kusů. Díky této rozšířenosti má Raspberry Pi silnou podporu OpenSource / OpenHW komunity (různé distribuce OS, knihovny a zveřejněné SW / HW projekty) a také řada výrobců začala nabízet pro Pi celou řadu produktů, od krabiček po různé periferie.
V práci používáme Raspberry Pi všude tam, kde je potřeba pro nějakou specifickou úlohu rychle nasadit komplexnější systém jak jednočipáky, ale klasické PC je pro to zbytečně velké, žravé a drahé. Např. pro různé HW testery do výroby nebo dataloggery s přenosem dat po síti. I já jsem si pořídil jednu malinu na hraní. Počkal jsem si na HW revizi 2.0 s 512 MB RAM (starší revize měly jen 256 MR RAM). Dále se nebudu moc ze široka rozepisovat, neboť by to bylo nošení dříví do lesa. Spíše si zde budu zapisovat osobní poznámky k instalaci a konfiguraci, abych je měl přehledně k dispozici. Když to pomůže i někomu dalšímu, tím lépe. S dotazy se lze obrátit na mezinárodní fórum nebo na české fórum.
Schéma zapojení a přehled parametrů:
SoC: Broadcom BCM2835 CPU jádro: ARM1176JZF-S, 1 jádro, 700 MHz GPU: VideoCore IV, 250 MHz, OpenGL ES 2.0, HW kodeky MPEG-2, VC-1 (s licencí),
H264/MPEG-4 AVC (1080p30)Paměť: 512 MB DDR3 SDRAM (sdílená s GPU) Samsung K4P4G324EB
slot na SD/MMC/SDIO kartuSíťovka: SMSC LAN9514-JZX 10/100 Mbit Ethernet na vnitřním USB portu, RJ-45 Audio: analogový stereo výstup na 3,5mm jack, digitální přes HDMI Porty: 2 x USB 2.0 (S7) + 1 x napájecí microUSB (S1)
1 x RJ45 pro LAN (P4)
1 x HDMI 1.3, max. 1920 x 1200 @60 Hz (S3)
1 x RCA kompozitní analogový video-výstup (S4)
1 x 15-pinový DSI digitální video-výstup (sériový, 2-lane) na LCD (S2)
1 x 15-pinový MIPI digitální vstup pro kameru (S5)
1 x 3,5mm analogový audio-výstup (S6)
2x13-pinový GPIO header s UART, I2C, SPI, I2S, 5 V, 3,3 V... (P1)
2x4-pinový neosazený GPIO header (P5)Příkon: 3,5 W (700 mA) Rozměry: 85,6 x 56,5 mm Hmotnost: 45 g Vydání: v roce 2012 Cena: 35 $
Operační systémy a instalace
Každá distribuce je zaměřená trochu na jiný účel a jinou skupinu uživatelů, takže podle toho se liší i její SW vybavení a paměťová náročnost. Kdyby někdo toužil po Windows, jsou nově k dispozici i Windows 10 IoT Core. Jelikož mám na PC nainstalovaný Debian Linux a mám s ním pár zkušeností, tak jsem si nainstaloval Raspbian (Debian-Jessie) lite. Pro zkopírování image na SD kartu lze použít např. WinHex nebo v Linuxu klasicky příkaz dd. Image SD karty je připravený pro jednu velikost SD karty, proto nezapomeň při úvodním nastavení expandovat souborový systém na plnou kapacitu konkrétně použité SD karty.
- Raspbian (Debian-Jessie) full - velikost image: ~4 GB, nutná min. 8GB SD karta
- Raspbian (Debian-Jessie) lite - velikost image: ~1,4 GB, nutná min. 2GB SD karta, neobsahuje X-server a GUI.
přidání X-serveru s Openbox: ~ 100 MB (apt-get install xinit xrdp openbox)
přidání X-serveru s LXDE: ~ 770 MB
- XBian (Debian-Jessie) - velikost image: ~950 MB, nutná min. 1GB SD karta
- DietPi - velikost image: ~600 MB, nutná min. 1GB SD karta
- Moebius 2.x - velikost image: ~120 MB, nutná min. 128MB SD karta
- OpenELEC 6.x - velikost image: ~580 MB, nutná min. 1GB SD karta
- OSMC - velikost image: ~270 MB, nutná min. 512MB SD karta
Základní nastavení
- výchozí přihlašovací údaje pro Raspbian: user = pi, password = raspberry (root nemá nastavené heslo)
- výchozí přihlašovací údaje pro DietPi: user = root, password = dietpi
- základní nastavení: příkaz raspi-config - změň heslo uživatele pi, povol přihlášení po SSH (standardně na portu 22), expanduj FS
- nastavení hesla pro uživatele root: příkaz sudo passwd root, dále předpokládám práci pod rootem, takže už bez sudo
- povolení přihlašování uživatele root přes SSH: v souboru /etc/ssh/sshd_config přepiš řádek:
PermitRootLogin without-password -> PermitRootLogin yesZapnutí DHCP
- v souboru /etc/network/interfaces přepiš řádek:
iface eth0 inet manual -> iface eth0 inet dhcp- zkontroluj přidělení IP adresy: příkaz ifconfig
Nastavení dynamické DNS služby
Pokud máte k dispozici veřejnou IP adresu, avšak nikoliv pevnou (např. u ISP UPC) a chcete se na malinu snadno připojovat zvenku, je dobré si zařídit takovouto službu, která bude na DNS serveru automaticky aktualizovat vaši IP adresu a vy se budete připojovat na vaši registrovanou doménu.
- vytvoř si účet na DNSdynamic a zaregistruj doménové jméno (na výběr je více top domén)
- nainstaluj klienta ddclient: apt-get install ddclient
- vytvoř konfigurační soubor /etc/ddclient.conf a uprav zvýrazněné údaje podle své registrace:
# Configuration file for ddclient: /etc/ddclient.conf daemon=600 # IP update check period [s] syslog=yes #mail=root #mail-failure=root pid=/var/run/ddclient.pid ssl=yes use=web, web=myip.dnsdynamic.org # get IP from server server=www.dnsdynamic.org login=username # username password='pwd' # password protocol=dyndns2 userdomain.dnsd.info # user domain- aby správně fungovalo načítání IP adresy při bootu, kdy startuje ddclient démon, je třeba v raspi-config zapnout volbu "Wait for Network at Boot" (bez připojení k síti pak čeká asi 20s) nebo přidat zpožděnou obnovu IP adresy jako úkol do cronu:
zadej příkaz crontab -e (ukládá se do souboru /var/spool/cron/crontabs) a přidej řádky:
# zpozdena aktualizace DDNS, kdyz uz je spravne nactena IP adresa @reboot sleep 30 ; /usr/sbin/ddclient -force # pro sichr jeste opakuj 1 denne @daily /usr/sbin/ddclient -force
Bez této úpravy jsem měl problém v tom, že po startu systému (démon ddclient zřejmě startuje dříve, než se stihne přiřadit IP adresa z DHCP) obsahoval soubor /var/cache/ddclient/ddclient.cache prázdnou položku ip=, která se už nikdy neaktualizovala. Pomohlo jedině smazání cache souboru nebo vynucené obnovení příkazem ddclient -force.- otestuj funkčnost příkazy ddclient -force nebo ddclient -query -verbose
- přihlaš se na DNSdynamic a zkontroluj svou IP adresu, jestli odpovídá dle ifconfig
Instalace a nastavení OpenVPN serveru
Už dříve jsem si říkal, že náhodné připojování přes různé pochybné Wi-Finy ve městě či v zahraničí a přihlašování se skrz ně na své účty není zrovna nejbezpečnější. Komunikaci si může odposlechnout kde kdo - majitel Wi-Fi hotspotu (nebo ten, kdo ho hacknul), jeho ISP, či nějaký čmuchal sedící poblíž. Někteří vtipálci se dokonce baví tím, že spustí na místě, kde se vyskytuje hodně lidí, vlastní free Wi-Fi hotspot právě za účelem sběru dat. Zajímavý je též popis, jak pomocí VPN zachytávat a dešifrovat HTTPS komunikaci. Napadlo mě tedy zkusit si rozběhnout vlastní VPNku a malina se k tomu se svou malou spotřebou docela hodí. Android standardně podporuje VPN protokoly PPTP (už není bezpečný) a L2TP. Já jsem zvolil OpenVPN, pro níž je třeba na Androidu nainstalovat klientskou aplikaci. Vycházel jsem z těchto tutoriálů: Building A Raspberry Pi VPN pt.1, 2 a Set up a Hardened OpenVPN Server on Debian 8 pt.1, 2 3 a aplikoval je na Raspbian-Jessie. Podobný postup by šel použít i na chytřejší routery s Linuxem.
- nainstaluj openvpn: apt-get install openvpn
- zkopíruj všechny soubory z /usr/share/easy-rsa do /etc/openvpn/easy-rsa
- v souboru /etc/openvpn/easy-rsa/vars nastav proměnné:
export EASY_RSA="/etc/openvpn/easy-rsa"
export KEY_SIZE=1024
- vygeneruj CA certifikát a Root CA certifikát:
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
a vyplň identifikační údaje do certifikátu (nepovinné)- vygeneruj serverový klíč:
./build-key-server servername
položka Common Name musí být shodná se jménem serveru servername
položka A challenge password musí být prázdná
na dotaz "Sign the certificate? [y/n]" odpověz "y"
na dotaz "1 out of 1 certificate requests certified, commit? [y/n]" odpověz "y"
- vygeneruj klientský klíč:
./build-key-pass clientname
na dotaz "Enter PEM pass phrase" zadej uživatelské heslo, kterým se budeš přihlašovat do VPN (zopakuj dvakrát po sobě)
položka A challenge password musí být prázdná
na dotaz "Sign the certificate? [y/n]" odpověz "y"
na dotaz "1 out of 1 certificate requests certified, commit? [y/n]" odpověz "y"
zopakuj příp. tento postup pro další klienty
- zašifruj klientský klíč algoritmem Triple DES:
cd cd /etc/openvpn/easy-rsa/keys
openssl rsa -in clientname.key -des3 -out clientname.3des.key
na dotaz "Enter pass phrase for clientname.key" zadej uživatelské heslo zadané v předchozím kroku
na dotaz "Enter PEM pass phrase" zadej uživatelské heslo zadané v předchozím kroku (zopakuj dvakrát po sobě)
zopakuj příp. tento postup pro další klienty
- vygeneruj Diffie-Hellman key exchange:
cd /etc/openvpn/easy-rsa
./build-dh
(na Raspberry Pi 1 to trvá asi minutu pro délku klíče 1024 bitů)
- vygeneruj statický HMAC pro obranu OpenVPN proti případným DoS útokům a skenování portů:
openvpn --genkey --secret keys/ta.key
(pokud klient nezahájí přihlašovací fázi správným klíčem, bude server veškeré neplatné pakety zahazovat)
- vytvoř konfigurační soubor /etc/openvpn/server.conf a uprav zvýrazněné údaje:
dev tun proto udp #Some people prefer to use tcp. Don't change it if you don't know. port 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/servername.crt # SWAP WITH YOUR CRT NAME key /etc/openvpn/easy-rsa/keys/servername.key # SWAP WITH YOUR KEY NAME dh /etc/openvpn/easy-rsa/keys/dh1024.pem # If you changed to 2048, change that here! server 10.8.0.0 255.255.255.0 # server and remote endpoints ifconfig 10.8.0.1 10.8.0.2 # Add route to Client routing table for the OpenVPN Server #push "route 10.8.0.1 255.255.255.255" # Add route to Client routing table for the OpenVPN Subnet #push "route 10.8.0.0 255.255.255.0" # your local subnet #push "route 89.212.77.131 255.255.255.0" # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS # Use Google DNS push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # Override the Client default gateway by using 0.0.0.0/1 and # 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of # overriding but not wiping out the original default gateway. push "redirect-gateway def1" client-to-client duplicate-cn # keepalive sends ping-like messages between server and client keepalive 10 120 # use tls-auth key : 0=server, 1=client tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher AES-128-CBC comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log 20 log /var/log/openvpn.log verb 1- zapni IP forwarding:
v souboru /etc/sysctl.conf najdi a odkomentuj tento řádek:
net.ipv4.ip+forward=1
aplikuj změnu příkazem sysctl -p- spusť OpenVPN server: service openvpn start
zkontroluj log soubor /var/log/openvpn.log
OpenVPN 2.3.4 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan 23 2016 library versions: OpenSSL 1.0.1t 3 May 2016, LZO 2.08 Control Channel Authentication: using '/etc/openvpn/easy-rsa/keys/ta.key' as a OpenVPN static key file TUN/TAP device tun0 opened do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 /sbin/ip link set dev tun0 up mtu 1500 /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 GID set to nogroup UID set to nobody UDPv4 link local (bound): [undef] UDPv4 link remote: [undef] Initialization Sequence Completed
zkontroluj výpis otevřených portů, jestli openvpn běží správně na UDP portu 1194 příkazem netstat -tulpna
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 449/sshd tcp6 0 0 :::22 :::* LISTEN 449/sshd udp 0 0 0.0.0.0:1194 0.0.0.0:* 408/openvpn udp 0 0 0.0.0.0:5353 0.0.0.0:* 371/avahi-daemon: r udp 0 0 0.0.0.0:68 0.0.0.0:* 377/dhcpcd udp 0 0 0.0.0.0:60275 0.0.0.0:* 371/avahi-daemon: r udp 0 0 89.187.24.113:123 0.0.0.0:* 486/ntpd udp 0 0 10.8.0.1:123 0.0.0.0:* 486/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 486/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 486/ntpd udp6 0 0 :::45256 :::* 371/avahi-daemon: r udp6 0 0 :::5353 :::* 371/avahi-daemon: r udp6 0 0 fe70::ca3:fab6:f014:123 :::* 486/ntpd udp6 0 0 ::1:123 :::* 486/ntpd udp6 0 0 :::123 :::* 486/ntpd
nebo příkazem lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME avahi-dae 371 avahi 12u IPv4 8309 0t0 UDP *:mdns avahi-dae 371 avahi 13u IPv6 8310 0t0 UDP *:mdns avahi-dae 371 avahi 14u IPv4 8311 0t0 UDP *:60275 avahi-dae 371 avahi 15u IPv6 8312 0t0 UDP *:45256 dhcpcd 377 root 8u IPv4 9072 0t0 UDP *:bootpc openvpn 408 nobody 4u IPv4 8233 0t0 UDP *:openvpn sshd 449 root 3u IPv4 8703 0t0 TCP *:ssh (LISTEN) sshd 449 root 4u IPv6 8713 0t0 TCP *:ssh (LISTEN) ntpd 486 ntp 16u IPv4 8749 0t0 UDP *:ntp ntpd 486 ntp 17u IPv6 8750 0t0 UDP *:ntp ntpd 486 ntp 18u IPv4 8847 0t0 UDP localhost:ntp ntpd 486 ntp 19u IPv4 8848 0t0 UDP 10.8.0.1:ntp ntpd 486 ntp 20u IPv6 8849 0t0 UDP localhost:ntp ntpd 486 ntp 22u IPv6 9093 0t0 UDP [fe80::ba3:fbe8:f121:97d3]:ntp ntpd 486 ntp 23u IPv4 9199 0t0 UDP ip-xxx.cz:ntp
- nastav automatické spuštění openvpn serveru při startu systému: update-rc.d openvpn defaults
- nainstaluj perzistentní iptables: apt-get install iptables-persistent
- přidej pravidlo pro NAT routování: iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
- ulož trvalé nastavení pravidel iptables: iptables-save >/etc/iptables/rules.v4
- restartuj systém, ve výpisech při startu by se měl objevit řádek: [OK] Started OpenVPN service.
- zkontroluj, jestli se načetla pravidla iptables: iptables-save
- zkontroluj, jestli se objevil nový virtuální síťový adaptér tun0 ve výpisu ifconfig
- užitečné příkazy pro ladění síťovin (předpokládá instalaci utilit tcpdump a netcat):
low-level dump UDP paketu: tcpdump -i eth0 -nvvv udp port 1194
odeslání UDP paketu: echo "Ahoj" | nc -u xx.xx.xx.xx 1194
příjem a výpis obsahu UDP paketu: nc -ulp 1194
Instalace a nastavení klienta OpenVPN Connect pro Android
Nejprve si vytvoříme OpenVPN profil v unifikovaném formátu - jediný, snadno přenositelný soubor, který obsahuje všechny potřebné certifikáty a klíče (soubory: ca.crt, clientname.crt, clientname.3des.key a ta.key, které jsme si vytvořili v postupu výše).
- zkopíruj si někam soubor /usr/share/doc/openvpn/examples/sample-config-files/client.conf, přejmenuj ho na client.ovpn a uprav zvýrazněné údaje. Zejména nezapomeň přidat řádek key-direction 1, který určuje směr TLS autentizace (v našem případě klient). V původním příkladu konfiguráku měla tento význam 1 za názvem souboru ta.key, ale tím, že jsem řádek zakomentoval, tak klient tuto důležitou informaci nedostal. Pak jsem dlouho nemohl přijít na to, proč mi od klienta na server přicházely 42B UDP pakety, ale server neodpovídal. Přitom server dělal to, co měl - pakety s neplatným HMAC zahazoval (při použití UDP protokolu, nelze takto nastavený VPN server odhalit skenováním portů).
############################################## # Sample client-side OpenVPN 2.0 config file # # for connecting to multi-client server. # # # # This configuration can be used by multiple # # clients, however each client should have # # its own cert and key files. # # # # On Windows, you might want to rename this # # file so it has a .ovpn extension # ############################################## # Specify that we are a client and that we # will be pulling certain config file directives # from the server. client # Use the same setting as you are using on # the server. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # Are we connecting to a TCP or # UDP server? Use the same setting as # on the server. ;proto tcp proto udp # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote userdomain.dnsd.info 1194 # Keep trying indefinitely to resolve the # host name of the OpenVPN server. Very useful # on machines which are not permanently connected # to the internet such as laptops. resolv-retry infinite # Most clients don't need to bind to # a specific local port number. nobind # Downgrade privileges after initialization (non-Windows only) user nobody group nobody # Try to preserve some state across restarts. persist-key persist-tun # If you are connecting through an # HTTP proxy to reach the actual OpenVPN # server, put the proxy server/IP and # port number here. See the man page # if your proxy server requires # authentication. ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ;ca ca.crt ;cert client.crt ;key client.key <ca> -----BEGIN CERTIFICATE----- zde vlož celý obsah souboru ca.crt -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- zde vlož obsah z konece souboru clientname.crt -----END CERTIFICATE----- </cert> <key> -----BEGIN RSA PRIVATE KEY----- zde vlož celý obsah souboru clientname.3des.key -----END RSA PRIVATE KEY----- </key> # Verify server certificate by checking that the # certicate has the correct key usage set. # This is an important precaution to protect against # a potential attack discussed here: # http://openvpn.net/howto.html#mitm # # To use this feature, you will need to generate # your server certificates with the keyUsage set to # digitalSignature, keyEncipherment # and the extendedKeyUsage to # serverAuth # EasyRSA can do this for you. # Options: server|client remote-cert-tls server # If a tls-auth key is used on the server # then every client must also have the key. # 0=server, 1=client ;tls-auth ta.key 1 key-direction 1 <tls-auth> -----BEGIN OpenVPN Static key V1----- zde vlož obsah souboru ta.key -----END OpenVPN Static key V1----- </tls-auth> # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. cipher AES-128-CBC # Enable compression on the VPN link. # Don't enable this unless it is also # enabled in the server config file. comp-lzo # Set log file verbosity. verb 3 # Silence repeating messages ;mute 20 # The keepalive directive causes ping-like # messages to be sent back and forth over # the link so that each side knows when # the other side has gone down. # Ping every 10 seconds, assume that remote # peer is down if no ping received during # a 120 second time period. keepalive 10 120
- na telefon nainstaluj androidí aplikaci OpenVPN Connect
- nahraj soubor client.ovpn do telefonu
- ve správci souborů najdi soubor client.ovpn, ťukni na něj a naimportuj ho do aplikace OpenVPN Connect
- zadej uživatelské heslo, zadané při generování klíče a ťukni na tlačítko "Connect".
Po chvilce připojování by se v okně "Connection stats" měly začít inkrementovat počítadla "Bytes in" a "Bytes out" a během další vteřinky by mělo dojít k navázání spojení. Ve stavové liště se objeví ikonka klíčku a od této chvíle by měly všechny androidí aplikace komunikovat skrze VPNku. To si lze ověřit i na straně serveru třeba pomocí tcpdump, kde by měl být poznat zvýšený traffic v okamžiku načtení nějaké webové stránky na telefonu.
Elektronický mikroskop s Raspberry Pi
3.1.2022 Zajímavou aplikací Raspberry Pi je také třeba poměrně levný elektronický mikroskop pro jemnou elektroniku či mechaniku s realtime výstupem na monitor přes HDMI. Stačí malinu doplnit o kvalitní modul 12MP kamery s C-mountem za 1499 Kč a mikroskopovým objektivem s 300x zvětšením za 1999 Kč. Pracovní vzdálenost objektivu nad pozorovaným předmětem je cca 10 - 15 cm a proti levným plastovým USB čumítkům má mnohem menší latence přenášeného obrazu. Takto s ním uživatel zxcygnus na OldCompu vyfotil čip staré EPROM Tesla 2716: downscale 1600 x 1199 a výřez 1:1. Za ty peníze bych řekl, že je to docela použitelný výsledek.