/usr/share/doc/HOWTO/de-html/DE-Netzwerk-HOWTO-8.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Linux Netzwerk HOWTO : Neue Netzwerkfähigkeiten mit Kernel 2.2 </TITLE>
<LINK HREF="DE-Netzwerk-HOWTO-9.html" REL=next>
<LINK HREF="DE-Netzwerk-HOWTO-7.html" REL=previous>
<LINK HREF="DE-Netzwerk-HOWTO.html#toc8" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-Netzwerk-HOWTO-9.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Netzwerk-HOWTO-7.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Netzwerk-HOWTO.html#toc8"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="DE-NET3-HOWTO-neu-mit-Kernel-22"></A> <A NAME="s8">8.</A> <A HREF="DE-Netzwerk-HOWTO.html#toc8">Neue Netzwerkfähigkeiten mit Kernel 2.2 </A></H2>
<P>Der Kernel 2.2 hat die Routing-Fähigkeiten von Linux wesentlich verbessert.
Unglücklicherweise gibt es fast keine Dokumentation zur Nutzung der neuen
Fähigkeiten und wenn vorhanden ist sie schwer zu finden.</P>
<P>Ich habe einige Zeit darin investiert und bereits einige Dinge erreicht. Mit
der Zeit und mit wachsendem Verständnis werde ich diese Dokumentation
erweitern.</P>
<P>Bis Kernel 2.0 nutzte Linux das Standardkommando <CODE>route</CODE> zum
Erstellen von Routingregeln in einer einzigen Routingtabelle. Diese konnte
mit
<BLOCKQUOTE><CODE>
<PRE>
netstat -rn
</PRE>
</CODE></BLOCKQUOTE>
auf der Kommandozeile angezeigt werden.</P>
<P>Mit neueren Kerneln (ab 2.1) gibt es eine weitere regelbasierte Möglichkeit,
die es erlaubt, mehrere Routingtabellen zu führen. Die neuen Regeln sind
viel flexibler bei der Entscheidung, wie ein Paket gehandhabt wird. Es sind
nun Regeln möglich, die nicht mehr nur auf der Zieladresse, sondern
auch auf der Quelladresse, dem TOS (Type of Service) Feld des Paketes oder
der Schnittstelle auf der das Paket ankam, basieren können.</P>
<H2><A NAME="ss8.1">8.1</A> <A HREF="DE-Netzwerk-HOWTO.html#toc8.1">Die Grundlagen</A>
</H2>
<P>Die Routingtabelle kann so angezeigt werden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ip route
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Auf meinem Rechner ergibt sich folgende Ausgabe:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
207.149.43.62 dev eth0 scope link
207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
default via 207.149.43.1 dev eth0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Die erste Zeile »207.149.43.62 dev eth0 scope link« ist dabei die
Routingregel für die Schnittstelle.</P>
<P>Die zweite Zeile
»207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62«
ist eine Regel, die aussagt: alles nach 207.149.43.0 muß über
207.149.43.62 versandt werden.</P>
<P>Die dritte Zeile »default via 207.149.43.1 dev eth0«
ist die Regel für die Defaultroute.</P>
<H3>Nutzen dieser Informationen</H3>
<P>Jetzt nachdem wir uns eine einfache Routingtabelle angesehen haben, ist
es Zeit, mit ihr zu arbeiten. Dazu sollte man zuerst die
englischsprachige Dokumentation zum <EM>Policy Based Routing</EM>
lesen, die von folgender Adresse bezogen werden kann:
<BLOCKQUOTE><CODE>
<A HREF="http://www.compendium.com.ar/policy-routing.txt">http://www.compendium.com.ar/policy-routing.txt</A></CODE></BLOCKQUOTE>
Wenn Sie dieser Text verwirrt, dann
macht das nichts - es ist ein verwirrender Text.
Aber er bietet eine vollständige Beschreibung dessen, was man mit dem
neuen Routing alles anstellen kann.</P>
<H2><A NAME="ss8.2">8.2</A> <A HREF="DE-Netzwerk-HOWTO.html#toc8.2">Anlegen einer Route mit dem ip Befehl</A>
</H2>
<P>Im letzten Abschnitt haben wir das Anzeigen und die Bedeutung der
Ausgabe der Routingtabelle besprochen. Glücklicherweise ähnelt
die Ausgabe der Tabelle der Syntax zu ihrer Erzeugung:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ip route add 207.149.43.62 dev eth0 scope link
ip route add 207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
ip route add 127.0.0.0/8 dev lo scope link
ip route add default via 207.149.43.1 dev eth0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Wie Sie sehen, sind Ausgabe und Kommandos fast identisch, wenn man
mal von dem <CODE>ip route add</CODE> vor jeder Zeile absieht.</P>
<H2><A NAME="ss8.3">8.3</A> <A HREF="DE-Netzwerk-HOWTO.html#toc8.3">NAT mit dem Kernel 2.2 nutzen</A>
</H2>
<P>Die IP Network Address Translation Funktionalität ist so ziemlich der
standardisierte »Big Brother« des Linux IP Masquerading. NAT ist in
gewisser Hinsicht im <EM>RFC 1631</EM> spezifiziert. Es bietet
Möglichkeiten, die das IP-Masquerading nicht bietet. Damit ist es eher
für die Nutzung für Firmen Firewall-Router und noch größere
Installationen geeignet.</P>
<P>Eine Alpha Implementierung von NAT für den Linux 2.0.29 Kernel wurde
von Michael Hasenstein
(<CODE>
<A HREF="mailto:Michael.Hasenstein@informatik.tu-chemnitz.de">Michael.Hasenstein@informatik.tu-chemnitz.de</A></CODE>) entwickelt.
Michaels Dokumentation und Implementierung sind verfügbar unter:</P>
<P>
<BLOCKQUOTE><CODE>
<A HREF="http://www.suse.de/~mha/HyperNews/get/linux-ip-nat.html">http://www.suse.de/~mha/HyperNews/get/linux-ip-nat.html</A></CODE></BLOCKQUOTE>
</P>
<P>Der wesentlich verbesserte TCP/IP Stack des 2.2er Linux Kernel enthält
bereits die NAT-Funktionalität. Diese Möglichkeit macht eine Zusatzlösung
wie von Michael Hasenstein unnötig.</P>
<P>Um sie zu aktivieren, müssen folgende Kerneloptionen gewählt werden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
CONFIG_IP_ADVANCED_ROUTER,
CONFIG_IP_MULTIPLE_TABLES (auch bekannt als Policy Routing)
CONFIG_IP_ROUTE_NAT (auch bekannt als Fast NAT)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Benötigen sie granularere NAT Regeln, dann möchten Sie ebenfalls
die Firewallfunktionalität aktivieren:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
CONFIG_IP_FIREWALL
CONFIG_IP_ROUTE_FWMARK.
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um diese Kernelfunktionalität auch nutzen zu können, benötigt
man das <CODE>ip</CODE> Programm von Alexey Kuznyetsov, welches
von folgendem Server bezogen werden kann:</P>
<P>
<BLOCKQUOTE><CODE>
<A HREF="ftp://ftp.inr.ac.ru/ip-routing/">ftp.inr.ac.ru:/ip-routing</A></CODE></BLOCKQUOTE>
</P>
<H3>NAT für eingehende Pakete</H3>
<P>Ist der Kernel richtig konfiguriert und sind alle Tools installiert, kann man
mit folgendem Kommando die Adressübersetzung für Pakete einrichten.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ip route add nat <ext-addr>[/<masklen>] via <int-addr>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Diese Regel wird in allen eingehenden Paketen mit der Zieladresse »ext-addr«
(also die Adresse, die von außen z.B. vom Internet sichtbar ist) die
Zieladresse nach »int-addr« umändern (das ist eine Adresse im internen
Netzwerk, hinter dem Gateway bzw. der Firewall). Das Paket wird dann
gemäß der lokalen Routing Regeln weitergeleitet.
Es ist möglich, entweder einzelne oder ganze Bereiche von Hostadressen
zu verändern.</P>
<P>Beispiele:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ip route add nat 195.113.148.34 via 192.168.0.2
ip route add nat 195.113.148.32/27 via 192.168.0.0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Das erste Kommando macht die interne Adresse 192.168.0.2 nach außen hin
als 195.113.148.34 zugänglich. Das zweite Beispiel zeigt das Abbilden
des Adreßbereiches 192.168.0.0-31 auf den Bereich 195.113.148.32-63.</P>
<H2><A NAME="ss8.4">8.4</A> <A HREF="DE-Netzwerk-HOWTO.html#toc8.4">Kernel 2.2 ip Kommandoreferenz (in Arbeit)</A>
</H2>
<P>Haben Sie das Paket <CODE>iproute2</CODE> installiert, kann durch den
einfachen Aufruf von <CODE>ip</CODE> die grundlegende Syntax angezeigt
werden.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ip
Usage: ip [ OPTIONS ] OBJECT [ COMMAND [ ARGUMENTS ]]
where OBJECT := { link | addr | route | rule | neigh | tunnel |
maddr | mroute | monitor }
OPTIONS := { -V[ersion] | -s[tatistics] | -r[esolve] |
-f[amily] { inet | inet6 | dnet | link } | -o[neline] }
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3>Zur Bedeutung der Parameter:</H3>
<P>»OBJECT« spezifiert das Objekt, für das Informationen
ermittelt oder mit dem anderen Kommandos durchgeführt werden sollen.
Die von der aktuellen Implementation unterstützten Typen sind:</P>
<P>
<DL>
<DT><B>link</B><DD>
<P>eine Netzwerkschnittstelle z.B. <CODE>eth0</CODE> oder <CODE>ppp0</CODE></P>
<DT><B>address</B><DD>
<P>die IP (IPv4 oder IPv6) Adresse der Schnittstelle</P>
<DT><B>neigh</B><DD>
<P>ein ARP oder NDISC Cache Eintrag</P>
<DT><B>route</B><DD>
<P>ein Eintrag der Routingtabelle</P>
<DT><B>rule</B><DD>
<P>eine Regel in der Routing Policy Datenbank</P>
<DT><B>maddress</B><DD>
<P>eine Multicast Adresse</P>
<DT><B>mroute</B><DD>
<P>ein Multicast Routing Cache Eintrag</P>
<DT><B>tunnel</B><DD>
<P>Objekt, um zu entscheiden, ob IP Tunneling verwendet wird</P>
</DL>
</P>
<P>Der Umfang an möglichen Optionen jedes Objekttypes hängt vom Typ der
durchzuführenden Aktion ab. Ganz grundlegend ist es für jedes Objekt
möglich, ein »add«, »delete« oder ein »show«
durchzuführen. Nicht alle Objekte bieten weitere Kommandos.
Natürlich ist für alle Objekte das Kommando »help« möglich.
Dieses gibt die Syntax für das jeweilige Objekt aus.</P>
<P>Wird kein Kommando angegeben, wird das Standardkommando ausgeführt. Das ist
typischerweise »show«. Können keine Informationen zum abgefragten
Objekt ausgegeben werden, wird nur die Hilfe ausgegeben.</P>
<P>»ARGUMENTS« ist eine Liste von Argumenten, die kommando- und
objektspezifisch sind. Es gibt zwei Typen für Argumente:</P>
<P>»Flags« diese bestehen aus einem Schlüsselwort gefolgt von
einem Wert. Für die einfachere Benutzung sind für Kommandoargumente
oft Standardwerte vorgesehen. So ist der Parameter »dev>«
standardmäßig auf »ip link« gesetzt.</P>
<H3>Zur Bedeutung der Optionen</H3>
<P>
<DL>
<DT><B>-V, -Version</B><DD>
<P>Zeigt die Versionsnummer des benutzten <CODE>ip</CODE>
Programmes an.</P>
<DT><B>-s, -stats, -statistics</B><DD>
<P>Diese Option führt dazu, daß zusätzliche Informationen
ausgegeben werden. Wird die Option mehrfach angegeben,
erfolgen noch mehr Ausgaben.</P>
<DT><B>-f, -family {inet, inet6, link}</B><DD>
<P>Ermöglicht das Angeben der zu verwendenden Protokollfamilie.</P>
<P>
<DL>
<DT><B>inet</B><DD>
<P>IPv4 (der aktuelle Internetstandard)</P>
<DT><B>inet6</B><DD>
<P>IPv6 (der kommende IPv4 Nachfolger)</P>
<DT><B>link</B><DD>
<P>steht für eine physische Verbindung</P>
</DL>
</P>
<P>Wird diese Option nicht angegeben, versucht das Programm
die Protokollfamilie selbst zu bestimmen. Sind dafür nicht
genug Informationen gegeben, werden die
Standardeinstellungen verwendet.</P>
<DT><B>-o, -oneline</B><DD>
<P>Bei der Ausgabe wird pro Datensatz nur eine Zeile verwendet.</P>
<DT><B>-r, -resolve</B><DD>
<P>Mit dieser Option nutzt das Programm den lokalen
Auflösungsdienst (z.B. DNS) um Namen statt IP Adressen auszugeben.</P>
</DL>
</P>
<H3>Anwenderfehler</H3>
<P>Alle Operationen des <CODE>ip</CODE> Kommandos sind dynamisch.
Ist die angegebene Syntax fehlerhaft, wird die Systemkonfiguration
nicht verändert. Es gibt nur eine Ausnahme: das »ip link«
Kommando, das zum Ändern der Schnittstelleneigenschaften
genutzt wird.</P>
<P>Es ist schwierig, alle Fehlermeldungen anzugeben (speziell die bei
Syntaxfehlern). Typischerweise sollte die Bedeutung einer Fehlermeldung
im Kontext des Objektes klar sein.</P>
<P>Typische Fehler sind:
<OL>
<LI>Der Kernel untersützt Netlink nicht. Die Fehlermeldung:
<BLOCKQUOTE><CODE>
<PRE>
Cannot open netlink socket: Invalid value
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI>Der Kernel unterstützt RTNETLINK nicht. Je nach Kommando wird
eine der folgenden Ausgaben angezeigt:
<BLOCKQUOTE><CODE>
<PRE>
Cannot talk to rtnetlink: Connection refused
Cannot send dump request: Connection refused
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI>Die Kerneloption CONFIG_IP_MULTIPLE_TABLES
ist nicht aktiv. In diesem Fall schlägt jede Benutzung des
Kommandos <CODE>ip rule</CODE> fehl. Beispiel:
<BLOCKQUOTE><CODE>
<PRE>
ip rule list RTNETLINK
error: Invalid argument
dump terminated
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</OL>
</P>
<HR>
<A HREF="DE-Netzwerk-HOWTO-9.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Netzwerk-HOWTO-7.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Netzwerk-HOWTO.html#toc8"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|