\chapter{Implementace modelové přístupové Wi-Fi sítě}

Sekce popisuje konfiguraci síťových zařízení a dalších softwarových komponent nutných pro fungování modelové implementace dle definovaných požadavků.
Zejména se zaměřuje na konfiguraci přístupových bodů (access pointů) sítě a konfiguraci centrální autentifikace a autorizace s~integrací do sítě eduroam. Popisuje také nastavení routerů, jedná se ale pouze o~základní konfiguraci pro fungování modelové implementace. V~reálné implementaci by konfigurace obsahovala daleko větším množstvím síťových rozhraní a komplexnější nastavení firewallu.

\section{Síťové prostředí}



\section{Výběr softwaru pro síťové prvky a mangement síťových prvků}

...

\section{Příprava zařízení}

Přístupový bod od výroby obsahuje proprietární operační systém výrobce zřízení. Tento operační systém je nutné nahradit vybraným operačním systémem OpenWrt. Náhrada probíhá přepsáním původního obsahu paměti zařízení systémem OpenWrt.

\subsubsection{Kompilace a sestavenení OpenWrt}

Vývojáři systému openwrt nabízejí dvě možností jak získat obraz systému, který se nahraje do paměti zařízení.
První možností je stáhnout již předkompilovaný a sestavený obraz systému openwrt pro dané zařízení. Tento předkompilovaný a sestavený systém obsahuje software pro provoz síťového zařízení v~režimu routeru/Wi-Fi routeru (obsahuje firewall a dhcp servery). Tato možnost je pro uživatele jednoduchou cestou jak získat openwrt pro své zařízení, neumožňuje však úpravy samotného systému a změny nastavení, které by se aplikovali před prvním spuštěním.

Jedním z~požadavků modelové implementace je centrální management síťových prvků. K~naplnění tohoto cíle je nutné mít nové zařízení po prvním zapnutí již integrované do existující sítě, tak aby bylo možné k~němu přistoupit a provést dodatečnou konfiguraci pomocí nástroje pro hromadnou správu zařízení.

Z~tohoto důvodu je vhodné zvolit druhou možnost jak získat systém OpenWrt a to zkompilovat a sestavit svůj vlastní obraz systému OpenWrt. Takto lze zakomponovat úpravy systému do obrazu systému a poté je nahrát do paměti zařízení i s~požadovanou inicializační konfigurací. Další výhodou je to, že můžeme systém OpenWrt sestavit bez zbytného softwaru pro účely přístupového bodu a ušetřit tím místo v~paměti zařízení.

Zkompilovat a sestavit vlastní obraz systému openwrt je možné na lokálním počítači po naklonování repozitáře OpenWrt nebo si lze nechat zkompilovat a sestavit obraz OpenWrt na serverech samotného projetku. Pro účely této práce využijeme možnosti sestavení systému na serverech OpenWrt. Tato možnost umožňuje provést potřebné úpravy před sestavením obrazu systému. Vyhneme se tak potřebě vytvoření prostředí pro křížovou\footnote{též cross kompilace - proces vytvoření spustitelného kódu pro jinou instrukční sadu procesoru než na jaké se kód kompiluje} kompilaci a sestavení obrazu OpenWrt na vlastním počítači.

Webová aplikace \url{https://firmware-selector.openwrt.org/} umožnuje získat již předkompilované obrazy systému OpenWrt i možnost vytvořit si obraz vlastní.
Obrazy systému OpenWrt jsou pro různé zařízení unikátní, protože různé zařízení využívají různé procesorové architektury, mají různé rozložení paměti a obsahují různé periferie pro které je nutné mít adekvátní ovladače. V~první části je nutné vybrat model zařízení pro který chceme získat obraz systému OpenWrt. Následně vybereme verzi systému OpenWrt, kterou chceme získat.

Aplikace standartně ve spodní části stránky nabízí ke stažení tři druhy předkompilovaných obrazů. První je samotné jádro operačního systému - kernel. Další možnosti jsou factory obraz a sysupgrade obraz. Oba obrazy obsahují stejný systém s~tím rozdílem, že factory obraz je doplněný o~hlavičky a scripty pro interakci s~továrním softwarem zařízení, tak aby tento obraz akceptovaly proprietární nástroje výrobce zařízení pro upgrade firmwaru (zapsání obrazu do paměti zařízení). Factory obraze je tedy úrčený pro prvnotní insalaci OpenWrt, sysupgrade obraz slouží k~aktualizaci systému z~již funkčního systému OpenWrt.\citep{OpenWrtDocFAQ}

Po rozkliknutí sekce \verb|Customize installed packages and/or first boot script| můžeme definovat jaké balíčky budou zakomponovány do vytvořeného obrazu systému a jaká se provede inicializační konfigurace. Tlačítkem \verb|Request build| zahájíme sestavení vlastního obrazu OpenWrt, který si následně stáhneme.

Ve vstupu \verb|Installed Packages| jsou předvyplněny softwarové balíčky pro konkrétní zařízení, se kterými se sestaví systém OpenWrt. V~tomto seznamu jsou zahrnuty i balíčky nepotřebné pro funkci zařízení v~režimu přístupového bodu. Systém sestavíme bez těchto balíčků.

Seznam balíků, které nejsou potřeba pro provoz zařízení v~režimu přístupového bodu:
\begin{itemize}
  \item \verb|dnsmasq| - DNS a DHCPv4 server,
  \item \verb|firewall4| - překladač uci pravidel firewallu na nftables pravidla,
  \item \verb|kmod-nft-offload| - kernel modul pro podporu harwarové akcelerace routování a NATu,
  \item \verb|luci| - webové rozhraní pro konfiguraci zařízení,
  \item \verb|nftables| - framework pro filtrování packetů a další práci se síťovým provozem,
  \item \verb|odhcpd-ipv6only| - démon pro správu IPv6 v~síti,
  \item \verb|ppp| - podpora Point-to-Point protokolu,
  \item \verb|ppp-mod-pppoe| - rozšíření o~podporu PPPoE funkcionality.  
\end{itemize}

Balíky lze odebrat připsáním názvů balíků s~prefixem \verb|-|. Tedy: \texttt{-dnsmasq -firewall4 -kmod-nft-offload -luci -nftables -odhcpd-ipv6only -ppp -ppp-mod-pppoe}

Do vstupu \verb|Script to run on first boot (uci-defaults)| zadáme ash unix shell script, který provede konfiguraci systému při prvním spuštění.

\lstinputlisting[caption={Script spouštěný při prvním bootu (uci-defaults.sh)}, language=bash,]{ucidefaults.sh}

Tento script odstraní výchozí nastavení systému OpenWrt. Ze souboru \verb|/etc/board.json| (popis výchozí konfigurace pro dané zařízení) zjistí původní WAN port zařízení a nad ním vytvoří nové síťové rozhraní s~vlan tagem \verb|99| pro příchozí i odchozí provoz. DHCP client na tomto novém rozhraní požádá o~přidělení IP adresy. Toto síťové rozhraní bude jediné síťové rozhraní kterému bude přidělena IP adresa. Bude sloužit pro management přístupového bodu.

Script detekuje, zda dané zařízení obsahuje switch a rozpozná jestli je spravován pomocí DSA nebo nástrojem \verb|swconfig|. DSA nebo-li Distributed Switch Architecture je subsystém Linuxového jádra pro unifikovanou správu specifických embedded switchů. Vytváří virtuální síťová rozhraní pro každý port switche, což umožňuje jejich správu standardními Linuxovými nástroji.\citep{LinuxDSA} U~DSA switche si s~nastavením VLAN tagování provozu poradí OpenWrt při vytváření síťového rozhraní pro management, zatímco switch spravovaný nástrojem \verb|swconfig| je nutné ještě nakonfigurovat tak, aby na původním WAN portu switche přijímal a odesílal rámce s VLAN tagem 99 a tyto rámce přeposílal z~portu a na port switche připojený na ethernetové rozhraní CPU přístupového bodu také s VLAN tagem 99.

Script dále provede změnu root hesla, které je definováno na začátku scriptu v~proměnné \verb|root_password| a bezpečnostní nastavení SSH démona s~přidáním SSH klíče z~proměnné \verb|ssh_key_rsa|. SSH démon není pro některé architektůry kompilován s~podporou novějších typů klíčů, proto doporučuji preferovat klíč typu RSA.

\subsubsection{Nahrání systému do paměti zařízení}

Proces nahrání obrazu systému OpenWrt je u různých výrobců zařízení různý. Na většinu zařízení lze nahrát factory obraz systému OpenWrt bez potíží pomocí nástroje pro upgrade firmwaru přes webové rozhraní továrního systému. Některé zařízení mohou vyžadovat složitější postup. Je doporučeno seznámit se s~posupem instalace OpenWrt v~dokumentaci k~danému zařízení na stránkách projektu OpenWrt.

Tímto jsme získali přístupový bod s~opensource systémem OpenWrt se síťovým přístupem připravený pro následnou konfiguraci dalšími nástroji.

\section{Nastavení management sítě a zřízení přístupu}

...

\section{Monitoring a centrální logování}

...