From: Ratten Date: Wed, 8 Mar 2023 11:41:47 +0000 (+0100) Subject: Anpassungen für CLT, ansible-files hinzugefügt X-Git-Url: http://git.tuxteam.de/gitweb/?a=commitdiff_plain;h=5a9ffeeb6560130c8bb431077004ae64062c13e2;p=susannes-git%2FIpv6-Vortrag.git Anpassungen für CLT, ansible-files hinzugefügt --- diff --git a/IPv6-Handout-CLT.pdf b/IPv6-Handout-CLT.pdf new file mode 100644 index 0000000..442c6cd Binary files /dev/null and b/IPv6-Handout-CLT.pdf differ diff --git "a/IPv6-Pr\303\244sentation-CLT.pdf" "b/IPv6-Pr\303\244sentation-CLT.pdf" new file mode 100644 index 0000000..49f1774 Binary files /dev/null and "b/IPv6-Pr\303\244sentation-CLT.pdf" differ diff --git a/IPv6-presi-Handout.pdf b/IPv6-presi-Handout.pdf deleted file mode 100644 index 05954eb..0000000 Binary files a/IPv6-presi-Handout.pdf and /dev/null differ diff --git a/IPv6-presi.pdf b/IPv6-presi.pdf deleted file mode 100644 index 48e2b22..0000000 Binary files a/IPv6-presi.pdf and /dev/null differ diff --git a/IPv6-presi.tex b/IPv6-presi.tex new file mode 100644 index 0000000..e183024 --- /dev/null +++ b/IPv6-presi.tex @@ -0,0 +1,1490 @@ +\documentclass[xcolor={dvipsnames,table},graphicx,parskip,handout]{beamer} + +\usepackage[ngerman]{babel} +\usepackage[utf8]{inputenc} +\usepackage{bytefield} + +\usepackage{textpos} +\usepackage{pgfpages} %für notizen in Slides +\usepackage{tcolorbox}%runde colorboxen \usepackage{textpos} +\usepackage{stmaryrd} % \shortrightarrow + +\usepackage{hyperref} +\usepackage{lineno} +\usepackage[newfloat]{minted} +\usemintedstyle{rrt} + +\usepackage{showkeys} + +\uselanguage{German} +\languagepath{German} + +\mode{% + \setbeameroption{show notes} + %\setbeamerfont{note page}{size=\large} + %\setbeameroption{show notes on second screen=bottom} + \setbeamertemplate{note page}{% + \vspace{1cm} + weitere Informationen:\\ + \vskip.25em + \nointerlineskip + {\Huge \insertframetitle} + \vskip.25em + {\Large\insertframesubtitle} + \vspace{1cm} + \insertnote} +} + +%\setbeamerfont{note page}{size=\large} +%\setbeameroption{show notes on second screen=bottom} + +\usemintedstyle{friendly} +\usemintedstyle[sourcelist,linux-config]{autumn} + +\usetheme[hideothersubsections,left]{Goettingen} + +\definecolor{blau}{RGB}{35, 100, 170} +\definecolor{hellblau}{RGB}{61, 165, 217} +\definecolor{gelb}{RGB}{254, 198, 1} +\definecolor{orange}{RGB}{234, 155, 23} +\definecolor{dunkelblau}{RGB}{11, 12, 93} +\definecolor{gruen}{RGB}{137, 252, 0} +\definecolor{gruendunkel}{RGB}{172, 210, 237} +\definecolor{titelblau}{RGB}{21, 59, 80} +\definecolor{blau}{rgb}{0.7, 0.99, 0.99} +\definecolor{coolblack}{rgb}{0.0, 0.18, 0.39} +\definecolor{DarkGreen}{rgb}{0.0, 0.6, 0.0} +\definecolor{ao}{rgb}{0.12, 0.3, 0.17} + +\graphicspath{{Bilder/}} + + +\setminted[bash]{ + breaklines=true, + tabsize=2, + linenos, + numbersep=2pt, + autogobble, + framesep=0pt +} + +\setminted[linux-config]{ + breaklines=true, + linenos, + numbersep=2pt, + autogobble, + framesep=0pt + } + +\setminted[powershell]{ + breaklines=true, + bgcolor=coolblack, + linenos, + numbersep=2pt, + autogobble, + framesep=0pt, + fontsize=\scriptsize, + } + +%PDF-Infos +\pdfinfo{ + /Title + /Creator + /Author +} + +\setbeamercovered{transparent} +\useoutertheme{sidebar} +\useinnertheme{rounded} + +%um descripten links auszurichten +\defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill} +\setbeamertemplate{description item}[align left] + +\begin{document} + +%Beispiel Farb Definition +\setbeamercolor{block title example}{use=example text,fg=example text.fg,bg=example text.fg!20!bg} +\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!50!bg} +%DefintionsBlock Farbspezification +\setbeamercolor{block title}{use=structure text,fg=blue,bg=example text.fg!20!bg} +\setbeamercolor{block body}{parent=normal text,use=block title example,bg=block title example.bg!50!bg} + + +\setbeamertemplate{frametitle}[default][center] + +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{page number in head/foot}[totalframenumber] + +% fußzeilen Definition +\setbeamertemplate{footline}{\vspace*{-20pt} \leavevmode% + \hbox{% + \hspace{2cm} \colorbox{white}{\color{black} + \insertdate \hspace{1.5cm} Susanne Schütze \hspace{4cm} \insertframenumber \quad von \inserttotalframenumber \hspace{1cm} }}} + +\setbeamertemplate{itemize items}[triangle] +\setbeamertemplate{page number in foot}[totalframenumber] + +% % sidebarsetting + +\setbeamertemplate{sidebar canvas left}[vertical shading][top=ao,middle=titelblau,bottom=DarkGreen] +\setbeamercolor{section in sidebar shaded}{fg=yellow} +\setbeamercolor{author in sidebar}{fg=ao} +\setbeamercolor{title in sidebar}{fg=white} + +% Sidebar Farben normal +\setbeamercolor{section in sidebar shaded}{fg=blau} +\setbeamercolor{subsection in sidebar shaded}{fg=Yellow} +\setbeamercolor{subsubsection in sidebar shaded}{fg=SpringGreen} + +%Sidebar Farben aktiviert +\setbeamercolor*{palette sidebar primary}{fg=YellowOrange} +\setbeamercolor*{palette sidebar secondary}{fg=YellowOrange} + +\setbeamercolor{titlelike}{fg=white, bg=titelblau} + +% %itemsetting +\setbeamercolor{item}{fg=blue}%color of bullet +\setbeamercolor{subitem}{fg=orange}%color of bullet + +%inhaltsverzeichniss + +\setbeamercolor{section in toc}{fg=blue}%, bg=black} +\setbeamercolor{subsection in toc}{fg=DarkGreen} +\setbeamercolor{subsubsection in toc}{fg=teal} +\setbeamertemplate{sections/subsections in toc}[triangle] + +%\setbeamertemplate{blocks}[rounded] +\setbeamertemplate{title page}[default][colsep=-4bp,rounded=true] + +%Background +\setbeamercolor{background canvas}{bg=white} +\setbeamertemplate{background}{% + \includegraphics[width=\paperwidth]{Taube01-Kabel-final01.jpg}} + +%Titel definition +\title[IPv6]{IPv6 unter Linux} +\subtitle{Eine kleine Einführung} +\author[Schütze]{\textbf{Bücherratten}} +\institute{\textbf{Chemnitzer Linux Tage 2023}} +\date{11.03.2023} + +%\titlegraphic{\includegraphics[scale=0.3]{Taube01-Kabel-final.jpg}} + +%sitebar leer setzten +\setbeamertemplate{sidebar left}{} + +%titlepage ohne sidebar +\makeatletter +\begin{frame}[plain] + \hspace*{-\beamer@sidebarwidth}% + \advance\textwidth by \beamer@sidebarwidth\relax + \beamer@sidebarwidth=\z@ + \begin{minipage}{\textwidth} + \maketitle + \end{minipage} + %\note{Begrüßen!} +\end{frame} +\makeatother + +\setbeamertemplate{background} + +\begin{frame} + \frametitle{Disclaimer} + \begin{itemize} + \item{Dieser Vortrag ist vegan:} + \begin{itemize} + \item{Verzicht auf Einsatz von Tieren und tierische Erzeugnisse} + \item{Tierwohl und die Rechte von Tauben und anderen Flugtieren bleiben gewahrt} + \end{itemize} + \item{unvollständiger Vortrag} + \item{RFCs} + \begin{itemize} + \item{an RFCs gehalten} + \item{Humorvolle RFCs werden durch \textcolor{RedViolet}{Violett} hervorgehoben} + \end{itemize} + \item{in Beispiel-Befehlen: $<$zuersetzen$>$ entsprechend ersetzen} + \end{itemize} +\end{frame} + +\begin{frame}[shrink] + \frametitle{Inhalt} + \textbf{\tableofcontents[hideothersubsections]} + \vspace{0.4cm} +\end{frame} + +%sidebar wiederherstellen +\setbeamertemplate{sidebar left}[sidebar theme] + +\subsection{whoami} +\begin{frame} + \frametitle{whoami} + \begin{itemize} + \item{Susanne Schütze} + \item{Bücherratten} + \item{38 Jahre} + \item{Pronomen: sie} + \item{Berufsbezeichnung: Fachinformatikerin für Systemintegration} + \item{Berufliches Themenfeld: Automatisierung mit Ansible} + \item{Linuxerin seit Kernel 2.6.24 (2009)} + \item{FreeSoftware Aktivistin} + \item{Zugehörigkeiten zu: Haecksen, LinuxWorks!, BeLUG, FSFE} + \item{LieblingsDistro: ArchLinux, Fedora} + \end{itemize} +\end{frame} + +\section{Einführung} +\subsection[Warum? Vorteile]{Warum IPv6? Die Vorteile} +\begin{frame}[shrink] + \frametitle{Warum IPv6?} + \framesubtitle{Vorteile} + \begin{itemize} + \item{endlich genug IP-Adressen auch für IoT (Internet of Toilets)\\} + \tiny{Wen das interessiert: \url{https://media.ccc.de/v/31c3_-_6370_-_en_-_saal_g_-_201412281900_-_internet_of_toilets_-_tbsprs}}\\ + \normalsize{ + \item{erlaubt reine End-to-End-Kommunikation} + \item{Globale Adressen sind global erreichbar} + \item{hierarchische Adressvergabe} + \item{erlauben geographischen Bezug} + \item{keine umständlichen Adressübersetzungen mehr} + \item{Qualitiy of Service, bessere Definition von Dringlichkeit über „Traffic Class“} + \item{einfache Autokonfiguration der IP-Adressen} + \item{besseres Routing durch Veränderungen im IP-Header} + \item{weniger Verschmutzung durch Verzicht auf Brieftauben und andere Flugtiere}} + \end{itemize} +\end{frame} + +\subsection{Die Spielwiese} +\begin{frame} + \frametitle{Die Spielwiese} + \framesubtitle{Vorstellung von Brieftaube} + \begin{itemize} + \item{Raspberry Pi Version 4} + \item{Wlan-Accesspoint} + \begin{itemize} + \item{ESSID: Brieftauben-Wlan} + \item{! Ohne Passwort!} + \end{itemize} + \item{ssh-Server} + \begin{itemize} + \item{User: dove} + \item{Passwort: IPoAC} + \end{itemize} + \item{git-Server} + \begin{itemize} + \item{\url{git@[fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc8]:/Vortraege-2023/IPv6}} + \end{itemize} + \item{Doku} + \begin{itemize} + \item{Tuxteam-Repo: \url{http://git.tuxteam.de/gitweb/?p=susannes-git/Ipv6-Vortrag.git;a=tree}} + \item{Bieftauben-Repo: \url{http://[fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc9]/Vortraege-2023/IPv6}} + \end{itemize} + \end{itemize} +\end{frame} + +\subsection{IPv6 aktivieren unter Linux} +\begin{frame}[fragile] + \frametitle[Aktivierung]{IPv6 aktivieren} + \framesubtitle{unter Linux} + \begin{itemize} + \item{Kernelparameter} + \begin{minted}{bash} + sysctl -w net.ipv6.conf.all.disable_ipv6=0 + sysctl -w net.ipv6.conf..disable_ipv6=0 + sysctl -w net.ipv6.conf.all.accept_ra=1 + \end{minted} + \item{systemd-networkd} + \begin{minted}{linux-config} + [Network] + LinkLocalAddressing=ipv6 + IPv6AcceptRA=yes + \end{minted} + \item{Network-Manager} + \begin{minted}{bash} + nmcli connection modify ipv6.method "auto" + nmcli connection up + \end{minted} + \item{...} + \end{itemize} +\end{frame} + +\section[Aussehen]{Aussehen von IPv6} + +\subsection[Aufbau]{IPv6-Adressaufbau} +\begin{frame} + \frametitle{IPv6-Adressaufbau} + \framesubtitle{Ein Rezept in Hexadezimal} + \begin{itemize} + \item{\textcolor{RedOrange}{128 Bit (Binär)}} + \item{Hexadezimal (0-9 und a-f) - (\textcolor{MidnightBlue}{RFC 5952}: alle Buchstaben kleinschreiben)} + \item{8 Blöcke mit je 4 Hexadezimal-Zahlen bilden} + \item{Blöcke durch : trennen} + \item{\textcolor{olive}{Präfix} und \textcolor{violet}{Interface Identifier} von jeweils 64 Bit bilden} + \item{Netzgröße als \textcolor{purple}{CIDR} anhängen} + \end{itemize} + \vspace{-0.3cm} + \begin{examples} + IPv6-Adresse:\\ + \textcolor{olive}{2001:0db8:0000:0000}:\textcolor{violet}{cd71:37fe:e1ab:1ad1}\textcolor{purple}{/64}\\ + \textcolor{olive}{Präfix}:\textcolor{violet}{Interface Identifier}/\textcolor{purple}{CIDR} + \end{examples} +\end{frame} + +\begin{frame} + \frametitle{IPv6 Adress-Aufbau} + \framesubtitle{Abkürzungen} + \textcolor{MidnightBlue}{RFC 5952} + \begin{itemize} + \item{Führende Nullen im Block weglassen} + \vspace{-0.3cm} + \begin{examples} + \textcolor{BlueViolet}{2001:}\textcolor{yellow}{0}\textcolor{BlueViolet}{db8:}\textcolor{yellow}{000}\textcolor{BlueViolet}{0:}\textcolor{yellow}{000}\textcolor{BlueViolet}{0:}\textcolor{yellow}{000}\textcolor{BlueViolet}{0:}\textcolor{yellow}{000}\textcolor{BlueViolet}{0:}\textcolor{yellow}{000}\textcolor{BlueViolet}{0:}\textcolor{yellow}{000}\textcolor{BlueViolet}{1}\\ + \textcolor{BlueViolet}{2001:db8:0:0:0:0:0:1} + \end{examples} + \vspace{-0.3cm} + \item{längste Blöcke von Nullen durch :: ersetzen} + \vspace{-0.3cm} + \begin{examples} + \textcolor{BlueViolet}{2001:db8:}\textcolor{yellow}{0:0:0:0:0}\textcolor{BlueViolet}{:1}\\ + \textcolor{BlueViolet}{2001:db8::1} + \end{examples} + \vspace{-0.3cm} + \item{mehrere Blöcke gleich lang, nur ersten von links mit :: ersetzen} + \vspace{-0.2cm} + \begin{examples} + \textcolor{BlueViolet}{2001:db8:}\textcolor{yellow}{0:0}:\textcolor{BlueViolet}{4ad:}\textcolor{yellow}{0:0}\textcolor{BlueViolet}{:1}\\ + \textcolor{BlueViolet}{2001:db8::4ad:}\textcolor{yellow}{0:0}\textcolor{BlueViolet}{:1} + \end{examples} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + Wie wird Interface Identifier gebildert? + \begin{description} + \item[A] nur nach EUI-64 Standard + \item[B] entweder EUI-64 oder Privacy Extension + \item[C] es gibt mehr als 4 Methoden + \item[D] es gibt genau 3 nicht näher definierte Methoden + \end{description} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + \begin{description} + \item[A] \textcolor{red}{nur nach EUI-64 Standard X} EUI-64 ist veraltet + \item[B] \textcolor{red}{entweder EUI-64 oder Privacy Extension X} Nicht mehr unter Linux + \item[C] \textcolor{green}{es gibt mehr als 4 Methoden \checkmark} + \item[D] \textcolor{red}{es gibt genau 3 nicht näher definierte Methoden X} siehe C + \end{description} +\end{frame} + +\section{Interface Identifier} +\subsection{EUI 64} + +\begin{frame}[fragile] + \frametitle{EUI 64} + \framesubtitle{ein Rezept} + \label{EUI} + \begin{columns}[T] + %\vspace{-1cm} + \begin{column}{0.5\textwidth} + \textcolor{MidnightBlue}{RFC 4291} - 2006 + \begin{itemize} + \item{MAC-Adresse} + \only<|beamer:0>{\hyperlink{MAC}{\beamergotobutton{MAC-Adressen}}} + \vspace{-0.2cm} + \begin{examples} + \textcolor{Maroon}{52:54:00} \textcolor{Emerald}{0f:71:c0} + \end{examples} + \vspace{-0.3cm} + \item{ff:fe mittig einfügen} + \end{itemize} + \begin{example} + IPv6-Adresse: \textcolor{olive}{fe80::}\textcolor{Maroon}{5\textcolor{red}{0}54:00}ff:fe\textcolor{Emerald}{0f:71c0} + \end{example} + \end{column} + \pause + \begin{column}{0.5\textwidth} + Vorteile der EUI-64-Adresse: + \begin{itemize} + \item{Spezifische Werbung je nach verwendeter Hardware} + \item{Tracking über unbegrenzten Zeitraum} + \item{jedes Gerät im Internet ist eindeutig identifizierbar} + \item{...} + \end{itemize} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}[fragile] + \frametitle{EUI 64} + \framesubtitle{Konfiguration unter Linux} + \begin{itemize} + \item{Kernel:} + \begin{minted}{bash} + sysctl -w net.ipv6.conf.all.use_tempaddr=0 + sysctl -w net.ipv6.conf.all.addr_gen_mode=0 + \end{minted} + \item{dhcpcd.conf:} + \begin{minted}{linux-config} + slaac hwaddr + \end{minted} + \item{Network-Manager:} + \begin{minted}{bash} + nmcli con modify ipv6.addr-gen-mode eui64 + \end{minted} + \item{systemd-networkd:} + \begin{minted}{linux-config} + [Network] + LinkLocalAddressing=ipv6 + IPv6LinkLocalAddressGenerationMode=eui64 + \end{minted} + \end{itemize} +\end{frame} + +\subsubsection{Privacy Extension} +\begin{frame}[fragile] + \frametitle{Privacy-Extension} + \framesubtitle{ein Bug/Feature Rezept} + \textcolor{MidnightBlue}{RFC 4941} - 2007 + \begin{itemize} + \item{NTP-(Network Time Protocol) Zeitstempel} + \item{MAC-Adresse} + \end{itemize} + daraus MD5-Hash mit 64Bit Länge + \pause + \begin{itemize} + \item{Die Features:} + \begin{itemize} + \item{sind temporär} + \item{bestehen solange sie genutzt werden} + \item{nur für globale Adressen} + \end{itemize} + \item{Anti-Features:} + \begin{itemize} + \item{System- und Netzwerkmanagement kann schwieriger sein} + \item{Dienste (zB Webseiten) nach außen anbieten} + \item{Ende-zu-Ende-Dienste (VoIP, SIP, Messanger) nutzen} + \item{\textcolor{red}{Sicherheit von MD5-Summen?}} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Privacy-Extension} + \framesubtitle{unter Liunx einstellen} + \begin{itemize} + \item{Kernel:} + \begin{minted}{bash} + sysctl -w net.ipv6.conf.all.addr_gen_mode=0 + sysctl -w net.ipv6.conf.eth0.use_tempaddr=2 + \end{minted} + \item{Network-Manager:} + \begin{minted}{bash} + nmcli con modify ipv6.ip6-privacy 2 + nmcli connection up + \end{minted} + \item{systemd-networkd:} + \begin{minted}{linux-config} + LinkLocalAddressing=ipv6 + IPv6PrivacyExtensions=true + \end{minted} + \end{itemize} +\end{frame} + +\subsection{Semantically Opaque Interface Identifiers} +\begin{frame}[fragile] + \frametitle{Sematisch undurchsichtige Interface Identifier} + \framesubtitle{Semantically Opaque Interface Identifiers} + \begin{definition} + \small{\textbf{Semantically Opaque Interface Identifiers} nach \textcolor{MidnightBlue}{RFC 7217} (2014) werden aus Präfix, Interface-Name, Netzwerk\_ID, Duplicate Address Detection Counter und einem geheimen Schlüssel gebildet.} + \end{definition} + \small{ + \begin{itemize} + \vspace{-0.3cm} + \item{Vorteil:} + \begin{itemize} + \item{stabiler Interface Identifier für jedes Subnetz} + \item{nicht vorhersagbar} + \item{nicht an die Hardware gebunden} + \item{für Serverdienste geeignet} + \end{itemize} + \item{Nachteil:} + \begin{itemize} + \item{Sicherstellung des einzigartigen Interface Identifier schwierig} + \item{wie der Secret-Key aussehen soll, ist nicht spezifiziert} + \item{evtl. Wartezeit bis zur Generierung} + \item{der statische Identifier macht Spoofing leichter} + \end{itemize} + \end{itemize}} +\end{frame} +\begin{frame}[fragile] + \frametitle{Sematisch undurchsichtige Interface Identifier} + \framesubtitle{Unter Linux einstellen:} + \footnotesize{ + Im Kernel implementiert seit 2015 + \begin{itemize} + \item{Kernel:} + \begin{minted}{bash} + sysctl -w net.ipv6.conf.all.addr_gen_mode=3 + sysctl -w net.ipv6.conf..stable_secret= #Secret festlegen + sysctl -w net.ipv6.conf..addr_gen_mode=2 #Secret benutzen + \end{minted} + \item{Network-Manager:} + \begin{minted}{bash} + nmcli con modify ipv6.ip6-privacy 0 + nmcli con modify ipv6.addr-gen-mode stable-privacy + nmcli connection up + \end{minted} + \item{systemd-networkd:} + \begin{minted}{linux-config} + [Network] + LinkLocalAddressing=ipv6 + IPv6LinkLocalAddressGenerationMode=stable-privacy + IPv6StableSecretAddress= + \end{minted} + \end{itemize}} +\end{frame} + +\subsection{Temporary Address Extensions} +\begin{frame} + \frametitle{Temporary Address Extensions} + \framesubtitle{Der neuste Interface Identifier} + \vspace{-0.2cm} + \footnotesize{ + \begin{definition} + \vspace{-0.1cm} + \textbf{Temporary Address Extensions for Stateless Address Auto\-configuration in IPv6} nach \textcolor{MidnightBlue}{RFC 8981} (2021)\\ + Temporäre Interface Identifiers werden nach dem gleichen Algorithmus, wie die se\-man\-tisch undurchsichtigen gebildet. Hier wird die Zeit als Epoch hinzugefügt. Die Adressen sollen nach einer bestimmten Zeit verfallen. + \end{definition}} + \vspace{-0.3cm} + \footnotesize{ + \begin{itemize} + \item{Vorteil} + \begin{itemize} + \item{für End-Anwender gedacht} + \item{nicht auf globale Adressen begrenzt} + \item{bevorzugte Adress-Lebenszeit: 1 Tag} + \item{maximaler Gültigkeitszeitraum: 2 Tage} + \item{erlaubte Versuche, gültige Adresse zu generieren: 3} + \end{itemize} + \item{Nachteil:} + \begin{itemize} + \item{mehr Schwierigkeiten ein Netzwerk zu administieren} + \item{DNS: sehr wichtig, um bestimmte Services zu erreichen} + \item{reverse-DNS Auflösungen werden erschwert} + \end{itemize} + \end{itemize} + Noch nicht vollständig implementiert. Ausser in OpenBSD (slaacd)} + \vspace{0.3cm} +\end{frame} + +\section[Adressen]{unterschiedliche IPv6-Adress-Bereiche} + +\subsection{Unicast} +\begin{frame} + \frametitle{Was ist Unicast?} + \begin{definition} + Der Kommunikationsfluss zwischen ganz genau 2 spezifischen Teilnehmern. + \end{definition} + \includegraphics[width=\textwidth]{Unicast.png} +\end{frame} + +\subsubsection{LinkLocalAdressen} +\begin{frame} + \frametitle{Die Link Lokal Unicast Adresse} + \framesubtitle{IPv6 LLAs oder LLU} + \textcolor{MidnightBlue}{RFC 4291} - 2006 + \begin{itemize} + \item{für in sich geschlossene lokale Netzwerke (zB: das LAN zu Hause)} + \item{wird immer erstellt, auch ohne Router} + \item{erkennbar am \textcolor{olive}{Präfix: fe80::/10}} + \item{eindeutige Interface Adressen} + \item{Gültigkeit auf Netzsegment beschränkt} + \item{für automatische Adresskonfiguration} + \item{wird nicht in andere Netze geroutet} + \end{itemize} + \begin{tabular}{c|c|c} + 10 Bits & 54 Bits & 64 Bits \\\hline + Präfix & 0 & Interface Indentifier\\\hline + \textcolor{olive}{fe80} & 0 &\textcolor{violet}{fcc1:87ff:fe6a:ead6}\\ + \end{tabular}\\ + \end{frame} + +\subsubsection{Zonen bei LinkLocalAdress} +\begin{frame}[fragile] + \frametitle{Die Zone} + \framesubtitle{LinkLocalAdress?? In welcher Zone?} + \textcolor{MidnightBlue}{RFC 4007} - 2005 + \includegraphics[width=\textwidth]{Zone.png} + \vspace{-0.5cm} + \begin{itemize} + \item{Jede Netzwerkschnittstelle ist eine Zone} + \item{\% an die LinkLocalAddress anhängen} + \item{unter Linux ist die Zone der Interface Name} + \end{itemize} + \begin{minted}{bash} + ip link + \end{minted} +\end{frame} + +\subsubsection{Unique Local Unicast Adresses} + +\begin{frame} + \frametitle{Was ist Unique Local?} + \textcolor{MidnightBlue}{RFC 4193} - 2005\\ + Struktur der Unique Local Address (ULA): + \begin{tabular}{c|c|c|c} + 8 Bits & 40 Bits & 16 Bits & 64 Bits \\\hline + Präfix & Globale ID &Subnet ID & Interface Indentifier\\\hline + \textcolor{olive}{fd0} & 0 & 0 & \textcolor{violet}{fcc1:87ff:fd80:ead6}\\ + \end{tabular} + \begin{itemize} + \item{für lokale private Netze} + \item{halbwegs global eindeutig} + \item{kann in ein anderes Netz geroutet werden} + \item{müssen nicht registriert werden} + \item{\textcolor{olive}{Präfix fc00::/7} (global) oder \textcolor{olive}{fd00::/8} (local)} + \item{aktuell nur \textcolor{olive}{Präfix fd00::/8} vergeben} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Was ist Unique Lokal?} + \framesubtitle{Globale ID} + \begin{itemize} + \item{zufällig generiert} + \begin{itemize} + \item{Tageszeit} + \item{dem EUI-64 Identifier des Systems oder der MAC-Adresse} + \item{Tageszeit und Identifier vermischen, um daraus einen Key zu erstellen} + \item{SHA-1 Wert von 160bit länge aus dem Key errechnen} + \item{die letzten signifikanten 40 Bits als Global ID verwenden} + \end{itemize} + \item{es gab mehrere Versuche, ULAs zu registrieren (\url{https://ungleich.ch/u/projects/ipv6ula/})} + \item{Wird in Dual-Stack nicht bevorzugt benutzt(\textcolor{MidnightBlue}{RFC 6724)}} + \item{Nat66 sehr kompliziert...} + \item{Diskussion: ob ULAs überhaupt gebraucht werden} + \item{Site-local-Address sind bereits abgeschafft (\textcolor{MidnightBlue}{RFC 3879} 2004)} + \end{itemize} +\end{frame} + +\subsubsection{Global Unicast Adresse} + +\begin{frame} + \frametitle{Was sind Globale Unicast Adressen?} + \textcolor{MidnightBlue}{RFC 3587} - 2003 Adressformat\\ + \textcolor{MidnightBlue}{RFC 4291} - 2006\\ + \begin{tabular}{c|c|c} + n Bits & m Bits & 64 Bits \\\hline + Präfix & Subnet ID & Interface Indentifier\\\hline + \textcolor{olive}{2001} & 1 &\textcolor{violet}{fcc1:87ff:fd80:ead6}\\ + \end{tabular}\\ + \begin{itemize} + \item{Der Präfix ist nicht genau spezifiziert} + \item{wenn die ersten 3 Bits des Präfix 0 sind ist kein Interface Identifier erforderlich} + \item{Momentan werden 2000::/3 verteilt:} + \item{Adressen werden im Internet geroutet} + \item{sind weltweit erreichbar} + \end{itemize} +\end{frame} +\begin{frame} + \frametitle{Was sind Globale Unicast Adressen?} + \framesubtitle{Hierarchische Struktur} + \center{\includegraphics[width=\textwidth]{Hierachie.png}} +\end{frame} + +\begin{frame} + \frametitle{IPv6 - Unicast-Bereiche} + \framesubtitle{Struktur} + \begin{columns}[T] + %\vspace{-1cm} + \begin{column}{0.4\textwidth} + \begin{itemize} + \item{Zone \%} + \item{Host ::1/128} + \item{Link-Local fe80::/10} + \item{Unique Local fc00::/7} + \item{Site-Local veraltet} + \item{Global 2000::/3} + \end{itemize} + \end{column} + \begin{column}{0.6\textwidth} + \includegraphics[scale=0.15]{strukt.png} + \end{column} + \end{columns} +\end{frame} + +\subsection{Multicast Adressen} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + Was ist richtig? + \begin{description} + \item[A] Broadcast ist auch in IPv6 vorhanden + \item[B] In IPv6 gibt es nur Unicast, Multicast und Anycast + \item[C] Anycast ist genau das gleiche, wie Broadcast + \item[D] Broadcast wird in IPv6 nicht verwendet + \end{description} + Hinweis: Broadcast spricht alle Adressen in einem Netz an. +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + \begin{description} + \item[A] \textcolor{red}{Broadcast ist auch in IPv6 vorhanden X} Broadcast ist NICHT in IPv6 integriert + \item[B] \textcolor{green}{In IPv6 gibt es nur Unicast, Multicast und Anycast \checkmark} + \item[C] \textcolor{red}{Anycast ist genau das gleiche, wie Broadcast X} Anycast ist was anderes als Broadcast + \item[D] \textcolor{green}{Broadcast wird in IPv6 nicht verwendet \checkmark} eine ähnliche Funktionalität übernimmt Multicast + \end{description} +\end{frame} + +\begin{frame} + \frametitle{Was sind Multicast Adressen?} + \framesubtitle{Aufbau} + \label{Multicast} + \textcolor{MidnightBlue}{RFC 4291} - 2006\\ + \textcolor{MidnightBlue}{RFC 7346} - 2014\\ + \textcolor{MidnightBlue}{RFC 3306} - 2002\\ + \textcolor{MidnightBlue}{RFC 3307} - 2002 + \begin{tabular}{c|c|c|c|c|p{1.1cm}|c} + 8 Bit&4 Bit&4 Bit&8 Bit&8 Bit&64 Bit&32 Bits \\\hline + \textcolor{olive}{Präfix} & \textcolor{Goldenrod}{Flags} & \textcolor{orange}{Scope}& reserved & plen & Network prefix & Group ID\\\hline + \textcolor{olive}{ff} & \textcolor{Goldenrod}{0} & \textcolor{orange}{0} & 0 & plen & 0 & GroupID \\\hline + \end{tabular} + plen=anzahl der Bits im Netzwerk Prefix Feld\\ + network prefix = Prefix des Subnetzes zu dem die Multicast Adresse gehört\\ + Group ID = entweder Zufallszahl bei dynamischen Adressen oder fest von der IANA für bestimmte Services vergeben + \only<|beamer:0>{\hyperlink{Multicast Scope}{\beamergotobutton{Multicast Group ID}}} + \end{frame} +\begin{frame} + \frametitle{Was sind Multicast Adressen?} + \framesubtitle{good to know} + \includegraphics[width=\textwidth]{Multicast.png} + \vspace{-0.5cm} + \begin{itemize} + \item{sprechen Gruppen von Adressen an} + \item{es wird zwischen dauerhaften und dynamischen Adressen unterschieden} + \item{ein Gerät kann zu vielen Multicast Gruppen gehören} + \item{IANA betreibt Multicast Address Space Registry \tiny{(\url{https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml}})} + \end{itemize} +\end{frame} + +\begin{frame}[shrink] + \frametitle{Multicast Adressen} + \framesubtitle{Beispiele bekannter Multicast Adressen} + \begin{itemize} + \item{ff01::1 - All Nodes Interface lokal (loopback)} + \item{ff01::2 - All Routers Interface lokal (loopback)} + \item{ff02::1 - All Nodes Link lokal (Bsp. Broadcast)} + \item{ff02::2 - All Routers Link lokal, adressiert alle Router} + \item{ff02::5-6 - All OSPF Routers Link lokal, adressiert alle OSPF Router} + \item{ff02::7-8 - All IS-IS Routers Link lokal, adressiert alle IS-IS Router} + \item{ff02::9 - All RIP Routers Link lokal, adressiert alle RIP Router} + \item{ff05::2 - All Routers Sitelokal, adressiert alle Router einer Site (Pakete dürfen geroutet werden, aber nicht in Internet).} + \item{ff05::1:3 - All DHCP-Server in der Site} + \end{itemize} + \tiny{weitere Multicast-Adressen: \url{https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml}} + \note[item]{bei lokal verlassen die Pakete das Teilnetz nicht} +\end{frame} + +\subsection{Anycast Adressen} +\begin{frame} + \frametitle{Was sind Anycast Adressen} + \textcolor{MidnightBlue}{RFC 4291} - 2006\\ + \vspace{-0.5cm} +\center{ + \includegraphics[scale=0.4]{Anicast.png} + \begin{tabular}{c|c|c} + \textcolor{olive}{n Bits} & \textcolor{violet}{128-n bits}\\\hline + \textcolor{olive}{Subnet Präfix} & \textcolor{violet}{Interface Identifier}\\\hline + \textcolor{olive}{fd::}&0\\ + \end{tabular}} + + \begin{itemize} + \item{kann auf mehreren Interfaces konfiguriert sein} + \item{spricht nur die nächste Adresse an} + \item{haben keinen speziellen Adressbereich} + \item{sind Unicast-Adressen, mit dem Interface Identifier auf null gesetzt} + \item{Nutzen: zB LoadBalancing} + \end{itemize} +\end{frame} + +\section{besondere IPv6 Adressen} + +\begin{frame}[shrink] + \frametitle{weitere IPv6-Adressen} + \framesubtitle{besondere IP-Adressen} + \begin{description} + \item[::/128] nicht spezifizierte, nicht zugewiesene Adresse. + \item[::/0] Standard-Route, bzw. es wurde keine Route gefunden. + \item[::1/128] loopback-Adresse + \item[2001:db8::/32] nicht routbare Adressen für Dokumentationszwecke + \item[2001::/32] Teredo-Adressen + \item[2002::/16] 6to4 + \item[3ffe::/16] bone6-Projekt der Telekom, wurde 2006 zurück an IANA gegeben + \end{description} + weitere besondere IPv6-Adressen \url{https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml} +\end{frame} + +\section{HandsON} +\subsection{ping} +\begin{frame}[fragile] + \frametitle{Das Test-Netzwerk} + \framesubtitle{IP-Adressen checken und pingen} + \begin{itemize} + \item{Findet den WLAN-AccessPoint mit der ESSID Brieftauben-Wlan} + \item{Verbindet euch mit dem WLAN, es gibt kein Passwort} + \item{IP-Adresse überprüfen} + \mint{bash}{ip -6 address show} + \item{pingen} + \begin{minted}{bash} + ping -6 fe80::e65f:1ff:fe46:edc9% + ping6 fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc9 + ping -6 ff02::1% # alle Nodes local + ping6 ff02::2% #alle Router local + \end{minted} + \item{\textcolor{red}{Vorsicht} man kann Unicast Adressen auch ohne Zone pingen} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + Welche IPv6 Adresse ist gültig? + \begin{description} + \item[A] fe80:asdf::/20 + \item[B] ::1/128 + \item[C] fdb0:0cfe:ed::/64 + \item[D] 2001:db8::/32 + \end{description} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + \begin{description} + \item[A] \textcolor{red}{fe80:asdf::/20} X fe80::$<$InterfaceIdentifier$>$ + \item[B] \textcolor{green}{::1/128} \checkmark für loopback + \item[C] \textcolor{green}{fdb0:0cfe:ed::/64} \checkmark Unique Local Adress + \item[D] \textcolor{orange}{2001:db8::/32} \checkmark nur für „Dokumentationen \textcolor{MidnightBlue}{RFC 3849} - 2004“ + \end{description} +\end{frame} + +\subsection{ssh} + +\begin{frame}[fragile] + \frametitle{SSH} + \framesubtitle{mit IPv6} + \begin{itemize} + \item{Wlan SSID: Brieftauben-Wlan !kein Passwort!} + \item{ssh} + \begin{itemize} + \item{ssh User: dove} + \item{ssh Passwort: IPoAC} + \begin{minted}[breakafter=:]{bash} + ssh @fe80::e65f:1ff:fe46:edc9% + ssh @fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc9 + \end{minted} + \item{hier ist die \textcolor{red}{Zone wichtig} bei LLA's} + \item{chatten geht mit wall} + \end{itemize} + \end{itemize} +\end{frame} + +\subsection{curl} +\begin{frame}[fragile] + \frametitle{Webseiten über IPv6} + \framesubtitle{mit curl} + \begin{itemize} + \item{Wlan SSID: Brieftauben-Wlan !kein Passwort!} + \begin{minted}[breakafter=:]{bash} + curl -I "http://[fe80::e65f:1ff:fe46:edc9%]" + curl -I "http://[fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc9]" + \end{minted} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + IPv6 Adressen im Grafischen Browser + \begin{description} + \item[A] IPv6 Adressen kann man im Webbrowser nicht aufrufen + \item[B] Webbrowser können nicht mit IP-Adressen umgehen + \item[C] IPv6-Adressen müssen im Webbrowser zwischen [ ] geschrieben werden + \item[D] Link-Local-Adressen kann man im Webbrowser nicht aufrufen nur ULAs und GUAs + \end{description} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + \begin{description} + \item[A] \textcolor{red}{IPv6 Adressen kann man im Webbrowser nicht aufrufen} X + \item[B] \textcolor{red}{Webbrowser können nicht mit IP-Adressen umgehen} X + \item[C] \textcolor{green}{IPv6-Adressen müssen im Webbrowser zwischen [ ] geschrieben werden} \checkmark + \item[D] \textcolor{green}{Link-Local-Adressen kann man im Webbrowser nicht aufrufen nur ULAs und GUAs} \checkmark + \end{description} +\end{frame} + +\subsection{Webbrowser} +\begin{frame} + \frametitle{Webbrowser} + \framesubtitle{Webseiten mit IPv6} + \begin{itemize} + \item{Wlan SSID: Brieftauben-Wlan !kein Passwort!} + \item{\url{http://[fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc8]}} + \item{ladet euch das Git-Projekt IPv6 herunter} + \end{itemize} +\end{frame} + +\section[SLAAC]{IPv6 Adressen mittels SLAAC} + +\begin{frame} + \frametitle{Autokonfiguration(SLAAC)} + \framesubtitle{Stateless Address Auto Configuration} + \vspace{-0.2cm} + \small{ + \textcolor{MidnightBlue}{RFC 4862} - 2007 + \vspace{-0.2cm} + \begin{definition} + \textbf{StateLessAddressAutoConfiguration} Zustandslose Autokonfiguration einer IPv6-Adresse pro Netzwerk Interface, dabei wird die LinkLocal (\textcolor{olive}{fe80::}) und Globale Adresse (\textcolor{olive}{2000::}) gebildet. + \end{definition} + \vspace{-0.3cm} + \begin{itemize} + \item{nur bei Multicast fähigen Interfaces} + \item{erfordert kein manuelles Eingreifen} + \item{Duplicate Address Dectection (DAD)} + \item{nutzt lokale Informationen und Router Advertisements} + \item{wenn kein Router vorhanden, nur die Link Local Adresse} + \item{kann auch mit DHCPv6 benutzt werden, mehr Kontrolle} + \item{Router Solications wird auf allen Router Multicast Gruppen ausgeführt} + \item{wenn Präfix und Interface Identifier zusammen nicht 128 bit ergeben, wird keine Adresse gebildet} + \end{itemize}} + \vspace{0.5cm} +\end{frame} + +\subsection{Protokolle im Netzwerk} +\begin{frame} + \frametitle{weitere IPv6 Protokolle} + \label{Protokolle} + %\framesubtitle{} + Informationen im Netzwerk ermitteln mit ICMP - alias ping + \begin{definition} + \small{ + NDP=Neighbor Discovery Protocol \only<|beamer:0>{\hyperlink{NDP}{\beamergotobutton{NDP}}}\\ + \textcolor{MidnightBlue}{RFC 3122 (2001), 4861 (2007), 9131 (2021)}\\ + Wird verwendet um im selben Netz andere Teilnehmer und dazugehörige Informationen zu ermitteln.} + \end{definition} + \pause + \begin{definition} + \small{ + DAD=Duplicate Address Dectection \only<|beamer:0>{\hyperlink{DAD}{\beamergotobutton{DAD}}}\\ + \textcolor{MidnightBlue}{RFC 4429 (2006), 4862 (2007), 7527 (2015)}\\ + Soll Adress Konfikte verhindern, und doppelt vergebene Adressen erkennen. Es besteht die Pflicht es zu verwenden.} + \end{definition} + \pause + \begin{definition} + \small{ + NUD=Neighbor Unreachability Dectection \only<|beamer:0>{\hyperlink{NUD}{\beamergotobutton{NUD}}}\\ + \textcolor{MidnightBlue}{RFC 4861 (2007), 7048 (2014)}\\ + ermittelt, ob die Adresse noch erreichbar ist.} + \end{definition} +\end{frame} + +\begin{frame} + \frametitle{weitere IPv6 Protokolle} + \begin{definition} + RS=Router-Solicitation \only<|beamer:0>{\hyperlink{RS}{\beamergotobutton{RS}}}\\ + \textcolor{MidnightBlue}{RFC 4861 (2007)}\\ + ICMP Multicast-Nachricht mit der ein Router Advertisement angefordert wird. + \end{definition} + \pause + \begin{definition} + RA=Router-Advertisement \only<|beamer:0>{\hyperlink{RA}{\beamergotobutton{RA}}}\\ + \textcolor{MidnightBlue}{RFC 4861 (2007)}\\ + ICMP Nachricht mit der ein Router sein vorhandensein im Netz bekannt gibt und verschiedene Informationen an die Teilnehmer des Netzes übermittelt. Wird in regelmäßigen Abständen gesendet. + \end{definition} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Das NDP} + \framesubtitle{Neighbor Discovery Protocol unter Linux} + Informationen aus dem Neighbor Discovery Cache abrufen: + \begin{minted}{bash} + ip -6 maddress show #multicast Adressen + ip -6 neighbour show #aktueller Neighbour Cache im Kernel + ip -6 neigh get dev #listet Informationen aus dem Cache zu angegeben Adresse auf dem Interface auf + ip -6 neigh show unused # listet alle Nachbarn, die gerade nicht benutzt werden auf + ip -6 neigh show to #listet Informationen zu der Adresse + ip -6 neigh show dev #listet Informationen zu den Adressen im Interface + ip -6 route show table all #zeigt die IPv6 Routen an + \end{minted} +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + \framesubtitle{Was glaubt ihr?} + Wenn die Duplicate Adress Detection anschlägt, passiert folgendes: + \begin{description} + \item[A] sollte das Interface deaktiviert werden + \item[B] sollte ein Systemfehler geloggt werden + \item[C] wurde der Interface Identifier nicht basierend auf der MAC-Adresse gebildet, könnte vielleicht fortgefahren werden + \item[D] wird eine neue Adresse generiert + \end{description} + Hinweis: Nachdem was der RFC vorschreibt +\end{frame} + +\begin{frame} + \frametitle{Rätsel-Time} + Was glaubt ihr?\\ + \begin{description} + \item[A] \textcolor{green}{sollte das Interface deaktiviert werden} \checkmark + \item[B] \textcolor{green}{sollte ein Systemfehler geloggt werden} \checkmark + \item[C] \textcolor{green}{wurde der Interface Identifier nicht basierend auf der MAC-Adresse gebildet, könnte vielleicht fortgefahren werden} \checkmark + \item[D] \textcolor{red}{wird eine neue Adresse generiert} X + \end{description} + \note{\vspace{-1.5cm}rfc7527:\\ + When a genuine duplicate is detected, the node follows the manual intervention specified in Section 5.4.5 of [RFC4862].\\} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Duplicate Address Dectection und Neighbor Unreachability Dectection} + \framesubtitle{DAD und NUD unter Linux} + DAD Konfiguration im Kernel + \begin{minted}{bash} + sysctl -w net.ipv6.conf.accept_dad=0 #DAD disablen + sysctl -w net.ipv6.conf.accept_dad=1 #DAD enablen + sysctl -w net.ipv6.conf.accept_dad=2 #DAD disablen wenn Doppelte Adresse gefunden und Interface Identifier auf MAC-Adresse basierend + \end{minted} + NUD einsehen unter Linux: + \begin{minted}{bash} + ip -6 neighbour show nud all #status der NUD im Cache + ip monitor #zeigt die Statusänderung an + \end{minted} +\end{frame} + + +\section[IPv6 Bedingungen]{zwingende Bedingungen für IPv6} +\begin{frame} + \frametitle{Voraussetzungen für IPv6} + \framesubtitle{Zusammenfassung} + \textcolor{MidnightBlue}{RFC 8504} - 2019 + \begin{itemize} + \item{Fähigkeit IPv6-Paket zu empfangen und zu senden} + \item{zu gewährleisten ist (MUST):} + \begin{itemize} + \item{Routererkennung} + \item{Präfixerkennung} + \item{NUD für alle Pfade zwischen Hosts und Nachbar Nodes} + \item{RA und RS} + \item{Pfad MTU und Größen-Erkennung} + \item{ICMPv6 (ping)} + \item{Multicast} + \item{SLAAC} + \item{DAD} + \item{DNS Option in RA} + \end{itemize} + \end{itemize} +\end{frame} + +\section[Transport]{Transportmöglichkeiten für IPv6} + +\subsection{IPoAC} +\begin{frame} + \frametitle{Tauben und IPv6} + \only<|beamer:0>{alternative Transportmöglichkeit: \hyperlink{IPoSN}{\beamergotobutton{IPoSN}}} + \center{\includegraphics[scale=0.4]{Taube03.jpg}} +\end{frame} +\begin{frame} + \frametitle{Brief-Tauben und IPv6} + \framesubtitle{\textcolor{RedViolet}{RFC 6214} 2011 IPoAC} + \label{IPoAC} + \vspace{-0.2cm} + \begin{itemize} + \item{Allgemeines} + \begin{itemize} + \item{sehr instabil Übertragungswege, je nach Wind\-verhältnissen} + \item{bekanntes Risiko einer Infektion mit H5N1 Virus, Sicher\-stel\-lung von angemessene Erkennung und Quarantäne Maßnahmen} + \end{itemize} + \item{IPv6 Bedingungen} + \begin{itemize} + \item{LinkLocal Adressen können nicht gebildet werden, jegliche Form von Link-Layer (Sicherungsschicht) fehlt} + \item{es kann nur das andere Ende des Links adressiert werden} + \item{Keine Möglichkeit Unicast Adressen zu einer LinkLocal Adresse zu mappen} + \item{Neigbour Discovery ist unmöglich} + \item{SLAAC sollte nicht versucht werden zu implementieren, eine stabiler Interface Identifier ist nicht zu bilden} + \item{versuche Multicast zu implementieren, führten zu erhöhter Geräuschübertragung, was zu fehlerhaften Prüfsummen führt} + \end{itemize} + \end{itemize} + \vspace{0.4cm} + \note[item]{Es gibt Beweise, dass einige Avian Carriers (Raubvögel) andere Avian Carriers gegessen haben und dann den gegessenen Packetinhalt getragen haben.} + \note[item]{neue Tunnel für IPv4 in IPv6 und umgekehrt - Aber der Entpackungs-Mechanismus ist noch unklar} +\end{frame} + +\begin{frame} + \frametitle{IPv6 mit IPoAC} + \framesubtitle{Zusammenfassung} + \begin{itemize} + \item{Routererkennung \textcolor{red}{X}} + \item{Präfixerkennung \textcolor{green}{\checkmark}} + \item{NUD für alle Pfade zwischen Hosts und Nachbar Nodes \textcolor{red}{X}} + \item{RA und RS \textcolor{red}{X}} + \item{Pfad MTU und Größen-Erkennung \textcolor{green}{\checkmark}} + \item{ICMPv6 (ping) \textcolor{orange}{\checkmark}} + \item{Multicast \textcolor{orange}{\checkmark}} + \item{SLAAC \textcolor{red}{X}} + \item{DAD \textcolor{red}{X}} + \item{DNS Option in RA \textcolor{green}{\checkmark}} + \end{itemize} +\end{frame} + +\subsubsection[IPoAC Lösungen]{Mögliche Lösungen für IPoAC mit IPv6} +\begin{frame} + \frametitle{Brief-Tauben und IPv6 Lösungen} + \framesubtitle{Vorschläge} + \begin{itemize} + \item{Using 127-Bit IPv6 \textcolor{MidnightBlue}{Prefixe RFC 6164} - 2011 und \textcolor{RedViolet}{6214} 2011} + \begin{itemize} + \item{der End-Punkt des Links ist unnummiert oder mit einem /127 prefix und einer statischen Addresse versehen (\textcolor{RedViolet}{RFC 6214})} + \item{nur für point-to-point Kommunikation zwischen Routern} + \item{führt zu Neigbour Discovery Exhaustion (hin und herschicken von Tauben)} + \end{itemize} + \item{Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) \textcolor{MidnightBlue}{RFC 6775} - 2017} + \begin{itemize} + \item{Interface Identifier wird mit Hilfe von RA gebildet} + \item{DAD wird unterstützt (nur wenn SLAAC benutzt wird)} + \item{Es werden keine NS Nachrichten unterstützt} + \item{bei Adress Initialisierung wird erst RS Nachricht abgewartet bevor die Adresse gebildet wird} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Brief-Tauben und IPv6 Lösungen} + \framesubtitle{Vorschläge} + \begin{itemize} + \item{Routing for RPL (Routing Protocol for Low-Power and Lossy Networks) Leaves \textcolor{MidnightBlue}{RFC 9010} - 2021 (update von \textcolor{MidnightBlue}{6775})} + \begin{itemize} + \item{IPv6 Adressen werden als Host-Routen bekannt gegeben} + \item{kommuniziert nur mit einem Router} + \item{Dort findet eine ND Registratur statt} + \item{Ziel ist, das weniger Nachrichten mit dem Host ausgetauscht werden} + \item{DAD und ND-Messages werden zwischen dem Router und dem Host ausgetauscht} + \end{itemize} + \item{Complex Addressing in IPv6 \textcolor{RedViolet}{RFC 8135} - 2017} + \begin{itemize} + \item{Flying Addresses} + benutzten den ICAO Class G Luftraum unterhalb der Wolken und können von unteren Layer Technologien erwartet werden + \item{Floating Addresses} + werden mit Panzertape am Gerät befestigt und garantieren KEINE Wasserdichte des Gerätes + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Brief-Tauben und IPv6} + \framesubtitle{Real-Life Beispiel} + \begin{itemize} + \item{Scenic Routing for IPv6 \textcolor{RedViolet}{RFC 7511} - 2015} + \begin{itemize} + \item{zur Unterstützung Grüner IT} + \item{Pakete werden so geroutet, dass sie möglichst viel frische Luft bekommen} + \item{dafür werden Routen basierend auf IPoAC gewählt} + \item{im Scenic Routing Option Layout ist der Option Type für 0x0A (On Air) vorgesehen} + \item{benutzt immer den längsten AC-Pfad} + \end{itemize} + \end{itemize} +\end{frame} + +\subsection[IPoB]{IPv4 over Buritos} +\begin{frame}[fragile,shrink] + \frametitle{IPv4 over Burrito Carriers} + \framesubtitle{\textcolor{RedViolet}{RFC Draft 2005} IPoBC} + \label{IPoBC} + Größe: 20 Byte (160 Bits) + \vspace{0.2cm} + \vfill + \begin{bytefield}{32} + \bitheader{0,4,8,12,16,20,24,28,32} \\ + \bitbox{4}{\color{green}\tiny{offensichtlich}} & \bitbox{4}{\color{red}\small{Zwiebel}} & \bitbox{8}{\color{blue}Jalapenos} & \bitbox{16}{\color{blue}Phyische Länge (mm)}\\ + \bitbox{16}{\color{red}Nummer auf der Folie} & \bitbox{3}{\color{red}\tiny{Bohnen\\Art}} & \bitbox{13}{\color{red}Anzahl der Bohnen}\\ + \bitbox{8}{\color{blue}{aAz}} & \bitbox{8}{\color{blue}Guacamole} & \bitbox{16}{\color{red}Rezept}\\ + \bitbox{32}{\color{green}Salat}\\ + \bitbox{32}{\color{green}Reis}\\ + \bitbox{32}{\color{red}Rindfleisch} + \end{bytefield} + Guten Appetit!\\ + \small{Legende: aAz $=$ angeforderte Auslieferungszeit} + \only<|beamer:0>{\hyperlink{Header}{\beamergotobutton{IPv6-Header}}} +\end{frame} + +\section{ENDE} +\begin{frame} + \frametitle{Ende} + \centering + \huge{Vielen Dank\\ + fürs Zuhören!\\ + }\vspace{1cm} + \small{Kontaktmöglichkeiten:\\ + email: ratten@buecherratten.in-berlin.de\\ + jabber: buecherratten@jabber.in-berlin.de\\ + Repro: \url{http://git.tuxteam.de/gitweb/?p=susannes-git/Ipv6-Vortrag.git;a=tree} + } +\end{frame} + +%folien fürs Handout + +\begin{frame}<1-| beamer:0> + \frametitle{MAC-Adressen} + \framesubtitle{Die Adresse der Hardware} + \label{MAC} + \begin{definition} + \small{ MAC-Adresse = Media-Access-Control-Adresse nach IEEE 802.3 und IEEE 802.11\\ + Andere Namen sind Ethernet-ID, Airport-ID, Wi-Fi-Adresse (Apple) oder Physikalische Adresse (Microsoft).} + \end{definition} + \begin{tabular}{l|l|l} + Byte & 1. 2. 3. & 4. 5. 6. \\\hline + Bedeutung & Hersteller Kennung & Geräte Kennung \\ + Beispiel & 52:54:00 & 0f:71:c0 \\ + \end{tabular} + \begin{itemize} + \item{sollte eindeutig sein (kann jeder spoofen)} + \item{Länge: 48 Bit in 12 stelliger Hexadezimalzahl} + \item{Zusammensetzung aus Hersteller- und Geräte-Kennung} + \item{gehen voraussichtlich im Jahr 2100 aus (rechnerisch)} + \end{itemize} + \hyperlink{EUI}{\beamerreturnbutton{Back to EUI 64}} +\end{frame} + +\begin{frame}<1-| beamer:0> + \frametitle{Multicast Adressen} + \framesubtitle{Scope Überblick} + \label{Multicast Scope} + \small{ + Die Scopes haben folgende Bedeutung:\\ + \begin{tabular}{c|c|p{5cm}} + Wert&Scope&Beschreibung\\\hline + 0&reserviert&\\\hline + 1&Interface-Local&Loopback\\\hline + 2&Link Local&nur im lokalen Subnetz\\\hline + 3&Realm-Local&für eine bestimmte Netzwerk-Technologie (zBsp Mesh) \\\hline + 4&Admin-Local&Geltungsbereich vom Router-Admin definiert\\\hline + 5&Site-local& für den Bereich einer lokalen Site\\\hline + 8&Organisation-Local& über mehrere Sites aber gleiches logisches Netz\\\hline + E&Global&Globaler Multicast\\\hline + \end{tabular} + Fehlende Scope sind nicht zugewiesen und dürfen zur Definierung von Multicast-Regionen verwendet werden. + \hyperlink{Multicast}{\beamerreturnbutton{Back to Multicast}}} +\end{frame} + +\begin{frame}<1-| beamer:0>[fragile,shrink] + \frametitle{Das innere der IPv6-Pakete} + \framesubtitle{IPv6-Header} + \label{Header} + \textcolor{MidnightBlue}{RFC 8200} (2017) ursprünglich 1995 \textcolor{MidnightBlue}{RFC 1883} \\ + Größe: 40 Byte (320Bits) + \vspace{0.3cm} + \vfill + \begin{bytefield}{32} + \bitheader{0,4,8,12,16,20,24,28,32} \\ + \bitbox{4}{\color{DarkGreen}Version} & \bitbox{8}{\color{blue}Traffic Class} & \bitbox{20}{\color{blue}Flow Label}\\ + \bitbox{16}{\color{blue}Payload Length} & \bitbox{8}{\color{blue}Next Header} & \bitbox{8}{\color{blue}Hop Limit}\\ + \wordbox{4}{\color{DarkGreen}Quell-IP-Adresse}\\ + \wordbox{4}{\color{DarkGreen}Ziel-IP-Adresse}\\ + \end{bytefield} + \vspace{0.3cm} + legende: Grün auch in ipv4 / Blau verändert in IPv6 +\end{frame} + +\begin{frame}<1-| beamer:0> + \frametitle{Das innere der IPv6-Pakete} + \framesubtitle{Felder des IP-Headers} + \scriptsize{ + \begin{tabular}{p{0.13\textwidth}|l|p{0.76\textwidth}} + Feld & Bit & Beschreibung \\\hline + Version & 4 & Protokoll Version \\\hline + Traffic Class & 8 & Priorität des Pakets beim Routen (Quality of Service / QoS)\\\hline + Flow Label & 20 & Weiterer Marker für QoS bei Echtzeitanwendungen und Streaming. Pakete mit gleichem Flow-Wert werden gleich behandelt.\\\hline + Payload Length & 16 & Netto-Länge des Datenpakets (= Payload + Header Extensions)\\\hline + Next Header & 8 & Identifiziert den Typ des nächsten Kopfdatenbereiches, dieser kann entweder einen Erweiterungs-Kopfdatenbereich oder ein Protokoll höherer Schicht bezeichnen, wie z. B. TCP\\\hline + Hop Limit & 8 & Maximale Anzahl von Router-Durchläufen (Hops). Bei jedem Hop wird dieser Zähler um eins dekrementiert. Beim Stand null wird das Paket verworfen. \\\hline + Quell-IP-Adresse & 128 & An dieser Stelle steht die IP-Adresse der Station, die das IP-Paket abgeschickt hat.\\\hline + Ziel-IP-Adresse & 128 & An dieser Stelle steht die IP-Adresse der Station/Stationen, für die das IP-Paket bestimmt ist.\\\hline + \end{tabular} + \hyperlink{IPoBC}{\beamerreturnbutton{Back to IPoBC}}} +\end{frame} + +\begin{frame}<1-| beamer:0>[shrink] + \frametitle{Das NDP} + \framesubtitle{Neighbor Discovery Protocol} + \label{NDP} + \textcolor{MidnightBlue}{RFC 4861} - 2007\\ + \textcolor{MidnightBlue}{RFC 9131} - 2021\\ + \textcolor{MidnightBlue}{RFC 3122} - 2001 + \begin{definition} + Wird verwendet um im selben Netz andere Teilnehmer und dazugehörige Informationen zu ermitteln. + \end{definition} + \vspace{-0.3cm} + \begin{itemize} + \item{erlaubt das erkennen von Link Local Adressen} + \item{nutzt ICMP (Internet Controll Message Protocol alias ping)} + \item{ermittelt:} + \begin{itemize} + \item{Präfixe (Prefix Discovery)} + \item{Router (Router Discovery)} + \item{Ermittelt die MTU (maximale Transmission Unit)} + \item{Hop Limit und den nächsten Hop} + \item{Doppelte Adressen (DAD)} + \item{unerreichbare Teilnehmer (NUD)} + \item{Umleitungen (Redirects)} + \end{itemize} + \end{itemize} + \hyperlink{Protokolle}{\beamerreturnbutton{Back to weitere Protokolle}} + \vspace{0.3cm} +\end{frame} + +%% \subsection[DAD]{Duplicate Address Dectection} + +\begin{frame}<1-| beamer:0>[fragile] + \frametitle{Duplicate Address Dectection} + \framesubtitle{doppelte Addressen aufspüren} + \label{DAD} + \textcolor{MidnightBlue}{RFC 7527} - 2015\\ + \textcolor{MidnightBlue}{RFC 4862} - 2007\\ + \textcolor{MidnightBlue}{RFC 4429} - 2006 + \begin{definition} + Soll Adress Konfikte verhindern, und doppelt vergebene Adressen erkennen. + \end{definition} + \vspace{-0.3cm} + \begin{enumerate} + \item{ermittelte Unicast-Adresse} + \item{sende Neigbour Solicitation-Nachricht (ICMP)} + \item{verwende eine unspezifische Adresse als Quell-Adresse} + %\item{die ermittelte Unicast Adresse wird als Solicited Multicast Adresse umgewandelt und als Zieladresse verwendet} + \item{die gewünschte ermittelte Unicast Adresse wird im ICMP-Packet als Zieladresse mit eingetragen} + \end{enumerate} + \begin{itemize} + \item{Pflicht DAD bei allen Adressen zu verwenden} + \item{DAD kann betriebssystemseitig ausgeschaltet werden} + \end{itemize} + \hyperlink{Protokolle}{\beamerreturnbutton{Back to weitere Protokolle}} +\end{frame} + +%\subsection[NUD]{Neighbor Unreachability Dectection} + +\begin{frame}<1-| beamer:0>[fragile] + \frametitle{Neighbor Unreachability Dectection} + \framesubtitle{Erreichbarkeit der Umgebung} + \label{NUD} + \textcolor{MidnightBlue}{RFC 7048} - 2014\\ + \textcolor{MidnightBlue}{RFC 4861} - 2007 + \begin{definition} + ermittelt, ob die Adresse noch erreichbar ist. + \end{definition} +\begin{itemize} +\item{wird mittels ping(ICMP) ermittelt} +\item{wird benutzt für alle Wege zwischen den Teilnehmern} +\item{wird nur an Teilnehmer mit Unicast Adresse gesendet} +\end{itemize} +\hyperlink{Protokolle}{\beamerreturnbutton{Back to weitere Protokolle}} +\end{frame} + +%\subsection[RA/RS]{Router Erkennung mit IPv6} + +\begin{frame}<1-| beamer:0> + \frametitle{Router Erkennung} + \framesubtitle{Router-Solicitation} + \label{RS} + \textcolor{MidnightBlue}{RFC 4861} - 2007 + \begin{definition} + ICMP Multicast-Nachricht mit der ein Router Advertisement angefordert wird. + \end{definition} + \begin{itemize} + \item{wird nach dem aktivieren des Interfaces versendet} + \item{beinhaltet:} + \begin{itemize} + \item{SourceAdresse: IP-Adresse des sendenen Interfaces} + \item{ZielAdresse: all routers multicast Adresse} + \end{itemize} + \end{itemize} + \hyperlink{Protokolle}{\beamerreturnbutton{Back to weitere Protokolle}} +\end{frame} + +\begin{frame}<1-| beamer:0>[shrink] + \frametitle{Router Erkennung} + \framesubtitle{Router-Advertisement} + \label{RA} + \textcolor{MidnightBlue}{RFC 4861} - 2007 + \vspace{-0.2cm} + \begin{definition} + ICMP Nachricht mit der ein Router sein vorhandensein im Netz bekannt gibt und verschiedene Informationen an die Teilnehmer des Netzes übermittelt. + \end{definition} + \vspace{-0.3cm} + \begin{itemize} + \item{wird in regelmäßigen Abständen gesendet} + \item{ist oft Antwort auf Router-Solicitation} + \item{beinhaltet:} + \begin{itemize} + \item{SourceAdresse: linklocalAdresse des sendenen Interfaces} + \item{ZielAdresse: RouterAdresse oder all-node Multicast Adresse} + \item{derzeitiges Hop Limit} + \item{DHCP erreichbar (Managed Adress configuration flag)} + \item{Router Lifetime: 0 = kein Default Router} + \item{MTU} + \item{Präfix Informationen} + \end{itemize} + \end{itemize} + \hyperlink{Protokolle}{\beamerreturnbutton{Back to weitere Protokolle}} + \vspace{0.3cm} +\end{frame} + +%\subsection{IPoSN} +\begin{frame}<1-| beamer:0> + \frametitle{IPv6 over Social Networks} + \framesubtitle{Aufbau} + \label{IPoSN} + \textcolor{RedViolet}{RFC 5514} - 2009 + \begin{definition} + Um die IPv6-Geräte zu erhöhen, sollen alle Sozialen Netzwerk Plattformen in IPv6 Netzwerke migriert werden. Damit soll erreicht werden die IPv6 Kenntnisse ebenso zu erhöhen, wie die IPv6 Router. + \end{definition} +\vspace{-0.3cm} + \begin{itemize} + \item{Experimentelles Protokoll} + \item{mögliche Netzwerke: Facebook, LinkedIn, etc.} + \item{Jeder User des Netzwerk ist ein Router} + \item{Jeder befreundete User ist ein point-to-point Link} + \item{Da User mehrere Freunde; Partner, Beziehungen möchten, ist mit einem großen gemeshed Netz zu rechenen} + \item{Das erzeugt eine gute IPv6 Connectivity} + \end{itemize} +\end{frame} + +\begin{frame}<1-| beamer:0> + \frametitle{IPv6 over Social Networks} + \framesubtitle{Funktition} +\small{ + \begin{itemize} + \item{Viele Soziale Netzwerk Apps (SNAs) erlauben Plug-Ins} + \item{Plug-Ins erzeugen mit Hilfe des Users IPv6 Pakete} + \item{Diese werden Sprung für Sprung über meshed SNA/IPv6 übertragen} + \item{Die übliche Regel lautet, dass SNA Kontobenutzer über eine Web Aktion die erhaltenen IPv6 Pakete verarbeiten} + \item{Dies verursacht mitunter große Verzögerungen zwischen Teilnehmern, daher sind die Routing-Timer anzupassen} + \item{Interface Identifier werden aus der einzigartige nummerische User-Indentifikation in SNAs erstellt} + \item{es werden nur GUA und LLA generiert} + \item{...} + \end{itemize} + } + \hyperlink{IPoAC}{\beamerreturnbutton{Back to IPoAC}} +\end{frame} + + +\end{document} + +% LocalWords: IPv Powershell Identifier diff --git a/ansible/README b/ansible/README new file mode 100644 index 0000000..8411173 --- /dev/null +++ b/ansible/README @@ -0,0 +1 @@ +Die Ansible-Rollen und Playbooks sind zur generierung und einrichtung des Raspberry-PIs, damit dieser während des Vortrags benutzt werden kann. Die Hosts.ini ist nicht in diesen Dateien integriert, ebenso wenig wie Passwörter. Daher nicht einfach die Playbooks und Rollen benutzen sondern erst lesen um die entsprechenden Werte zu ersetzen. Die Benutzung der Rollen und Playbooks erfolgt auf eigenes Risiko. \ No newline at end of file diff --git a/ansible/hosts.ini b/ansible/hosts.ini new file mode 100644 index 0000000..0ceb151 --- /dev/null +++ b/ansible/hosts.ini @@ -0,0 +1,12 @@ +[sd_host] +ameisen +[raspi] +alarmpi +[raspi:vars] +ansible_user=alarm +ansible_ssh_private_key_file=~/.ssh/pi4 +[VortragsPI] +brieftaube +[VortragsPI:vars] +ansible_user=ratten +ansible_ssh_private_key_file=~/.ssh/pi4 \ No newline at end of file diff --git a/ansible/playbooks/Vortrags_pi.yml b/ansible/playbooks/Vortrags_pi.yml new file mode 100644 index 0000000..7ec3888 --- /dev/null +++ b/ansible/playbooks/Vortrags_pi.yml @@ -0,0 +1,13 @@ +- hosts: VortragsPI + gather_facts: yes + become_method: su + + roles: + - role: raspi_Vortrag + become: yes + - role: forgeo_install + become: yes + vars: + dbrootpw: "" + dbforgejopw: "" + diff --git a/ansible/playbooks/install_sd.yml b/ansible/playbooks/install_sd.yml new file mode 100644 index 0000000..a268e90 --- /dev/null +++ b/ansible/playbooks/install_sd.yml @@ -0,0 +1,6 @@ +- hosts: sd_host + gather_facts: yes + become_method: su + + roles: + - installSD diff --git a/ansible/playbooks/raspi_basic.yml b/ansible/playbooks/raspi_basic.yml new file mode 100644 index 0000000..26de03d --- /dev/null +++ b/ansible/playbooks/raspi_basic.yml @@ -0,0 +1,18 @@ +- hosts: raspi + gather_facts: yes + become_method: su + become: yes + + roles: + - role: basic_raspi_config + vars: + hostname: Brieftaube + rootpw: "" + Sysuser: ratten + Syspass: "" + ssh_key: ~/.ssh/pi4.pub + packages: + - git + - openssh + - archlinux-keyring + - pacman-mirrorlist diff --git a/ansible/roles/basic_raspi_config/README.md b/ansible/roles/basic_raspi_config/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/ansible/roles/basic_raspi_config/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/ansible/roles/basic_raspi_config/defaults/main.yml b/ansible/roles/basic_raspi_config/defaults/main.yml new file mode 100644 index 0000000..0ca4bca --- /dev/null +++ b/ansible/roles/basic_raspi_config/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for basic_raspi_config diff --git a/ansible/roles/basic_raspi_config/handlers/main.yml b/ansible/roles/basic_raspi_config/handlers/main.yml new file mode 100644 index 0000000..80a2b0e --- /dev/null +++ b/ansible/roles/basic_raspi_config/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for basic_raspi_config diff --git a/ansible/roles/basic_raspi_config/meta/main.yml b/ansible/roles/basic_raspi_config/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/ansible/roles/basic_raspi_config/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/ansible/roles/basic_raspi_config/tasks/main.yml b/ansible/roles/basic_raspi_config/tasks/main.yml new file mode 100644 index 0000000..d2421b3 --- /dev/null +++ b/ansible/roles/basic_raspi_config/tasks/main.yml @@ -0,0 +1,95 @@ +--- +# tasks file for basic_raspi_config + +- name: init packman-key + command: pacman-key --init + +- name: activate archlinuxarm repo + command: pacman-key --populate archlinuxarm + +- name: create User for Server + ansible.builtin.user: + update_password: on_create + name: "{{ item.user }}" + shell: /bin/bash + password: "{{ item.pass | password_hash('sha512') }}" + state: present + generate_ssh_key: yes + ssh_key_type: ed25519 + with_items: + - user: "{{ Sysuser }}" + pass: "{{ Syspass }}" + +- name: add ssh-keys for ansible + ansible.posix.authorized_key: + user: "{{ Sysuser }}" + state: present + key: "{{ item }}" + with_file: + - "{{ ssh_key }}" + +- name: update installed packages + community.general.pacman: + update_cache: true + upgrade: true + +- name: install packages + community.general.pacman: + name: "{{ packages }}" + state: latest + +- name: Add swap volume to fstab + ansible.posix.mount: + path: none + src: /dev/mmcblk0p3 + fstype: swap + opts: sw + passno: '0' + state: present + +- name: Set local timezone + ansible.builtin.file: + src: /usr/share/zoneinfo/Europe/Berlin + dest: /etc/localtime + state: link + +- name: Configure locale.gen + lineinfile: + dest: /etc/locale.gen + regexp: '{{ item.regex }}' + line: '{{ item.line }}' + with_items: + - {regex: de_DE\.UTF-8 UTF-8, line: de_DE.UTF-8 UTF-8} + - {regex: de_DE ISO-8859-1, line: de_DE ISO-8859-1} + - {regex: de_DE@euro, line: de_DE@euro ISO-8859-15} + - {regex: en_US\.UTF-8 UTF-8, line: en_US.UTF-8 UTF-8} + - {regex: en_US ISO-8859-1, line: en_US ISO-8859-1} + +- name: Create locale.conf + ansible.builtin.template: + src: locale.conf + dest: /etc/locale.conf + +- name: Generate locales + command: locale-gen + +- name: fix network-error that produced by update + ansible.builtin.lineinfile: + dest: /etc/systemd/network/eth0.network + insertafter: '[Match]' + regexp: '^Name=eth0' + line: 'Name=e*' + +- name: Set hostname + copy: + content: '{{ hostname }}' + dest: /etc/hostname + +- name: set rootpw + ansible.builtin.user: + name: root + password: "{{ rootpw | password_hash('sha512') }}" + update_password: always + +- debug: + msg: "reboot the raspberry Pi and continue then with next playbook" \ No newline at end of file diff --git a/ansible/roles/basic_raspi_config/templates/locale.conf b/ansible/roles/basic_raspi_config/templates/locale.conf new file mode 100644 index 0000000..8d46bf4 --- /dev/null +++ b/ansible/roles/basic_raspi_config/templates/locale.conf @@ -0,0 +1,3 @@ +LANG=de_DE.UTF-8 +LANGUAGE=de_DE +LC_MESSAGES=en_US.UTF-8 \ No newline at end of file diff --git a/ansible/roles/basic_raspi_config/tests/inventory b/ansible/roles/basic_raspi_config/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/ansible/roles/basic_raspi_config/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/ansible/roles/basic_raspi_config/tests/test.yml b/ansible/roles/basic_raspi_config/tests/test.yml new file mode 100644 index 0000000..befbbc9 --- /dev/null +++ b/ansible/roles/basic_raspi_config/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - basic_raspi_config diff --git a/ansible/roles/basic_raspi_config/vars/main.yml b/ansible/roles/basic_raspi_config/vars/main.yml new file mode 100644 index 0000000..9fd84f5 --- /dev/null +++ b/ansible/roles/basic_raspi_config/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for basic_raspi_config diff --git a/ansible/roles/forgeo_install/README.md b/ansible/roles/forgeo_install/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/ansible/roles/forgeo_install/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/ansible/roles/forgeo_install/defaults/main.yml b/ansible/roles/forgeo_install/defaults/main.yml new file mode 100644 index 0000000..5aeaea7 --- /dev/null +++ b/ansible/roles/forgeo_install/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for forgeo_install diff --git a/ansible/roles/forgeo_install/handlers/main.yml b/ansible/roles/forgeo_install/handlers/main.yml new file mode 100644 index 0000000..e417e09 --- /dev/null +++ b/ansible/roles/forgeo_install/handlers/main.yml @@ -0,0 +1,12 @@ +--- +# handlers file for install_Forgejo + +- name: start and enable services + ansible.builtin.systemd: + state: started + daemon_reload: true + enabled: true + name: "{{ item }}" + with_items: + - nginx + - forgejo diff --git a/ansible/roles/forgeo_install/meta/main.yml b/ansible/roles/forgeo_install/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/ansible/roles/forgeo_install/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/ansible/roles/forgeo_install/tasks/main.yml b/ansible/roles/forgeo_install/tasks/main.yml new file mode 100644 index 0000000..e737461 --- /dev/null +++ b/ansible/roles/forgeo_install/tasks/main.yml @@ -0,0 +1,130 @@ +--- +# tasks file for forgeo_install + +- name: create user git + ansible.builtin.user: + name: git + shell: /bin/bash + create_home: yes + home: /home/git + password: '' + state: present + +- name: install packages + community.general.pacman: + name: "{{ item }}" + state: latest + with_items: + - python-pymysql + - mariadb + - nginx + +- name: init mariadb + command: mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql + +- name: start mariadb + ansible.builtin.systemd: + state: started + enabled: true + name: mariadb + +- name: create msqluser root + community.mysql.mysql_user: + login_user: root + login_password: "" + login_unix_socket: /var/run/mysqld/mysqld.sock + host: localhost + name: root + password: "{{ dbrootpw }}" + priv: '*.*:ALL,GRANT' + state: present + +- name: create msqluser forgejo + community.mysql.mysql_user: + login_user: root + login_password: "{{ dbrootpw }}" + login_host: localhost + host: localhost + name: forgejo + password: "{{ dbforgejopw }}" + priv: '*.*:ALL' + state: present + +- name: deleate forgejo mariadb database + community.mysql.mysql_db: + check_implicit_admin: yes + login_user: forgejo + login_password: "{{ dbforgejopw }}" + login_host: localhost + name: forgejo + state: absent + +- name: init mariadb database + community.mysql.mysql_db: + check_implicit_admin: yes + login_user: forgejo + login_password: "{{ dbforgejopw }}" + login_host: localhost + name: forgejo + state: present + +- name: Removes all anonymous user accounts + community.mysql.mysql_user: + login_user: root + login_password: "{{ dbrootpw }}" + login_host: localhost + name: '' + host_all: yes + state: absent + +- name: gernerate directory structure + ansible.builtin.file: + path: "{{ item.path }}" + owner: "{{ item.owner }}" + group: "{{ item.group }}" + state: directory + mode: "{{ item.mode }}" + with_items: + - { path: /var/lib/forgejo/, owner: git, group: git, mode: 750 } + - { path: /var/lib/forgejo/custom, owner: git, group: git, mode: 750 } + - { path: /var/lib/forgejo/data, owner: git, group: git, mode: 770 } + - { path: /var/lib/forgejo/log, owner: git, group: git, mode: 750 } + - { path: /etc/forgejo, owner: root, group: git, mode: 770 } + +- name: Download forgejo 1.18.5-0 + ansible.builtin.get_url: + url: https://codeberg.org/attachments/14e7bdbb-a2e7-4065-885f-c5fd26d00940 + dest: /usr/local/bin/forgejo + mode: +xr + +- name: set Enviroment Variable for Working Directory + shell: "export GITEA_WORK_DIR=/var/lib/forgejo" + +- name: systemd-unit for forgejo + ansible.builtin.template: + dest: /usr/lib/systemd/system/forgejo.service + src: systemd.service + notify: start and enable services + +- name: create nginx.d dir + ansible.builtin.file: + path: /etc/nginx/nginx.d + state: directory + +- name: add include directiv nginx.d + ansible.builtin.lineinfile: + path: /etc/nginx/nginx.conf + line: "include /etc/nginx/nginx.d/*.conf;" + insertbefore: "server {" + firstmatch: yes + state: present + +- name: configure nginx for Forgejo + ansible.builtin.template: + dest: /etc/nginx/nginx.d/git.conf + src: nginx.conf.j2 + notify: start and enable services + +- name: check if nginx.conf is ok + command: nginx -t + register: confcheck diff --git a/ansible/roles/forgeo_install/templates/network-file.j2~ b/ansible/roles/forgeo_install/templates/network-file.j2~ new file mode 100644 index 0000000..ca65356 --- /dev/null +++ b/ansible/roles/forgeo_install/templates/network-file.j2~ @@ -0,0 +1,8 @@ +[Match] +Name={{ item.interface }} + +[Network] +LinkLocalAddressing=ipv6 +IPv6StableSecretAddress={{ item.ip }} +DHCP=yes +DNSSEC=no diff --git a/ansible/roles/forgeo_install/templates/nginx.conf.j2 b/ansible/roles/forgeo_install/templates/nginx.conf.j2 new file mode 100644 index 0000000..1d835fc --- /dev/null +++ b/ansible/roles/forgeo_install/templates/nginx.conf.j2 @@ -0,0 +1,11 @@ +server { + listen [::]:80; + + location / { + proxy_pass http://127.0.0.1:3000/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} \ No newline at end of file diff --git a/ansible/roles/forgeo_install/templates/nginx.conf.j2~ b/ansible/roles/forgeo_install/templates/nginx.conf.j2~ new file mode 100644 index 0000000..bd4f498 --- /dev/null +++ b/ansible/roles/forgeo_install/templates/nginx.conf.j2~ @@ -0,0 +1,11 @@ +server { + listen [::]:80; + + location / { + proxy_pass http://localhost:3000/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} \ No newline at end of file diff --git a/ansible/roles/forgeo_install/templates/systemd.service b/ansible/roles/forgeo_install/templates/systemd.service new file mode 100644 index 0000000..cc12514 --- /dev/null +++ b/ansible/roles/forgeo_install/templates/systemd.service @@ -0,0 +1,67 @@ +[Unit] +Description=Forgejo (Beyond coding. We forge.) +After=syslog.target +After=network.target +### +# Don't forget to add the database service dependencies +### +# +#Wants=mysql.service +#After=mysql.service +# +Wants=mariadb.service +After=mariadb.service +# +#Wants=postgresql.service +#After=postgresql.service +# +#Wants=memcached.service +#After=memcached.service +# +#Wants=redis.service +#After=redis.service +# +### +# If using socket activation for main http/s +### +# +#After=forgejo.main.socket +#Requires=forgejo.main.socket +# + +[Service] +# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that +# LimitNOFILE=524288:524288 +RestartSec=2s +Type=simple +User=git +Group=git +WorkingDirectory=/var/lib/forgejo/ +# If using Unix socket: tells systemd to create the /run/forgejo folder, which will contain the forgejo.sock file +# (manually creating /run/forgejo doesn't work, because it would not persist across reboots) +RuntimeDirectory=forgejo +ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini +Restart=always +Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo/ +# If you install Git to directory prefix other than default PATH (which happens +# for example if you install other versions of Git side-to-side with +# distribution version), uncomment below line and add that prefix to PATH +# Don't forget to place git-lfs binary on the PATH below if you want to enable +# Git LFS support +#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin +# If you want to bind Forgejo to a port below 1024, uncomment +# the two values below, or use socket activation to pass Forgejo its ports as above +### +#CapabilityBoundingSet=CAP_NET_BIND_SERVICE +#AmbientCapabilities=CAP_NET_BIND_SERVICE +### +# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to +# set the following value to false to allow capabilities to be applied on Forgejo process. The following +# value if set to true sandboxes Forgejo service and prevent any processes from running with privileges +# in the host user namespace. +### +#PrivateUsers=false +### + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/ansible/roles/forgeo_install/templates/systemd.service~ b/ansible/roles/forgeo_install/templates/systemd.service~ new file mode 100644 index 0000000..8c1acf2 --- /dev/null +++ b/ansible/roles/forgeo_install/templates/systemd.service~ @@ -0,0 +1,67 @@ +[Unit] +Description=Forgejo (Beyond coding. We forge.) +After=syslog.target +After=network.target +### +# Don't forget to add the database service dependencies +### +# +#Wants=mysql.service +#After=mysql.service +# +#Wants=mariadb.service +#After=mariadb.service +# +#Wants=postgresql.service +#After=postgresql.service +# +#Wants=memcached.service +#After=memcached.service +# +#Wants=redis.service +#After=redis.service +# +### +# If using socket activation for main http/s +### +# +#After=forgejo.main.socket +#Requires=forgejo.main.socket +# + +[Service] +# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that +# LimitNOFILE=524288:524288 +RestartSec=2s +Type=simple +User=git +Group=git +WorkingDirectory=/var/lib/forgejo/ +# If using Unix socket: tells systemd to create the /run/forgejo folder, which will contain the forgejo.sock file +# (manually creating /run/forgejo doesn't work, because it would not persist across reboots) +RuntimeDirectory=forgejo +ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini +Restart=always +Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo +# If you install Git to directory prefix other than default PATH (which happens +# for example if you install other versions of Git side-to-side with +# distribution version), uncomment below line and add that prefix to PATH +# Don't forget to place git-lfs binary on the PATH below if you want to enable +# Git LFS support +#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin +# If you want to bind Forgejo to a port below 1024, uncomment +# the two values below, or use socket activation to pass Forgejo its ports as above +### +#CapabilityBoundingSet=CAP_NET_BIND_SERVICE +#AmbientCapabilities=CAP_NET_BIND_SERVICE +### +# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to +# set the following value to false to allow capabilities to be applied on Forgejo process. The following +# value if set to true sandboxes Forgejo service and prevent any processes from running with privileges +# in the host user namespace. +### +#PrivateUsers=false +### + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/ansible/roles/forgeo_install/tests/inventory b/ansible/roles/forgeo_install/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/ansible/roles/forgeo_install/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/ansible/roles/forgeo_install/tests/test.yml b/ansible/roles/forgeo_install/tests/test.yml new file mode 100644 index 0000000..e5fb5cc --- /dev/null +++ b/ansible/roles/forgeo_install/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - forgeo_install diff --git a/ansible/roles/forgeo_install/vars/main.yml b/ansible/roles/forgeo_install/vars/main.yml new file mode 100644 index 0000000..0fe9d95 --- /dev/null +++ b/ansible/roles/forgeo_install/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for forgeo_install diff --git a/ansible/roles/installSD/README.md b/ansible/roles/installSD/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/ansible/roles/installSD/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/ansible/roles/installSD/defaults/main.yml b/ansible/roles/installSD/defaults/main.yml new file mode 100644 index 0000000..3e5d620 --- /dev/null +++ b/ansible/roles/installSD/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for installSD diff --git a/ansible/roles/installSD/handlers/main.yml b/ansible/roles/installSD/handlers/main.yml new file mode 100644 index 0000000..501dec0 --- /dev/null +++ b/ansible/roles/installSD/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for installSD diff --git a/ansible/roles/installSD/meta/main.yml b/ansible/roles/installSD/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/ansible/roles/installSD/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/ansible/roles/installSD/tasks/main.yml b/ansible/roles/installSD/tasks/main.yml new file mode 100644 index 0000000..544f051 --- /dev/null +++ b/ansible/roles/installSD/tasks/main.yml @@ -0,0 +1,187 @@ +--- +# tasks file for installSD + +- name: get sdcart + set_fact: + sd: "{{ ansible_devices.keys()|select('search', 'mmcblk[0-9]') }}" + +- name: if sd is registered as USB + block: + - name: get device-list + set_fact: + device: "{{ ansible_devices.keys()|select('search', '[v,s]d[a-f]') }}" + + - name: check which device is sdcard + ansible.builtin.assert: + that: + - ansible_devices.{{ item }}.partitions is defined + - not ansible_devices.{{ item }}.host.startswith('SATA') + - ansible_devices.{{ item }}.model.startswith('Micro') #Micro muss evtl an Kartenleser angepasst werden + loop: "{{ device }}" + ignore_errors: true + register: sd_card + + - name: set harddware to sd card + set_fact: + sd: "{{ item.item }}" + when: item.failed is defined + with_items: "{{ sd_card.results }}" + when: sd | length == 0 + +- name: get mounted device list for sdcard + set_fact: + sd_mountpoint: "{{ ansible_mounts |selectattr('device', 'contains', sd ) }}" + +- block: + - name: Read device information + community.general.parted: "device=/dev/{{ sd }} unit=MiB" + register: sd_info + + - name: make sure sdcard is not mounted + ansible.posix.mount: + path: '{{ item.mount }}' + state: unmounted + loop: "{{ sd_mountpoint }}" + + - name: clear all partitions on sdcard + community.general.parted: + device: "/dev/{{ sd }}" + number: "{{ item.num }}" + state: absent + loop: "{{ sd_info.partitions }}" + + - name: Create boot partition + community.general.parted: + device: "/dev/{{ sd }}" + number: 1 + fs_type: fat32 + part_end: 250MB + flags: [ boot, lba ] + state: present + + - name: create filesytem for boot + community.general.filesystem: + dev: "/dev/{{ sd }}1" + fstype: vfat + + - name: get boot-Type + shell: 'sfdisk -l /dev/{{ sd }} | grep "W95 FAT32 (LBA)"' + register: boot_Type + + - name: check boot Type + debug: + var: boot_Type.stdout + + - name: Create root partition + parted: + device: "/dev/{{ sd }}" + number: 2 + fs_type: ext3 + part_start: 250MB + part_end: -5GiB + state: present + + - name: Create Partiton for Swap + parted: + device: "/dev/{{ sd }}" + number: 3 + fs_type: "linux-swap" + part_start: -5GiB + state: present + + - name: create filesystem for root + community.general.filesystem: + dev: "/dev/{{ sd }}2" + fstype: ext4 + force: true + + - name: create root-tempMount point + ansible.builtin.file: + path: "tempMount" + state: directory + + - name: create filesystem for swap + community.general.filesystem: + dev: "/dev/{{ sd }}3" + fstype: swap + + - name: mount root filesystems + ansible.posix.mount: + path: "tempMount" + fstype: "ext4" + src: "/dev/{{ sd }}2" + state: mounted + #state: ephemeral #new option + + - name: create boot-tempMount point + ansible.builtin.file: + path: "tempMount-boot" + state: directory + + - name: mount boot filesystems + ansible.posix.mount: + path: "tempMount-boot" + fstype: vfat + src: "/dev/{{ sd }}1" + state: mounted + #state: ephemeral # new option + become: yes + +- name: Download Archlinuxarm Image (Raspi 4) + ansible.builtin.get_url: + url: http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-armv7-latest.tar.gz + dest: /tmp + +- block: + - name: install Image to sdcard + shell: "bsdtar -xpf /tmp/ArchLinuxARM-rpi-armv7-latest.tar.gz -C tempMount && sync" + + - name: copy files from root-file system to boot on sdcard + ansible.builtin.copy: + remote_src: true + src: tempMount/boot/ + dest: tempMount-boot + become: yes + +- name: generate ssh-key + local_action: + module: community.crypto.openssh_keypair + path: ~/.ssh/pi4 + size: 521 + type: ecdsa + comment: Libelle + +- block: + - name: copy ssh-key to sdcard to alarm-user + ansible.posix.authorized_key: + user: ratten + state: present + key: "{{ lookup('file', '~/.ssh/pi4.pub') }}" + path: tempMount/home/alarm/.ssh/authorized_keys + + - name: clear boot-files under root in sdcard + file: + path: "{{ item }}" + state: absent + with_fileglob: + - "tempMount/boot/*" + + - name: umount sdcard + ansible.posix.mount: + path: "{{ item }}" + state: absent + with_items: + - "tempMount" + - "tempMount-boot" + + - name: clear mountpoints + file: + path: "{{ item }}" + state: absent + with_items: + - "tempMount" + - "tempMount-boot" + become: yes + +- debug: + msg: "You can now insert the sdcard in the pi an login with ssh with the root user to finish installation or use the next playbook" diff --git a/ansible/roles/installSD/tests/inventory b/ansible/roles/installSD/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/ansible/roles/installSD/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/ansible/roles/installSD/tests/test.yml b/ansible/roles/installSD/tests/test.yml new file mode 100644 index 0000000..83877e5 --- /dev/null +++ b/ansible/roles/installSD/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - installSD diff --git a/ansible/roles/installSD/vars/main.yml b/ansible/roles/installSD/vars/main.yml new file mode 100644 index 0000000..a06fd60 --- /dev/null +++ b/ansible/roles/installSD/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for installSD diff --git a/ansible/roles/raspi_Vortrag/README.md b/ansible/roles/raspi_Vortrag/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/README.md @@ -0,0 +1,38 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/ansible/roles/raspi_Vortrag/defaults/main.yml b/ansible/roles/raspi_Vortrag/defaults/main.yml new file mode 100644 index 0000000..d5b9c7e --- /dev/null +++ b/ansible/roles/raspi_Vortrag/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for raspi_Vortrag diff --git a/ansible/roles/raspi_Vortrag/handlers/main.yml b/ansible/roles/raspi_Vortrag/handlers/main.yml new file mode 100644 index 0000000..46b2085 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for raspi_Vortrag diff --git a/ansible/roles/raspi_Vortrag/meta/main.yml b/ansible/roles/raspi_Vortrag/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/ansible/roles/raspi_Vortrag/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/ansible/roles/raspi_Vortrag/tasks/main.yml b/ansible/roles/raspi_Vortrag/tasks/main.yml new file mode 100644 index 0000000..d15c337 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/tasks/main.yml @@ -0,0 +1,69 @@ +--- +# tasks file for raspi_Vortrag + +- name: add User CLT + ansible.builtin.user: + update_password: on_create + name: "{{ item.user }}" + shell: /bin/rbash + password: "{{ item.pass | password_hash('sha512') }}" + state: present + with_items: + - user: "dove" + pass: "IPoAC" + +- name: install packages for hostadp and radvd + community.general.pacman: + name: "{{ item }}" + state: latest + with_items: + - "hostapd" + - "radvd" + - "git" + +- name: add hostapd conf + ansible.builtin.template: + src: hostapd + dest: /etc/hostapd/hostapd.conf + +- name: enable hostabd service + ansible.builtin.service: + #ansible.builtin.systemd_service: + name: hostapd + enabled: true + state: started + +- name: add radvd conf + ansible.builtin.template: + src: radvd + dest: /etc/radvd.conf + +- name: activate ipv6-Forwarding + ansible.posix.sysctl: + name: "{{ item }}" + value: '1' + sysctl_set: true + state: present + reload: true + with_items: + - net.ipv6.conf.all.forwarding + - net.ipv6.conf.default.forwarding + - net.ipv6.conf.all.accept_ra + - net.ipv6.conf.default.accept_ra + +- name: configure static ipv6-address for wlan and eth + ansible.builtin.template: + dest: "/etc/systemd/network/{{ item.interface }}.network" + src: network-file.j2 + with_items: + - { ip: "fd00:feed:c0ff:ee00:e65f:1ff:fe46:edc9/64", interface: wlan0 } + - { ip: "fd00:feed:c0ff:ee01:e65f:1ff:fe46:edc8/64" , interface: end0 } + +- name: start and enable services + ansible.builtin.systemd: + state: started + enabled: true + name: "{{ item }}" + with_items: + - radvd + - systemd-networkd diff --git a/ansible/roles/raspi_Vortrag/templates/hostapd b/ansible/roles/raspi_Vortrag/templates/hostapd new file mode 100644 index 0000000..8f61be6 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/hostapd @@ -0,0 +1,10 @@ +interface=wlan0 +#driver=nl80211 +ssid=Brieftauben-Wlan +country_code=DE +macaddr_acl=0 +channel=1 +ieee80211d=1 +wmm_enabled=1 +hw_mode=g +#multicast_to_unicast=1 diff --git a/ansible/roles/raspi_Vortrag/templates/hostapd~ b/ansible/roles/raspi_Vortrag/templates/hostapd~ new file mode 100644 index 0000000..b358db6 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/hostapd~ @@ -0,0 +1,10 @@ +interface=wlan0 +#driver=nl80211 +ssid=Brieftauben-Wlan +country_code=DE +macaddr_acl=0 +channel=0 +ieee80211d=1 +wmm_enabled=1 +hw_mode=g +multicast_to_unicast=1 diff --git a/ansible/roles/raspi_Vortrag/templates/network-file.j2 b/ansible/roles/raspi_Vortrag/templates/network-file.j2 new file mode 100644 index 0000000..a6af28e --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/network-file.j2 @@ -0,0 +1,13 @@ +[Match] +Name={{ item.interface }} + +[Network] +Address={{ item.ip }} +IPForward=ipv6 +IPMasquerade=ipv6 +IPv6ProxyNDP=yes + +{% if item.interface == 'end0' %} +DHCP=yes +DNSSEC=no +{% endif %} \ No newline at end of file diff --git a/ansible/roles/raspi_Vortrag/templates/network-file.j2~ b/ansible/roles/raspi_Vortrag/templates/network-file.j2~ new file mode 100644 index 0000000..f996b1f --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/network-file.j2~ @@ -0,0 +1,13 @@ +[Match] +Name={{ item.interface }} + +[Network] +Address={{ item.ip }} +IPForward=ipv6 +IPMasquerade=ipv6 +IPv6ProxyNDP=yes + +{% if item.interface == end0 %} +DHCP=yes +DNSSEC=no +{% endif %} \ No newline at end of file diff --git a/ansible/roles/raspi_Vortrag/templates/radvd b/ansible/roles/raspi_Vortrag/templates/radvd new file mode 100644 index 0000000..4a600fd --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/radvd @@ -0,0 +1,25 @@ +interface wlan0 +{ + AdvSendAdvert on; #sende das RA + MaxRtrAdvInterval 300; + MinRtrAdvInterval 30; + prefix fd00:feed:c0ff:ee00::/64 #ULA + { + AdvOnLink off; + AdvAutonomous on; #prefix kann zur autoAdressKonfiguration benutzt werden + AdvRouterAddr on; #Adresse des Interfaces wird gesendet für mobil geräte wichtig + }; +}; + +interface end0 +{ + AdvSendAdvert on; #sende das RA + MaxRtrAdvInterval 300; + MinRtrAdvInterval 30; + prefix fd00:feed:c0ff:ee01::/64 #ULA darf nicht das gleich Netz wie oben sein! sonst kommt das Netzwerk durcheinander + { + AdvOnLink off; + AdvAutonomous on; #prefix kann zur autoAdressKonfiguration benutzt werden + AdvRouterAddr on; #Adresse des Interfaces wird gesendet für mobil geräte wichtig + }; +}; diff --git a/ansible/roles/raspi_Vortrag/templates/radvd~ b/ansible/roles/raspi_Vortrag/templates/radvd~ new file mode 100644 index 0000000..9721108 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/templates/radvd~ @@ -0,0 +1,25 @@ +interface wlan0 +{ + AdvSendAdvert on; #sende das RA + MaxRtrAdvInterval 300; + MinRtrAdvInterval 30; + prefix fd00:feed:c0ff:ee00::/64 #ULA + { + AdvOnLink off; + AdvAutonomous on; #prefix kann zur autoAdressKonfiguration benutzt werden + AdvRouterAddr on; #Adresse des Interfaces wird gesendet für mobil geräte wichtig + }; +}; + +interface end0 +{ + AdvSendAdvert on; #sende das RA + MaxRtrAdvInterval 300; + MinRtrAdvInterval 30; + prefix fd00:feed:c0ff:ee01::/64 #ULA darf nicht das gleich Netz wie oben sein! + { + AdvOnLink off; + AdvAutonomous on; #prefix kann zur autoAdressKonfiguration benutzt werden + AdvRouterAddr on; #Adresse des Interfaces wird gesendet für mobil geräte wichtig + }; +}; diff --git a/ansible/roles/raspi_Vortrag/tests/inventory b/ansible/roles/raspi_Vortrag/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/ansible/roles/raspi_Vortrag/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/ansible/roles/raspi_Vortrag/tests/test.yml b/ansible/roles/raspi_Vortrag/tests/test.yml new file mode 100644 index 0000000..e581310 --- /dev/null +++ b/ansible/roles/raspi_Vortrag/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - raspi_Vortrag diff --git a/ansible/roles/raspi_Vortrag/vars/main.yml b/ansible/roles/raspi_Vortrag/vars/main.yml new file mode 100644 index 0000000..d875c9c --- /dev/null +++ b/ansible/roles/raspi_Vortrag/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for raspi_Vortrag