------------------------------------------------------------------------------
OPT_BRIDGE - Zum Erweitern von fli4l um Bridging                         2.0.1

von Olivier Oswald <opt_bridge-AT-swissinfo.org>
basierend auf OPT_BRIDGE-1.6.2 von Michael Hanselmann <opt_bridge-AT-bluemail.ch>
------------------------------------------------------------------------------

Beschreibung:
-------------
Mit OPT_BRIDGE kann man verschiedene Netzwerk-Devices (eth0, eth1, ...) unter 
fli4l so verbinden, dass alle Pakete durchgeleitet werden, sprich: wenn auf 
eth1 ein Paket ankommt, wird dieses autom. an eth0 weitergereicht und dort
rausgesendet (und umgekehrt). Natürlich ist es auch möglich, 3 (oder mehr) 
Netzwerk-Devices zu "bridgen".

Es ist auch möglich, zwei verschiedene Netwerktypen zu verbinden (z.B. 10MBit 
BNC und 100MBit RJ45, oder 100MBit RJ45 und TokenRing). Jede Seite behält 
dabei ihre Geschwindigkeit, wenn ein Datentransfer über das Netzwerk hinaus 
stattfindet, wird die Übertragung mit der niedrigeren Geschwindigkeit 
durchgeführt. 


Voraussetzungen:
----------------
- Fli4l in der Version 2.0.1


Installation:
-------------
Hinweis: OPT_BRIDGE benötigt einen neuen Kernel, der dem Paket beigelegt ist.
Dieser Kernel basiert auf dem fli4l-2.0.1-kernel und sollte nur mit dieser 
oder neueren fli4l-versionen verwendet werden (sofern der fli4l-kernel nicht
geändert wurde).

Folgende Schritte sind zur Installtion nötig  

- Kopieren/Entpacken des Archives in das aktuelle fli4l-Verzeichnis
- im img-Verzeichnis von fli4l den Kernel ersetzen:
  - die Datei "kernel" in "kernel-old" umbenennen
  - entweder die Datei "kernel-bridge" oder "kernel-bridge+ipchains" in 
    "kernel" umbenennen (siehe Hinweise)


Konfiguration:
--------------
Dazu die Datei "bridge.txt" im opt-Verzeichnis konfigurieren. Zwischen den 
eingetragenen Netzwerk-Devices wird dann "gebridget".

Für weitergehende Konfigurationen die Datei opt\etc\rc.d\rc.bridge anpassen.


Hinweise:
---------
Es kann nur *eine* Bridge erstellt werden.

Wozu die zwei Versionen des Kernels?
- "kernel-bridge" ermöglicht das Bridgen zwischen zwei oder mehreren Devices
- "kernel-bridge+ipchains" erlaubt zusätzlich das Filteren des Netzverkehrs 
   auf der Bridge mit Hilfe von ipchains (siehe Firewall-Hinweise)

Wo gibt's weiterführende Informationen zum Linux Bridging?
- http://www.linuxdoc.org/HOWTO/mini/Bridge.html
- http://www.linuxdoc.org/HOWTO/mini/Bridge+Firewall.html

Woher stammen die verwendeten Dateien?
- brcfg: http://diverter.sourceforge.net/tools/bridgex-0.30.tar.gz
- patch: http://ac2i.tzo.com/bridge_filter

Wer betreut opt_bridge? 
- OPT_BRIDGE-2.0.1: Olivier Oswald <opt_bridge-AT-swissinfo.org>
- OPT_BRIDGE-1.6.2: Michael Hanselmann <opt_bridge-AT-bluemail.ch>

Danke sage ich.... 
- Michael Hanselmann für OPT_BRIDGE-1.6.2 und den EMail-Support
- Den Entwicklern von und rund um fli4l für den super Router


Firewall-Hinweise:
------------------
Der Netzverkehr auf einer Bridge wird normalerweise auf direktem Weg
zwischen den Netzwerk-Devices durchgeschaltet. Soll dieser Netzverkehr
zusätzlich gefiltert werden, muss der "kernel-bridge+ipchains" verwendet 
werden.

Dabei wird im System eine neue ipchains-Kette namens "bridgein" erstellt,
die dann fast wie die Standard-Ketten (input, output, forward) benutzt 
werden kann ("fast", da als Sprungziele nur ACCEPT und DENY verwendet
werden können, MASQ macht keinen Sinn und REJECT funktioniert nicht).

Ein Netzwerk-Device welches zu einer Bridge gehört kann also nur mit
Hilfe von "bridgein" gefiltert werden, alle anderen Devices werden wie
bisher mit "input", "output" und "forward" gehandhabt. Die Firewall-
Regeln von fli4l haben daher auf der Bridge keine Wirkung und die
entsprechenden ipchains-Regeln müssen "von Hand" gescripted werden, am 
einfachsten in rc.bridge.

Das Firewalling/Filtern mit Hilfe von ipchains kann hier nicht weiter
beschrieben werden. Doch auch dazu gibt es ein ausführliches HOWTO:
http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html


Entwickler-Hinweise:
--------------------
Hier noch, wie ich den neuen Kernel für fli4l-2.0.1 erstellt habe. Ich bin dabei
weitgehend fm's Dokumentation (src\README, Abschnitt 6) zum Modifizieren des Kernels 
gefolgt, die ich hier mit den von mir eingefügten Zwischenschritten (5b und 6b,
siehe ***) einfach mal anhänge.

ps: brcfg muss aus "bridgex-0.30.tar.gz" compiliert werden.


6. Verwendung eines modifizierten Kernels
=========================================

Möchte man die Konfiguration des 2.2.19er Kernel für fli4l modifizieren,
muß man sich erst einmal alle notwendigen Kernel-Sources besorgen.

Am besten folgendermaßen vorgehen:

    1. Kernel-Sources und Patches herunterladen und unter /usr/src/ ablegen:

	http://www.kernel.org/pub/linux/kernel/v2.2/linux-2.2.19.tar.gz

    2. Kernel-Sources auspacken:

		cd /usr/src                     # dort gehört der Kernel hin
		rm linux                        # evtl. alten symlink löschen
		tar xvfz linux-2.2.19.tar.gz    # 2.2.19 auspacken
		ln -s linux-2.2.19 linux        # neuer symlink

    3. Die Datei kernel/dot-config aus diesem Verzeichnis als Vorlage nach
       /usr/src/linux-2.2.19/.config kopieren:

		cp .../fli4l-xxx/src/kernel/dot-config linux-2.2.19/.config

    4. Die Datei kernel/main.c aus diesem Verzeichnis nach
       /usr/src/linux-2.2.19/init/ kopieren:

		cp .../fli4l-xxx/src/kernel/main.c linux-2.2.19/init/main.c

       In diesem Source-Modul musste ich den Boot-Vorgang über die
       Date /etc/rc wieder einbauen. Dieser wurde nämlich im Original 2.2er
       Kernel entfernt. Als Vorlage habe ich Teile des main.c aus
       dem 2.0.38er Kernel verwendet.

    5. VPN-Patch installieren:

		cp .../fli4l-xxx/src/kernel/ip_masq_vpn-2.2.15.patch /usr/src
		cd /usr/src/linux-2.2.19
		patch -p1 <../ip_masq_vpn-2.2.15.patch 


*** 5b (OPTIONAL, siehe Hinweise) Damit eine Bridge in IPCHAINS-regeln verwendet 
       werden kann, ist zusätzlich dieser patch zu Installieren:

		cp .../linux-2.2.19-brfw2.diff /usr/src
		cd /usr/src/linux-2.2.19
		patch -p1 <../linux-2.2.19-brfw2.diff 


    6. Im Verzeichnis /usr/src/linux-2.2.19 den Kernel konfigurieren und
       abspeichern, z.B mit

		cd linux-2.2.19
		make menuconfig


*** 6b Vor dem Abspeichern der Kernel-Konfiguration unter "Networking" die
       "BRIDGING"-Option auf 'y' setzen.

       Dies kann auch vorgängig gemacht werden, indem in ".config" die Zeile
		# CONFIG_BRIDGE is not set
       in
		CONFIG_BRIDGE=y
       geändert wird.



    7. Kernel übersetzen, z.B. mit

		make dep
		make clean
		make zImage

       Siehe dazu auch /usr/src/linux-2.2.19/README

    8. arch/i386/boot/zImage nach ..../fli4l-xxx/img/kernel kopieren

...
