<?xml version='1.0'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book lang="de">
  <!-- NOTE: TO GET A TEXT VERSION FROM THIS, TYPE "xmlto xhtml HOWTO_de.xml"  -->
  <title>HIPL Nutzerdokumentation</title>
  <chapter>
    <title>Warnung</title>
    <para>
      Der HIPL Quellcode ist aktuell in einem sehr experimentellem Stadium und 
      ist auf eigene Verantwortung zu nutzen! Zum Testen von HIPL sollte 
      VMWare, Xen oder User Mode Linux verwendet werden. 
      </para>
      <para>
        Die deutsche Überstzung weicht mittlerweile an einzelnen Stellen vom
        Original ab. Neben einer Umstruktutierung wurden auch einige Neuerungen
        eingearbeitet. Im Zweifel sei hiermit auf das Original verwiesen. 
      </para>
    </chapter>
  <chapter>
    <title>Software Anforderungen</title>
    <para>
     Es wird empfohlen die neuesten Quellen zu verwenden und selbst zu kompilieren.
     Als Alternative k&ouml;nnen binäre Pakete von http://hipl.hiit.fi/hipl/release/ 
     geladen werden. 
     Falls Sie Bugs melden wollen verwenden Sie bitte die neuesten Quellen
     anstelle der binären Pakete. Denn es k&ouml;nnten die Fehler bereits repariert
     worden sein. Des weiteren finden die eine auf Knoppix basierende Live CD
     auf der HIPL Webseite.
    </para>
    <para>
      Erste Bedingung ist grundlegende Kenntnis im kompilieren des Linux Kernels.
      Schlagen Sie unter <filename>linux/README</filename> für weitere Anweisungen nach. 
    </para>
    <para>
      Sie ben&ouml;tigen folgende Software um HIPL zu bauen und zu betreiben:
    </para>
    <itemizedlist>
    <title>Zwingende Anforderungen</title>
      <listitem>
    <para>
      Linux Betriebssystem
    </para>
      </listitem>
      <listitem>
    <para>
      Einen BEET patched Linux 2.6 Kernel mit Unterstützung für:
      <simplelist type='vert'>
      <member><function>dummy device</function></member>
      <member><function>XFRM_USER</function></member>
      <member><function>IPv6</function></member>
      <member><function>IPsec</function></member>
      <member><function>AES, 3DES, SHA1</function></member>
       </simplelist>

      Diese sollten als Module kompiliert werden, k&ouml;nnen aber auch fest
      integriert sein.
      Folgende Schalter müssen aktiviert sein:
      <simplelist type='vert'>
      <member><function>CONFIG_IP_ADVANCED_ROUTER</function></member>
      <member><function>CONFIG_IP_MULTIPLE_TABLES</function></member>
       </simplelist>

    </para>
      </listitem>
      <listitem>
    <para>
      OpenSSL-Bibiliothek und Header-Dateien
    </para>
      </listitem>
      <listitem>
    <para>
      GNU make
    </para>
      </listitem>
      <listitem>
    <para>
      die neuesten Versionen von: autoconf, automake, autoreconf and libtool
    </para>
      </listitem>
      <listitem>
    <para>
      iproute inkl. Header-Dateien
    </para>
      </listitem>
      <listitem>
    <para>
      wxgtk 2.6.2 und libgtk-2.x Bibiliothek und Header-Dateien
    </para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
    <title>Optionale Anforderungen</title>
      <listitem>
    <para>
      iputils-ping (oder netkit-ping): ping, ping6
    </para>
      </listitem>
      <listitem>
    <para>
      ipsec-tools: setkey
    </para>
      </listitem>
      <listitem>
    <para>
      iptables Userspace Tools und IPv6 netfilter im Kernel
              (nur zum Testen der HIP Firewall)
    </para>
      </listitem>
      <listitem>
    <para>
      iptables Header-Dateien (HIP Firewall)
    </para>
      </listitem>
      <listitem>
    <para>
      glib (www.gtk.org) und Header-Dateien (HIP Firewall)
    </para>
      </listitem>
      <listitem>
    <para>
      netcat6
    </para>
      </listitem>
      <listitem>
    <para>
      latex, dvips, dvipdf, fig2dev, doxygen 
     (zum Erzeugen der HIPL Dokumentation aus den Quellen)
    </para>
      </listitem>
      <listitem>
    <para>
      java Kompiler für "jip" (java hip resolver) wenn Sie
      Java-Programme mit HIP funktionalität schreiben wollen
    </para>
      </listitem>
  
    <listitem>
    <para>Netzwerk Anforderungen</para>
    <itemizedlist>
      <listitem>
           <para>
              Stellen Sie sicher, dass die Firewall der Hosts HIP und ESP
              Pakete nicht blockiert (versuche <function>iptables -L</function>). Als
              provisorische L&ouml;sung versuchen Sie den NAT-Modus auf den Hosts 
              zu aktivieren.
            </para>
        </listitem>
        <listitem>
            <para>
            Stellen Sie sichern das Router den HIP Datenverkehr nicht blockieren.
            Falls eine Firewall ziwschen den Hosts betrieben wird, so k&ouml;nnten
            der HIP oder ESP Pakete blockiert werden.
            Falls NAT zwischen den Maschinen betrieben wird, so k&ouml;nnte auch
            dies den Datenverkehr blockieren.
            Entweder stellen Sie sichern, die Router erlaben HIP und ESP Pakete
            oder Sie veruschen NAT auf den End-Knoten zu verwenden.
            </para>
        </listitem>
      </itemizedlist>

      </listitem>
      </itemizedlist>
  </chapter>

  <chapter>
    <title>HIPL Dokumentation</title>

    <sect1>
    <title>HIPL Dokumentation erzeugen</title>
    <para>
        Architektur Dokumentation:
        <programlisting format="linespecific">
        % cd hipl/doc
        % make design_choices.dvi design_choices.ps design_choices.pdf
        </programlisting>
    </para>

    <para>
        Quellcode Dokumentation:
        <programlisting format="linespecific">
	 % cd hipl/doc
	 % doxygen
        </programlisting>
    </para>
    </sect1>

    <sect1>
    <title>HIPL API Dokumentation</title>
      <para>Die Dokumentation zur HIPL API finden Sie unter: http://hipl.hiit.fi/hipl/hip-native-api-final.pdf
      (Anmerkung: dieses API-Dokument ist nicht mehr aktuell, achten Sie auf
      Änderungen in den Schnittstellen und Variablen.)
      </para>
    </sect1>

  </chapter>


  <chapter>
    <title>Software installieren</title>
    <para>
      Um HIPL einsetzen zu k&ouml;nnen muss zum Einen der Kernel mit dem
      BEET-Patch versehen werden und zum Anderen das hipsock-Kernelmodul und
      die HIP-Bibliotheken kompiliert werden. 
    </para>

    <sect1>
    <title>Kernel kompilieren</title>
    
    <para>
      Falls Sie zuvor noch keinen Kernel kompiliert haben konsultieren Sie 
      vorher <filename>linux/README</filename>. Wir haben ein paar Konfigurationsdateien als 
      Beispiel in <filename>hipl/test/configs</filename> für "typische" Systeme hinterlegt.
      Sie k&ouml;nnen diese Vorlagen als Grundlage für Ihre eignen
      Systemkonfigurationen verwenden und anpassen. Lesen Sie zuvor 
      <filename>hipl/test/configs/README</filename>.
    </para>
    <para>Der Kernel-Patch:
          Die Patches aus dem Verzeichnis patches/kernel/KERNEL_VERSION sind
          dem entsprechenden Kernel beizufügen um das hipsock Modul verwenden
          zu k&ouml;nnen.
        <programlisting format="linespecific">
          cd /usr/src/linux
          cat patches/kernel/KERNEL_VERSION/PATCH_FILE | patch -p1
        </programlisting>
    </para>
    <para>Den gepatcheten Kernel neu kompilieren. Ins <filename>hipl/hipsock</filename> Verzeichnis
          springen und Kernelmodul mit make kompilieren.
          Das Makefile setzt voraus, dass sich die Kernelquellen in
          <filename>/usr/src/linux</filename> befinden. Anderenfalls kann mit <function>make
          LINUX=/path/to/linux/</function> das entsprechende Verzeichnis angegeben werden.
    </para>
    <para>
      Die 2.6er Kernel-Serie sollte mit gcc 2.9x und 3.x kompatibel sein. Wir
      empfehlen die letztere zu verwenden. (Keine Angaben zu gcc 4.x)
    </para>
    <para>
      Konfigurieren Sie den Linux Kernel mit folgenden Optionen:
    </para>
    <programlisting format="linespecific">
      &nbsp;Legende:
                 [*] eingebaut
                 [ ] nicht verwendet
                 &lt;M&gt; Modul erstellen
                 &lt; &gt; Modul geeignet
    </programlisting>
    <para>
      Optionen im Ablauf

        <programlisting format="linespecific">
              &nbsp;[*] Prompt for development and/or incomplete code/drivers
              &nbsp;Processor type and features
                  &nbsp;Networking ---&gt; Networking options ---&gt;
                     &nbsp;&lt;M&gt; IPsec user configuration interface
                     &nbsp;[*] TCP/IP networking
                     &nbsp;&lt;*&gt; The IPv6 protocol
                     &nbsp;&lt;*&gt; IPv6: IPsec BEET mode
                  &nbsp;Cryptographic options ---&gt;   
                     &nbsp;&lt;*&gt; IPv6: Null algorithms
        </programlisting>
    </para>

    <para>
      IPsec, IPv6 security support, SHA1 und 3DES solten automatisch aktiviert
      werden nachdem sie HIP ausgewählt haben. Wir empfehlen, dass Sie HIP als 
      Kernel-Modul kompilieren und IPv6 fest integrieren.
    </para>
    <para>
      Der hipd Daemon versucht die notwendigen module automatisch zu laden. 
      Sie sollten die <filename>/etc/modules</filename> dem entsprechend konfigurieren.
      Fügen Sie 
        <programlisting format="linespecific">
          "xfrm6_tunnel",
          "xfrm4_tunnel",
          "xfrm_user",
          "dummy",
          "esp6", 
          "esp4", 
          "ipv6", 
          "aes", 
          "crypto_null", und 
          "des"
        </programlisting>
       in <filename>/etc/modules</filename> ein.
    </para>

    <para>Der BEET-Patch hat in den Vanilla-Kernel ab 2.6.19-rc2 einzu
          gehalten. Ein Patches des Kernel sollte somit entfallen.
          Allerdings ist der Patch für 2.6.19-rc2 nicht ausreichend. Es ist
          z.B. das Limit für die Protokollnummer weiterhin 32 und nicht
          33. Damit kann HIP mit Protokollnummer 32 nicht aktiviert
          werden.
    </para>
    
  </sect1>

  <sect1>
    <title>Kompilieren der Userspace Anwendungen</title>
    <para>
      Nachdem Sie den Kernel erfolgreich kompiliert, installiert und beide
      Systeme neu gestartet haben müssen Sie die Userspace Anwendungen 
      kompilieren um HIP zu nutzen. Beginnen wir mit dem springen ins obere 
      HIPL Verzeichnis:
    <programlisting>cd hipl</programlisting>
      </para>
    <para>
      Wenn die Datei autogen.sh existiert führen Sie diese aus:
       <programlisting>./autogen.sh</programlisting>
    </para>
    <para>
      Als nächstes bauen Sie hipd, libinet6, tools und Programme im 
      Verzeichnis test wie folgt:
    <programlisting>./configure &amp;&amp; make</programlisting>
    </para>
    <para>
      Es ist nicht notwendig <function>make install</function> auszuführen. Sie k&ouml;nnen die
      Anwendungen direkt aus deren Verzeichnis starten. Beachten Sie, dass
      zur Zeit vom Hauptverzeichnis nicht die Java-Bibiliotheken oder Telnet
      erstellt wird. Folgen Sie den späteren Anleitungen um dies zu erstellen.
    </para>
    <para>
      Einige Eigenschaften, wie HIP-Firewall, werden nicht automatisch mit
      erstellt.
      Führe <function>./configure --enable-FEATURE</function> aus um einzelne zu aktivieren.
      <function>./configure --help</function> liefert eine vollständige Liste der Optionen.
    </para>
  </sect1>

  <sect1>
    <title>HIP Socket Handler Kernel Modul</title>
    <para>Der HIP Socket Handler is eine Komponente der HIPL HIP
	  Implementation. Es wir zum abfangen der HIP Socket API Aufrufe
          genutzt.  Das hipsock Kernel Modul wird zum registrieren der neuen
          Protokollfamilie und zum handhaben der Socket Systemaufrufe für genau
          diese Protokollfamilie verwendet.
    </para>
    <para>Mit <function>insmod hipsock.ko</function> laden Sie das Modul zum laufenden Kernel.
          Prüfen Sie Systemmeldungen in <function>dmesg</function>. Mit 
          <function>rmmod hipsock.ko</function> kann das Modul wieder entladen werden. 
          Falls Sie die Fehlermeldung <function>insmod: error inserting
          'hipsock.ko': -1 Invalid module format</function> erhalten muss ggf. das Verzeichnis
          zu den Kernelquellen gesetzt werden. Prüfen Sie auch ob der BEET-Kernelpatch
          richtig installiert wurde.
     </para>
   </sect1>

  <sect1>
    <title>Namensaufl&ouml;sung</title>
    <para>In der Datei <filename>/etc/hip/hosts</filename> werden die Hostnamen
          auf deren HIT/LSI abgebildet. Es m&uuml;ssen also die HITs der
          entfernten Hosts und deren Host-/Domainnamen eingetragen werden. Jede
          Zeile enthält HIT und durch Leerzeichen (Whitespaces) gefolgt den Hostnamen.

          Es gen&uuml;gt die HITs der Zielhosts dort einzutragen. Ein Beispiel
          für den Host crash, welcher eine Verbindung zu oops initiieren soll:

        <programlisting format="linespecific">
          # cat /etc/hip/hosts
          2001:78:e6df:1f27:b0f4:855a:1798:1931      oops
          2001:73:3e7d:e72e:7f6e:e25d:d979:c284      sip
        </programlisting>

          Die HITs f&uuml;r crash selbst k&ouml;nnen ebenfalls in der Datei
          stehen. Somit braucht für alle bekannten Hosts nur eine Version der
          Datei gepflegt werden.
          Im sp&auml;ter dargestellten Opportunistic Mode kann ein Eintrag in
          <filename>/etc/hip/hosts</filename> entfallen.
     </para>
      <para>
          Ein Host verwendet i.d.R. mehrere HITs gleichzeitig. Zur Zeit
          allerdings versagt der Dienst wenn auf verschiedene HITs eines
          Dienstes nacheinander folgend Verbindung aufgenommen wird. Die Daten
          des ersten Durchlaufs aller HIP-Verbindungen werden noch übertagen,
          eine zweite, nachfolgende Verbindung ist dann aber nicht mehr
          m&ouml;glich.
          Tragen Sie deshalb nur eine HIT je Ziel in
          <filename>/etc/hip/hosts</filename> ein bzw. verwenden Sie das '#'
          Zeichen um einzelne HITs auszukommentieren.
      </para>

   </sect1>
  </chapter>

  <chapter>
    <title>HIP-Verbindungen testen</title>

   <sect1>
    <title>HIP-Verbindung zwischen zwei Hosts testen</title>
    <para>
      Die HIPL-Entwickler verwenden zwei Maschienen unter den Bezeichnungen 
      crash (3ffe::1) und oops (3ffe::2). Diese Namen werden als Beispiele 
      auch in diesem Dokument verwendet. Es ist auch m&ouml;glich IPv4-Adressen 
      "auf dem Kabel" zu verwenden, aber die Anwendungen verwenden aktuell nur
      IPv6.
      </para>
    <para>
      Wir erwarten, dass Sie zwei Hosts mit den Namen crash und oops zum Testen
      von HIP verwenden. Sie sollten diese Kommandos auf den zu testenden Hosts 
      als Super-User (root) starten.
      <function>conntest-client-gai</function> und
      <function>conntest-server</function> k&ouml;nnen auch unter nicht-Root
      Rechten laufen. Allerdings ist die Verwendung von Ports kleiner 1024 Root
      vorbehalten. 
    </para>
    <para>
      oops:
        <programlisting format="linespecific">
          ifconfig eth0 inet6 add 3ffe::2/64
          cd irgendwo/hipl
          hipd/hipd # (für Daemon Modus verwende -b Schalter)
          test/conntest-server tcp 1111
        </programlisting>
    </para>
    <para>
      Crash wird die Verbindng initiieren, deshalb muss die hosts Datei auf
      crash anpassen (die Verwendung von IPv4 ist auch m&ouml;glich):
    </para>
    <para>
      crash:
        <programlisting format="linespecific">
          /etc/hosts:
          3ffe::2 oops

          /etc/hip/hosts:
          HIT_OF_OOPS oops
        </programlisting>
    </para>

    <para>
      Sie gewinnen die <function>HIT_OF_OOPS</function> aus der inet6 Adresse
      auf oops (<function>ifconfig dummy0</function>)
        <programlisting format="linespecific">
          ifconfig eth0 inet6 add 3ffe::1/64
          cd irgendwo/hipl
          hipd/hipd
          test/conntest-client-gai oops tcp 1111

          &nbsp;&lt;geben Sie beliebigen Text auf crash ein, drücken Enter und Strg+d.&gt;
        </programlisting>
       Anschließend sollten Sie den Text als Ausgabe auf den Hosts sehen
    </para>

    <para>
      Es wird eine Verbindung zwischen den beiden Hosts  aufgebaut (wenn Sie
      virtuelle maschinen einsetzen, kann dies einige Zeit in anspruch nehmen).
      Sie sollten <function>HIT_OF_XXX</function> mit den HITs des Hosts ersetzten. Der hip Daemon
      lädt (und erzeugt falls n&ouml;tig) die Host Identitäten automatisch aus
      <filename>/etc/hip/</filename>.
      Die HITs des lokalem Hosts finden sie durch <function>ifconfig dummy0</function> oder <function>ip
      addr show dummy0</function> heraus.
    </para>
    <para>
      Das Abbilden zwischen HITs und IP-Adressen geschieht gew&ouml;hnlich
      automatisch unter Verwendung der hosts Dateien. Eine manuelle Konfiguration
      ist m&ouml;glich, aber nicht n&ouml;tig:
        <programlisting format="linespecific">
          tools/hipconf add map PEER_HIT PEER_IP
        </programlisting>
    </para>
    <para>
      Es ist auch m&ouml;glich DNS und OpenDHT für die Abbildung zu verwenden. Lesen
      Sie dazu den entsprechendne Abschnitt dieses Dokumentes.
    </para>
    <para>
      IPv6 Link Local Adressen werden nicht gut unterstützt, bitte verzichten
      Sie auf dessen Verwendung. Der Grund dafür ist die Schwierigkeit ob die
      Gegenstelle am gleichen lokalem Netzwerk verbunden ist oder nicht.
      </para>
    <para>
      Lesen Sie die log Meldungen für Informationen über das Ergebnis des HIP
      base exchange und USAGI IPsec Verhandlungen. Tcpdump oder ethereal sind
      gute Werkzeuge zur Überwachung des Datenverkehrs während des base
      exchange.
      Verwende <function>tcpdump -n -i any esp or proto 253 or port 50500</function> um
      ausschließlich HIP Daten aufzufangen.
    </para>
    <para>
      Es gibt darüber hinaus ein Programm <function>hip/test/hipsetup</function> für den schnellen
      base exchange Test. Starten Sie es ohne Argumente um eine Anleitung zur
      Verwendung zu erhalten.
    </para>
  </sect1>

  <sect1>
    <title>Manuelles Schließen der HIP SA</title>
     <para>
      Sie k&ouml;nnen hipconf verwenden um HIP Security Associations (SA) manuell zu
      schließen. Verwenden Sie <function>hipconf hip rst all</function> um alle SAs zu schließen.
     </para>
  </sect1>

  <sect1>
    <title>Handover testen</title>
    <para>
      Der Handover Code basiert auf draft-nikander-hip-mm-00 Spezification. 
      Nicht alle dieser Funktionen sind zur Zeit implementiert und die Qualität
      des Codes ist weit entfernt von Schußsicher.
    </para>
    <para>
      Ein einfaches Handover Test gibt folgendes Beispiel. Es wird
      vorausgesetzt, das der base exchange zwischen beiden Hosts bereits
      etabliert ist. Ausserdem ben&ouml;tigen Sie des Programm nc6 (www.deepspace6.net/projects/netcat6.html)
      Das Beispiel verwendet IPv6 aber IPv4 ist auch m&ouml;glich.
    </para>
    <para>
      &nbsp;&lt;als erstes wird eine HIP-Verbindung, wie in den vorherigen
      Kapiteln aufgeführt, aufgebaut&gt;
        <programlisting format="linespecific">
          oops  # nc6 -l -p 12345
          crash # nc6 &lt;HIT_OF_OOPS&gt; 12345
          crash # &lt;beliebigen Text eingeben Enter drücken&gt;
          oops  # &lt;der auf crash eingegebene Text sollte auf oops Konsole erscheinen&gt;
          crash # ifconfig eth0 inet6 del 3ffe::1/64
          crash # ifconfig eth0 inet6 add 3ffe::3/64
          crash # &lt;beliebigen Text eingeben Enter drücken&gt;
          oops  # &lt;der auf crash eingegebene Text sollte auf oops Konsole erscheinen&gt;
        </programlisting>
    </para>

    <para>
       IPv6 verwendet von Haus aus mehrere IP Adressen auf einem Interface. Um
       einen nahtlosen &Uuml;bergang zu erreichen kann die Netzadresse des
       zuk&uuml;nftigen Netzes konfiguriert werden bevor die alte IPv6 Adresse
       gel&ouml;scht wird.
       Diese Methode ist vorallem bei den Spezifikationen zur
       G&uuml;ltigkeitdauer von IPv6 Adressen angedacht worden. Das Verfahren
       sollte dann wie folgt verlaufen:
        <programlisting format="linespecific">
          oops  # nc6 -l -p 12345
          crash # nc6 &lt;HIT_OF_OOPS&gt; 12345
          crash # &lt;beliebigen Text eingeben Enter drücken&gt;
          oops  # &lt;der auf crash eingegebene Text sollte auf oops Konsole erscheinen&gt;
          crash # ifconfig eth0 inet6 add 3ffe::3/64
          crash # ifconfig eth0 inet6 del 3ffe::1/64
          crash # &lt;beliebigen Text eingeben Enter drücken&gt;
          oops  # &lt;der auf crash eingegebene Text sollte auf oops Konsole erscheinen&gt;
        </programlisting>
        Es sind also hinzuf&uuml;gen und l&ouml;schen von IP Adressen
        vertauscht.
        Leider unterst&uuml;tzt HIPL dieses Verhalten noch nicht. 
    </para>

    <para>
      Verwenden Sie keine Link-Local-Adressen für mobilitäts Szenarien, ausser
      Sie wissen was Sie tun! Wenn Sie zum Beispiel nach Problemen beim Aufbau
      von HIP SAs zwischen zwei mobilen und korrespondierenden Knoten fragen,
      welche Link-Local-Adressen verwenden und in ein anderes Netzwerk
      wechseln. Die Umadressierung schlägt fehl, da jeder Knoten keinen Weg
      kennt den anderen zu erreichen.
    </para>
    <para>
        Stellen Sie sicher die Route für die neue Adresse hinzuzufügen sobald
        die neue Adresse hinzugefügt wird. Wenn die Route fehlt werden die
        Update Pakete nicht gesendet. Der Daemon wartet für ein paar Sekunden
        auf ein Update für die Neuübertragung.
    </para>
   </sect1>
  </chapter>

  <chapter>
    <title>Kompilieren von Java Anwendungen</title>
    <para>
      Die HIPL Software enthält ausserdem eine Java-Wrapper-Bibiliothek um
      Zugriff auf den libinet6 Resolver zu erm&ouml;glichen. Die Bibiliothek heißt
      "jip" und befindet sich unter "path-to-hipl/jip". Die Verwendung der Java
      Bibliothek setzt einen funktionierenden HIP Socket Handler, wie bereits
      beschieben, voraus. 
      </para>
    <para>
      Sie ben&ouml;tigen entweder Blackdown oder Sun java jdk 1.4.x oder neuer zum
      Kompilieren von jip. Kompilieren mit Java 1.3 wird nicht funktionieren. 
      Die Installation geht von Blackdown 1.4 JDK aus. Wenn Sie SUN JDK
      verwenden setzen sie die Umgebungsvariable "JAVA_HOME" auf Ihr Java 
      Installationsverzeichnis.
    </para>
    <para>
      Kompilieren von libinet6.so und jip:
        <programlisting format="linespecific">
          # cd path-to-hipl/libinet6
          # cd path-to-hipl/libinet6
          # make libinet6.so
          # cd ../jip
          # make
        </programlisting>

    </para>

    <para>
      Libinet6 wird nun automatisch mit kompiliert. Das Ergebnis jip.jar, des
      letzen Kommandos, k&ouml;nnen sie verwenden um HIP in ihren Java-Anwendungen
      zu erm&ouml;glichen.  Um die Javadoc Dokumentation zu erstellen rufen Sie
      zusätzlich <function>make apidoc</function> auf. Die Dokumentation finden sie anschließend
      unter <filename>path-to-hipl/doc/jip-api</filename>.
    </para>
    <para>
      Es befinden sich drei Beispiel Java-Anwendungen im Verzeichnis test,
      welche Sie gesondert kompilieren müssen. Verwenden Sie folgende Prozedur:
        <programlisting format="linespecific">
          # cd ../test
          # javac -classpath ../jip/jip.jar HipClient.java
          # javac -classpath ../jip/jip.jar HipUserkeyClient.java
          # javac -classpath ../jip/jip.jar HipServer.java
        </programlisting>

    </para>
    <para>
      Sie sollten bereits Ihre Netzwerktestumgebung, wie unter Abschnitt 
      "HIP-Verbindung zwischen zwei Hosts testen" beschrieben, eingerichtet
      haben. Ggf. wird hipd ihre &ouml;ffentlichen Schlüssel erzeugen, darüber
      brauchen Sie sich keine Gedanken machen.
    </para>
    <para>
      Um ihre bisherigen Java Anwendungen mit der HIP Funktionalität
      auszustatten genügt es nicht die Socket eigenschaften zu setzen. Sie
      müssen entweder sicherstellen, dass der Hostname nur zu IPv6 Adressen 
      aufgel&ouml;st wird, oder dass die niemals hostnamen an Methoden in der Socket und
      ServerSocket Klasse senden.
      Letzteres kann durch die Verwendung der HipAddress Klasse, wie im
      Beispiel demonstriert, sichergestellt werden.
    </para>
    <para>
      Verwenden der Beispiel Anwendung wie folgt:
        <programlisting format="linespecific">
          crash # cd path-to-hipl/test
          crash # ./java HipServer 12345
          oops # cd test
          oops # ./java HipClient crash 12345 54321
          &lt;beliebigen Text eingeben und Enter drücken&gt;
        </programlisting>

    </para>

    <para>
      Das Shell-Skript <filename>test/java</filename> enthält einige LD_PRELOAD-, Bibiliotheken-
      und ClassPath informationen, welche zum ausführen der HIP-Java
      Anwendungen notwendig sind.
    </para>
    <para>
      Die Klasse HipUserkeyClient ist andererseits die gleiche wie die HipClient
      Klasse, ausgenommen ihr viertes Argument. Dies ist eine Datei aus der die
      anwendungsspezifischen Endpoint Informationen geladen werden sollen.
    </para>
  </chapter>

  <chapter>
    <title>Telnet mit HIP</title>
    <para>
      Wir haben netkit-telnet von usagi (www.linux-ipv6.org) verändert um die
      native HIP Funktionalität zu erm&ouml;glichen.
      HIP wird durch einen Kompiler Schalter aktiviert, so dass Sie die
      Änderungen im Quelltext nchvollziehen k&ouml;nnen (ifdef USE_HIP). Hier die
      Anleitung zum Kompilieren der Telnet Anwendungen:
        <programlisting format="linespecific">
 	  # cd test/telnetd
	  # ./configure
	  # make
          # cd ../telnet
  	  # ./configure
  	  # make
        </programlisting>
    </para>
    <para>
       Bevor Sie nun telnet starten sollten das HIP Kernelmodul geladen sein.
       Es wird für telnet ben&ouml;tigt, da es die native API von HIP nutzt (und
       nicht den alten Modus). Anschließend k&ouml;nnen Sie mit telnet experimentieren:
        <programlisting format="linespecific">
	  oops  # telnetd/telnetd -debug 12345
	  crash # telnet/telnet -l username oops 12345
        </programlisting>
    </para>
    <para>
      Anmerkung: der Nutzname darf nicht root sein.
    </para>
  </chapter>


  <chapter>
    <title>Verwenden von HIP in C-Anwendungen</title>

    <orderedlist>
      <title>Verwenden Sie folgende Methoden:</title>

    <listitem>
    <!-- 1. -->
    <para>
      Portieren Sie die Anwendung auf die native API. Sehen Sie telnet als
      praktikables Beispiel. Das API-Dokument finden Sie unter der URL:
      http://hipl.hiit.fi/hipl/hip-native-api-final.pdf
      (Anmerkung: dieses API-Dokument ist nicht mehr aktuell, achten Sie auf
      Änderungen in den Schnittstellen und Variablen.)
    </para>
    </listitem>

    <listitem>
    <!-- 2. -->
    <para>
      Verlinken Sie ihre Anwendung neu. Linken Sie auf libinet6 der HIPL
      Software. Anschließend verwenden Sie eine der folgenden Methoden:
    </para>

       <orderedlist numeration="loweralpha">
           <listitem>
           <para>
             Setzen Sie das AI_HIP Flag im getaddrinfo Aufruf. Dies wird
             getaddrinfo veranlassen nur HITs anstelle von IPs zur&uuml;ckzuliefern. Keine
             IP-Adresse wird zur&uuml;ckgeliefert. Das Mapping von HIT auf IP-Adresse wird
             von getaddrinfo veranlasst.
           </para>
           </listitem>
           <listitem>
           <para>
             Sie verwenden den transparenten Modus im Resolver (siehe
             HIP_TRANSPARENT_API Kompilerflag in libinet6/Makefile.in). Nur ein
             erneutes Linken ist notwendig, Änderungen an den Anwendungen bleiben aus. 
           </para>
           </listitem>
       </orderedlist>
    </listitem>

    <listitem>
    <!-- 3. -->
    <para>
      Dynamisches &Uuml;berschreiben der Resolver Bibiliothek:
    </para>
       <orderedlist numeration="loweralpha">
           <listitem>
           <para>
             Übergeben des Binaries als Argument von hipconf: "hipconf run normal &lt;EXECUTABLE&gt;"
           </para>
           </listitem>

           <listitem>
            <para>
             Überschreiben der getaddrinfo Funktion von der Kommandozeile:
             http://www-106.ibm.com/developerworks/linux/library/l-glibc.html?ca=3Ddgr-ln=
            </para>
           <para>
	    z.B. <function>env LD_PRELOAD=~/hipl--main--2.6/libinet6/.libs/libinet6.so:~/hipl--main--2.6/libhiptool/.libs/libhiptool.so firefox hipserver.infrahip.net</function>
            Oder hinzuf&uuml;gen zu <function>.bash_profile LD_PRELOAD=libinet6.so:libhiptool.so</function> und 
           <function>LD_LIBRARY_PATH=~/hipl--main--2.6/libhiptool/.libs/:~/hipl--main--2.6/libinet6/.libs/</function>
           </para>
          <para>Wenn Sie die Bibliothek installiert haben stellen Sie sicher, dass
          sie auf /usr/lib Referenzieren und nicht auf ihr Home Verzeichnis.
          </para>
          <para>
          Stellen Sie weiterhin sicher, dass libinet6 mit HIP_TRANSPARENT_API in
          <filename>libinet6/Makefile.in</filename> kompiliert ist.
          CFLAGS += -DHIP_TRANSPARENT_API
    </para>
    <para>
      Beachte: Methode zwei und drei haben zwei Vorbedingungen! Erstens, die
      Anwendung muss IPv6 unterst&uuml;tzen um HITs handhaben zu k&ouml;nnen. Zweitens,
      die Anwendug muss tatsächlich die getaddrinfo Funktion verwenden. Anderen
      Falls wird der das senden der HIT an das Kernelmodul nicht funktionieren.
    </para>
    <para>
      Folgende Anwendungen verwenden <function>getaddrinfo</function> auf FC4: telnet, firefox,
      lynx, ssh. 
      Nicht verwendet wird getaddrinfo von: ping, ping6, tla, svn.
    </para>
           </listitem>
       </orderedlist>
    </listitem>

    <listitem>
    <!-- 4. -->
    <para>
      Einf&uuml;gen der HITs in <filename>/etc/hosts</filename> anstelle von <filename>/etc/hip/hosts</filename>. Dann muss
      aber das HIT-zu-IP Mapping durch <function>hipconf add map HIT IP</function> erfolgen. Dies
      ist eine quick-and-dirty Methode ...
    </para>
    </listitem>

    <listitem>
    <!-- 5. -->
    <para>
    Verwenden des Opportunistic Modus, wie Beschrieben in Abschnitt "opportunistic mode".
    Denken Sie daran die Anwendung gegen <filename>libopphip</filename>, <filename>libinet6</filename> und <filename>libhiptool</filename> in
    dieser Reihenfolge zu linken. Verwenden Sie <filename>/usr/lib prefix</filename> f&uuml;r die
    Bibliotheken oder folgendes (f&uuml;r den Fall, dass Sie kein <function>make install</function> ausgef&uuml;hrt haben):
    </para>
       <orderedlist numeration="loweralpha">
           <listitem>
    <para>
      <function>hipconf run opp &lt;EXECUTABLE&gt;</function>
    </para>
           </listitem>

           <listitem>
    <para>
    <function>export LD_PRELOAD=~/hipl--main--2.6//libopphip/.libs/libopphip.so:~/hipl--main--2.6/libinet6/.libs/libinet6.so:~/hipl--main--2.6/libhiptool/.libs/libhiptool.so</function>
    </para>
           </listitem>
       </orderedlist>
    </listitem>

    <listitem>
    <para>
    Verwenden Sie die HIP Agent GUI um die Anwendung zu starten. Dies ist
    eine neue, nicht ausreichend getestete Funktion, welche aber funktionieren
    sollte. Sie k&ouml;nnen eine Anwendung &uuml;ber die GUI ausf&uuml;hren und deren
    Library-Pfad anpassen. Auch sollten sie eine Liste der &uuml;ber die GUI
    ausgef&uuml;hrten Prozesse sehen.
    </para>
    </listitem>
    </orderedlist>
  </chapter>


  <chapter>
  <title>Testen des HIP Rendezvous Server/Mechanismen</title>
    <para>
      Der Rendezvous Server is vergleichbar dem Home Agent bei Mobile IP. Der
      Rendezvous Server vergibt eine stabile IP an den Responder and leitet das
      initiale I1 Packet weiter zum aktuellen Ort des Responders.
      </para>
    <para>
      Vorbedingungen:
    </para>
    <para>
      <function>./configure --enable-rvs</function>
    </para>
    <para>
      Das hipconf Tool muss die rvs Option unterst&uuml;zten:
    </para>
    <para>
      <function>hipconf add rvs &lt;hit&gt; &lt;ip&gt;</function>
    </para>
    <para>
      Zur Zeit ist es das Beste wenn alle an der Kommunikation beteiligten
      Hosts den Rendezvous Mechanismus aktiviert haben, auch wenn es f&uuml;r den
      initiierenden Host nicht ben&ouml;tigt wird. Auch sollten Sie den Base Exchange
      einmal ohne Rendezvous Server starten um vertraut mit Konfiguration von 
      /etc/hosts und /etc/hip/hosts zu werden.
    </para>
    <para>
      Die Teilnehmen:
    </para>
    <para>
      &nbsp;I = Initiator
    </para>
    <para>
      &nbsp;RVS = Der Rendezvous Server
    </para>
    <para>
      &nbsp;R = Responder
    </para>
    <para>
      Die Idee dabei ist es Verbindung mit R's HIT aufzunehmen aber nur RVS's
      IP-Adresse zu kennen (RVS repräsentirt R). Wir werden zeigen wie RVS die
      native HIP Beispiel Anendungen verwendet (es kann auch mit nc6 oder den
      anderen conntest Test Anwendungen genutzt werden).
    </para>
    <para>
      Schritte:
    </para>
    <para>
      -----
    </para>
    <para>
      1. Starte und initialisiere das HIP Module auf jedem Host:
    </para>
    <para>
      2. Auf dem Initiator m&uuml;ssen die die "/etc/hosts" Datei anpassen. In der
      Datei m&uuml;ssen der Hostname des Responders auf die die IP-Addresse des
      Rendezvous Servers abgebildet werden. Es darf nicht auf die IP Addresse
      des Responders zeigen, da ansonsten der Rendezvous Server nicht verwendet
      wird!
    </para>
    <para>
      Die Datei <filename>/etc/hip/hosts</filename> sollte den Hostname und die HIT des
      Responders, wie f&uuml;r normales Base Exchange, enthalten.
    </para>
    <para>
      3. R teilt dem RVS mit, dass er den RVS Service verwenden m&ouml;chte:
    </para>
    <para>
      <function>responder # hipconf add rvs &lt;RVS-hit&gt; &lt;RVS-ip&gt;</function>
    </para>
    <para>
      Dies wird eine HIP SA zwischen dem Rendezvous Server und dem Responder aufbauen.
    </para>
    <para>
      4. F&uuml;ge einige Serverangaben bei R ein:
    </para>
    <para>
      <function>responder # test/conntest-server tcp 5000</function>
    </para>
    <para>
      5. Starten der Verbindung auf I:
    </para>
    <para>
      <function>initiator # test/conntest-client-gai &lt;responder-hostname&gt; tcp 5000</function>
    </para>
    <para>
      6. Beliebigen Text eingeben ...
    </para>
    <para>
      Anmerkung:
    </para>
    <para>
      &nbsp;* Wenn der RVS das I1 Paket nicht weiterleitet, bitte pr&uuml;fen Sie ob
      die HIT, welche der Responder f&uuml;r sich selbst verwendet mit einer der
      HITs &uuml;bereinstimmt zu welcher der Innitiator versucht Verbindung aufzubauen.
      Der HIT, welche vom Responder f&uuml;r die eigene Registrierung beim RVS
      gewählt wurde, kann eine der vier vorgegebenen sein.
    </para>
    <para>
      &nbsp;* Der implementierte Mechanismus leitet einfach I1 Pakete mit
      umgeschriebener Quell- und Zieladresse weiter.
    </para>
    <para>
      &nbsp;* Keine Änderungen werden im REA/mm-mode gemacht, was z.B. bedeutet
      dass das doppelte Sprung Szenario nicht funktioniert.
    </para>
    <para>
      &nbsp;* Der Mechanismus entspricht nicht zu 100% dem RVS-00 draft.
    </para>
    <para>
      &nbsp;* Wir verwenden nicht REA TLV in R1 (vom Responder zum
      Initiator). Die gleiche Funktionalität wird auch durch Verwendung der
      Sender IP-Adresse im R1-Paket erreicht.
    </para>
    <para>
      &nbsp;* 
      &nbsp;* Die VIA_RVS TLV wird auch ausgelassen, da es nur zum Zweck der
      Diagnose und Tests enthalten ist und nichts zur Impelemtation beiträgt 
      (außer Bugs :)
    </para>
    <para>
      &nbsp;* Zur Zeit wird nicht gantiert, dass der Rendezvous Mechanismus mit
      anderen Implemenationen interoperabel ist.
    </para>
  </chapter>

  <chapter>
    <title>Verwendung der HIP BOS Unterst&uuml;tzung</title>
    <para>
      Um BOS Pakete zu erzeugen (senden an die globale Multicast
      Adresse an alle Interfaces), verwenden Sie folgende Kommandos:
    </para>
    <para>
      <function>hipconf hip bos</function>
    </para>
    <para>
      BOS-fähige Hosts werden die HOST ID, HIT, und IP Adresse des Hosts aufnehmen.
    </para>
  </chapter>


  <chapter>
    <title>Zugriff auf die Kernel-Kontaktliste</title>
    <itemizedlist>
      <listitem>
	<para>Sie k&ouml;nnen auf die Kernelliste der bekannten HIP Parnter durch
        die native getendpointinfo Schnittstelle zum aufl&ouml;sen von Hostnamen zur&uuml;ckgreifen.
	</para>
      </listitem>
      <listitem>
	<para>Normalerweise pr&uuml;ft die Schnittstell zuerst die /etc/hip/hosts
        Datei auf einen passenden Host. Wenn keiner gefunden wird, wird der
        Kernel nach passendem HIP Partner angefragt und dessen Listen
        durchsucht. 
        </para>
      </listitem>
      <listitem>
	<para>
          Falls nur die Kernel Liste durchsucht werden soll, setzen Sie
          hints.ei_flags auf AI_HIP | AI_KERNEL_LIST. Dies wird ausschließlich
          die Kernerlliste durchsuchen und nicht die hosts Datei.
       </para>
      </listitem>
      <listitem>
	  <para>
           Um eine Liste der bekannten Gegenstellen vom Kernel zu erfragen,
           setzen Sie hints.ei_flags auf AI_HIP | AI_KERNEL_LIST und den
           Hostnamen auf NULL.
           Dies wird den Kernel abfrage und eine vollständige Liste
           zur&uuml;ckliefern. 
	  </para>
	</listitem>
	</itemizedlist>
  </chapter>
  <chapter>
    <title>HIP Firewall</title>
        <para>In Ip6tables muss eine Regel definiert werden damit HIP und ESP
              Pakete im User-Space verarbeitet werden. Diese Regel muss allen
              anderen Firewallregeln vorausgeht damit HIP und ESP Pakete nicht
              verändert werden. Falls ESP Pakete nicht gefiltert werden k&ouml;nnen
              ESP betreffende Regeln (-p 50) weggelassen werden.
              </para>

        <programlisting format="linespecific">
        ip6tables -A FORWARD -p 99 -j QUEUE
        ip6tables -A FORWARD -p 50 -j QUEUE
        ip6tables -A INPUT -p 99 -j QUEUE
        ip6tables -A INPUT -p 50 -j QUEUE
        ip6tables -A OUTPUT -p 99 -j QUEUE
        ip6tables -A OUTPUT -p 50 -j QUEUE
        </programlisting>

        <para>ip6_queue muss mit "modprobe ip6_queue" geladen werden</para>

        <para>Die Firewall kann mit "./firewall &lt;file_name&gt;" "timeout
              value" im Firewall-Verzeichnis gestartet werden. file_name ist
              der Pfad zu der Datei mit den Firewall regeln und timeout value
              bestimmt die Zeit in Sekunden.
              Falls ein timeout von Null oder negativer Wert angegeben wird,
              so wird keine timeout Pr&uuml;fung vorgenommen. Alle Regeln m&uuml;ssen in
              einer separaten Zeile stehen. Die aktuellen Firewallregeln geben
              Debug-Informationen &uuml;ber Regelanalyse und gefilterte Pakete aus.
             </para>

        <para>Die Regeln folgen lose der Linux Iptables Syntax:</para>

        <para>Grundformat von Regeln:</para>

        <para>HOOK [match] TARGET</para>

        <para>Hier ist HOOK einer der netfilter Haken: "INPUT",
              "OUTPUT", "FORWARD".  TARGET ist entweder "ACCEPT" oder
              "DROP", je nachdem ob das Paket weiter geleitet oder verworfen
              wird. Match ist eine Kombination von Filteroptionen wie im
              folgenden beschrieben.
              </para>

        <para>Filter Optionen:</para>

        <para>-src_hit [!] &lt;hit value&gt; --hi &lt;file name&gt;</para>

        <para>Vergleichen der Quell-HIT in Paketen. 
              HI kann durch --hi
              Optionn und durch definition eines Pfades zur Public Key Datei
              als Argument. Damit k&ouml;nnen Sender Signaturen &uuml;berpr&uuml;ft werden.
              Die Datei muss entweder "_rsa_" oder "_dsa_" enthalten abhängig
              davon ob der RSA- oder der DSA-Algorithmus verwendet wird.
              </para>
 
        <para>-dst_hit [!] &lt;hit&gt;</para>

        <para>Vergleichen der Ziel-HIT in Paketen.</para>

        <para>-type [!] &lt;hip packet type&gt;</para>

        <para>Vergleicht HIP Pakettyp. Der Typ ist einer der folgenden Typen:
              "I1", "R1", "I2", "R2", "CER", "UPDATE", "NOTIFY", "CLOSE",
              "CLOSE_ACK"</para>

        <para>-i [!] &lt;incoming interface&gt;</para>

        <para>Vergleichen auf hereinkommendes Interface. Das Argument enthält
              den Namen des Interfaces. Diese Regel kann nicht f&uuml;r
              OUTPUT-Regeln verwendet werden, denn die Pakete haben kein Incoming
              Interface.
              </para>

        <para>-o [!] &lt;outgoing interface&gt;</para>

        <para>Vergleichen auf ausgehendes Interface. Das Argument enthält den
              Namen des ausgehenden Interfaces. Diese Regel kann nicht f&uuml;r
              INPUT Regeln verwendet werden, denn diese Pakete haben kein
              ausgehendes Interface.
              </para>

        <para>-state [!] &lt;state&gt; --verify_responder --accept_mobile</para>

        <para>Vergleichen auf Status der HIP Verbindung: "NEW" oder
              "ESTABLISHED". ESP Pakete werden auch gefiltert als Teil der
              Verbindung. Mit der "--verify_responder" Option speichert die
              Firewall die Responder HI des R1 Paketes und nutzt es zur
              &Uuml;berpr&uuml;fung der Paketsignaturen. Mit der "--accept_mobile" Option
              aktualiseirt die Firwall den Status der Verbindung wenn ein
              mobiler Host das durch die Firewall gesch&uuml;tzte Netzwerk betritt.
              In der Praxis bedeutet dies, dass das vorherige Interface
              runtergefahren und im neuen Netzwerk reaktiviert werden muss.
         </para>


        <para>Management der Interfaces:</para>

        <para>Das Firewall-Management-Interface enth&auml;lt Funktionen um die Regel
              der laufenden Firewall zu ver&auml;ndern. Die Funktionen sind in 
              firewall/rule_management.h definiert und in
              firewall/rule_management.c implementiert. Die Datei
              Rule_management.c enth&auml;lt auch  Funktionen zum kopieren,
              vergleichen, l&ouml;schen von Regeln usw. Falls eine Funktion
              aussehalb des rule_managment ben&ouml;tigt wird, kann diese in den
              Header Dateien definiert werden.
         </para>

        <para>Das Argument "hook" ist der Haken zu Netfilter f&uuml;r dessen Regel
              er gedacht ist. Der Haken ist definiert in linux/netfilter_ipv6.h
              als NF_IP6_LOCAL_IN, NF_IP6_FORWARD, NF_IP6_LOCAL_OUT.</para>

        <para>Die Struktur des Arguments rule ist unter rule_management.h
              beschrieben. Die Struktur enth&auml;lt Zeiger zu den Optionen. Wenn
              eine Option nicht definiert ist muss der Wert NULL sein.
              Die Strukturen der Optionen sind ebenfalls in rule_management.h
              definiert. 
              Die Funktion <function>rule * parse_rule(char * string)</function>
              kann zur erzeugen einer rule Struktur aus einem String genutzt
              werden. Der String wird auf die Korrektheit gegen&uuml;ber der rule
              Syntax gepr&uuml;ft.
          </para>

        <para><function>void insert_rule(const struct rule * rule, int hook)</function>:</para>

        <para>Einf&uuml;gen des Arguments rule an die hook Funktion. Insert erzeugt
              eine lokale Kopie des Argumentes rule.
        </para>

        <para><function>int delete_rule(const struct rule * rule, int hook)</function>:</para>

        <para>L&ouml;scht die lokale Regel die dem Argument rule entspricht.
           </para>

        <para><function>GList * list_rules(int hook)</function>:</para>

        <para>Erzeugt eine Kopie der Regelliste und gibt diese zur&uuml;ck. Die
              Aufrufende Funktion muss die Freigabe des Speichers regeln. 
           </para>

        <para><function>int flush(int hook)</function>:</para>

        <para>L&ouml;scht alle Regeln.</para>
  </chapter>


  <chapter>
    <title>HIP NAT Erweiterungen</title>

    <para>HIPL unterst&uuml;tzt auch die Initiierung einer Verbindung aus einen
          Netzwerk hinter NAT. Die grundlegende Idee ist das der Initiator  die
          HIP Steuerpakete und ESP Daten in UDP Pakete kapselt. Auf diesem Weg
          k&ouml;nnen die Pakete die NAT Box durchqueren. Um dies zu erm&ouml;glichen
          m&uuml;ssen aber Initiator und Responder die NAT Erweiterung
          unterst&uuml;tzen. Zur Zeit kann ein Responder nicht hinter NAT
          lokalisiert werden.
    </para>
    <para>Experimente mit NAT k&ouml;nnen in einem &auml;hnlichem Weg wie bereits in
          einem vorherigen Abschnitt beschrieben durchgef&uuml;hrt werden. Der
          einzige Unterschied ist, dass Sie dem Initiator manuell &uuml;ber den NAT
          Status informieren m&uuml;ssen - verwenden Sie dazu <function>hipconf hip
          nat on</function>. Danach k&ouml;nnen Sie den Base Exchange gem&auml;ß der
          vorherigen Anweisung initiieren. Die manuelle Konfiguration ist zur
          Zeit noch notwendig, da die automatische NAT Erkennung (STUN) noch
          nicht implementiert ist.
    </para>

    <para>Wenn Sie Probleme mit der Verwendung des NAT Codes habe um die I1
          aufzunehmen (z.B. mit <function>conntest-client-gai</function>
          (ereignet sich mit Kernel 2.6.16.5)), dann k&ouml;nnten Sie den Quell-HIT
          Explicit angeben. Das Verfahren zum Initiieren einer Verbindung
          hinter NAT ist folgendes:

        <programlisting format="linespecific">
          tools/hipconf hip nat on
          tools/hipconf add map peer_hit peer_ipv4_addr
          ping6 -I source_hit dst_hit
        </programlisting>
    </para>    

    <para>Stellen Sie sicher, dass die Quelle ist die selbe wie in der
          <function>ip xfrm policy</function> Ausgabe.
          Wir sind uns des Problems bewußt (siehe BugID 161) und es wird
          gel&ouml;st. 
          Auch scheint es, das der Responder nicht automatisch die Pakete zum
          NAT routet, so dass ein <function>ip route add nat_ipv4_addr dev
          xx</function> am Responder notwendig wird (ereignet sich mit Kernel
          2.6.16.5). 
    </para>
    <para>
        Drei F&auml;lle von Mobilit&auml;t des Initiators wurden in den NAT Code implementiert.
    <itemizedlist>
      <listitem>
	<para>Mobilit&auml;t ausgehend hinter einem NAT hinter das selbe NAT:
              F&uuml;r diesen Fall, das Standardverfahren zum Update nach dem Base
              Exchange, ist die Prozedur vollst&auml;ndig.  Das Update wird in UDP
              Pakete gekapselt.
	</para>
      </listitem>
      <listitem>
	<para>Mobilit&auml;t von &ouml;ffentlich adressiertem Netzwerk hinter ein NAT
              Netzwerk:
              Wenn eine HIP Verbindung zwischen zwei Hosts errichtet werden
              soll, bei welcher sich beide in einem &ouml;ffentlichem Netzwerk
              befinden und einer in ein NAT Netzwerk wechseln soll, dann sollte
              der Knoten zuerst die &ouml;ffentliche Adresse l&ouml;schen, die NAT
              Erweiterung durch <function>hipconf</function> aktivieren und
              dann die NAT-IP-Adresse und Route an die Schnittstelle binden.
              Das Update wird ab dann auf UDP basieren und die zuk&uuml;nftige
              Kommunikation in UDP gekapselt (beides, HIP Steuerung und
              ESP-Pakete). 
         </para>
      </listitem>
      <listitem>
	<para>Mobilit&auml;t von NAT Netzwerk zum &ouml;ffentlich adressiertem Netzwerk:
              Wenn ein Knoten eines NAT Netzwerks eine HIP Verbindung etabliert
              hat und nun in ein Netzwerk mit &ouml;ffentlichen IP Adressen wechseln
              soll dann sollte die private IP Adresse zuerst gel&ouml;scht, die NAT
              Erweiterung abgeschalten (verwende <function>hipconf</function>)
              und anschließend die &ouml;ffentliche IP Adresse inkl. Route gesetzt
              werden. Danach wird die HIP Verbindung nicht mehr UDP gekapselte
              Pakete senden. Auch die Update Funktion wird normale HIP Pakete
              ohne UDP-Kapselung verwenden.
         </para>
      </listitem>
    </itemizedlist>


    </para>


  </chapter>
  <chapter>
     <title>HIP User Agent und GUI</title>
      <para>HITs mit grafische Benuzterschnittstelle verwalten.</para>

      <para>Werden neue HITs empfangen, diese und lokale HIT werden durch den
            HIP Agenten gefiltert, wird der Nutzer nach akzeptanz des HIT
            Paares fragt.
            Danach werden die HIT in der Datenbank gespeichert und
            akzeptanz/verworfen wird an den Daemon zur&uuml;ckgeliefert.
            Die HITs k&ouml;nnen dar&uuml;ber hinaus durch das Interface verwaltet
            werden. Das Interface ist unter Entwicklung und noch im
            Alpha-Stadium. 
      </para>
      <para>
            Um den Agenten und das GUI zu kompilieren werden folgende
            Softwarepakete ben&ouml;tigt (vorausgesetzt Sie nutzen Debian):
        <itemizedlist>
	  <listitem>
	        <para>1. gcc und g++ Kompiler, beide solten mindestens Version 4.0 sein.</para>
	  </listitem>
	  <listitem>
		<para>2. Pakete: xbase-clients - miscellaneous X clients</para>
	  </listitem>
	  <listitem>
		<para>3. GTK 2.x und Development Pakete (Paket libgtk2.0-dev).
                Wenn Sie das "System Tray Icon" verwenden wollen brauchen Sie
                mindestens GTK Version 2.10.0.</para>
	  </listitem>
        </itemizedlist>
      </para>
	  <para>Damit der Agent ordnungsgem&auml;ß mit richtigem Fenster und System
                Tray Icon verwendet werden kann m&uuml;ssen Sie mit <function>make
                install</function> die Dateien ins richtige Verzeichnis
                installiert werden. Anderenfalls wird das System Try Icon nicht
                angezeigt. 
	  </para>
      <para>
           Die HIT Datenbank wird per default aus
           <filename>$HOMEDIR/.agentdb</filename> geladen und gespeichert.
      </para>

      <para>Um den Agenten auszuf&uuml;hren rufen Sie <function>hipagent</function>
            auf. Sie sollten die mit normalen Nutzerrechten (nicht Root) laufen
            lassen. 
      </para>
  </chapter>

  <chapter>
    <title>OpenDHT Unterst&uuml;tzung (Experimental!)</title>

    <para>
        <programlisting format="linespecific">
          unpack patches/misc/hip-dht-04052006.tgz
          make a link called "hipl--main--2.6/hip-dht" that points to the unpacked hip-dht directory
          Compile hipl--main--2.6 with ./configure --enable-opendht
        </programlisting>
    </para>

    <para>Um dies zu testen starten Sie <function>conntest-server</function> und
          <function>conntest-client-gai</function> wie gewohnt zwischen den
          Hosts. Sie erhalten Meldungen vom <function>hipd</function> und
          <function>conntest</function> &uuml;ber DNS->HIT->IP Aufl&ouml;sungen. Alles
          sollte ohne zus&auml;tzliche Aktionen laufen.
    </para>
    <para>Sie k&ouml;nnten die Adresse des OpenDHT Kontaktservers &auml;ndern, die Liste
          der zur Zeit laufenden erhalten Sie unter
          http://www.opendht.org/servers.txt. Dokumentation finden Sie auch
          unter http://kom.aau.dk/group/05gr680/.
    </para>
  </chapter>

  <chapter>
    <title>Hi3 Unterst&uuml;tzung (Experimental!)</title>
    <para>
        <programlisting format="linespecific">
          unpack http://i3.cs.berkeley.edu/download/i3_0_3.tar.gz
          make a link called "hipl--main--2.6/i3" that points to the unpacked i3_0.3/i3 directory
          Compile hipl--main--2.6 with ./configure --enable-hi3
        </programlisting>
    </para>
    <para>
         Dies wurde f&uuml;r lange Zeit nicht getestet. Um es zum Laufen zu bringen
         werden einige Einstellungen am lokalem i3 Server auf einer i3
         Distribution oder PlanetLab notwendig. Siehe
         http://hipl.infrahip.net/i3_status.html oder
	 http://rose.cs.berkeley.edu:8080/i3_status.html.
    </para>
  </chapter>

  <chapter>
    <title>Verwenden des Opportunistic Mode</title>
    <para>
       Der Opportunistic Mode ist standardm&auml;ßig beim Kompilieren
       aktiviert. Folgenden Sie diesen Angaben um den Opportunistic Mode f&uuml;r HIP zu aktivieren:

        <programlisting format="linespecific">
          1. Move to top level of HIPL
          cd hipl
          2. Run autogen.sh
          ./autogen.sh
          3. Run configure with flag --enable-opportunistic. See "./configure --help" for a full list of options
          ./configure --enable-opportunistic
          4. Run make
          make
          5. Run hip daemon on both "crash" and "oops"
          hipd/hipd
          6. Verwenden Sie hipconf um den HIP Opportunistic Mode auf beiden
          Hosts manuell zu aktivieren. Das "tools/hipconf set opp on|off"
          Kommando wird verwendet um den Opportunistic Mode ein- und
          auszuschalten. 
          tools/hipconf set opp on
          Nun ist der Opportunitic Mode aktiviert, Um dies zu testen m&uuml;ssen die
          die HIT von crash aus /etc/hip/hosts l&ouml;schen und den Schritten in
          Kapitel 6 folgen. 
        </programlisting>
    </para>
  </chapter>
</book>    


