\documentclass[12pt]{beamer}
\usepackage{amsmath}
\usepackage{url}
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

% Manual syntax highlighting
\newcommand{\synfunc}   [1]{\color{blue!50!black}#1\color{black}}
\newcommand{\synstr}    [1]{\color{red!50!black}#1\color{black}}
\newcommand{\synvar}    [1]{\color{purple!50!black}#1\color{black}}
\newcommand{\synclass}  [1]{\color{green!50!black}#1\color{black}}
\newcommand{\syncomment}[1]{\color{blue!20!black}#1\color{black}}
\newcommand{\syncool}   [1]{\color{beamer@blendedblue}#1\color{black}}
\newcommand{\synoder}      {\ \ \color{black}$\vee$\ \ }
\newcommand{\hr}        {\rule[4pt]{\textwidth}{0.1pt}\\}

\title{NAT-Umgehung über UDP}
\author{Ingo Blechschmidt \\\texttt{<iblech@web.de>}}
\institute{LUGA}
\date{8. Juni 2005}

\usetheme{Warsaw}
\usecolortheme{seahorse}
\setbeamercovered{transparent}

\begin{document}

\frame{\titlepage}

\frame[t]{
  \frametitle{Inhalt}
  \tableofcontents
}

\section{Problem}
\frame[t]{
  \frametitle{Problem}

  \begin{itemize}
    \item Wunsch: Bidirektionale Verbindung zwischen zwei sich hinter
          NAT-Gateways befindlichen Computern
    \item Problem: Regelwerk der Firewalls: \\
          "`Erlaube nur Verbindungen von außen, wenn sie von innen initiiert
          wurden."'
    \item Aber wie eine Verbindung aufbauen, ohne öffentliche IP?
  \end{itemize}
}

\section{L"osung}
\frame[t]{
  \frametitle{Lösung}

  \begin{itemize}
    \item Versendung von UDP-Paketen von A an den NAT-Gateway von B
    \item Blocken dieser Pakete durch die Firewall von B (klar)
    \pause
    \item Versendung von UDP-Paketen von B an den NAT-Gateway von A
    \item Annahme dieser Pakete durch die Firewall von A, da Auffassung
          als Antwort auf die durch A anfangs versendeten Pakete
    \item Von nun an: Paketannahme bei beiden Firewalls (!)
    \pause
    \item Bereitstellung von IP mittels PPP-über-unseren-UDP-Tunnel
  \end{itemize}
}

\section{Proof-of-Concept-Implementierung}
\subsection{Aufbau}
\frame[t]{
  \frametitle{Aufbau der Proof-of-Concept-Implementierung}

  \begin{enumerate}
    \item Gegenseitiges Senden von "`Müll"'-Paketen (zum "`Austricksen"' der
          Firewalls)
    \item Gegenseitiges Senden eines Acknowledgement-Pakets
    \item Warten auf ACK-Paket
    \item Entweder Binden von \texttt{STDIN} und \texttt{STDOUT} an den Socket
          und \text{exec()} eines Programms oder \\
          Relayen von Tastatureingaben zur Gegenseite und umgekehrt
  \end{enumerate}
}

\subsection{Beispielanwendung}
\frame[t]{
  \frametitle{Beispielanwendung}

  \texttt{%
    root@A \# \textbf{./nat-udp.pl \textbackslash\\
    \ \ --port=42000 \textbackslash\\
    \ \ --peer=NAT-Gateway-von-B \textbackslash\\
    \ \ --cmd="pppd updetach noauth passive notty \textbackslash\\
    \ \ \ \ \ \ \ \ \ ipparam vpn 172.16.0.1:172.16.0.2"\ \textbackslash\\
    \ \ --window=10}\\
    \ \\
    root@B \# \textbf{./nat-udp.pl \textbackslash\\
    \ \ --port=42000 \textbackslash\\
    \ \ --peer=NAT-Gateway-von-A \textbackslash\\
    \ \ --cmd="pppd nodetach notty noauth"\ \textbackslash\\
    \ \ --window=10}\\
  }
}

\section{Quellen}
\frame[t]{
  \frametitle{Quellen}

  \begin{itemize}
    \item \texttt{\#parrot} auf \texttt{irc.perl.org} (Ursprüngliche Idee)
    \item \url{http://www.tldp.org/HOWTO/ppp-ssh/configclient.html\#AEN305} (pppd-Parameter)
    \item \url{http://m19s28.vlinux.de/iblech/nat-udp.pl} (Implementierung)
  \end{itemize}
}

\end{document}
