Posts Tagged ‘diskless router’

Gateway Firewall Script II (optimiert)

Im Folgenden seht ihr ein Skript, das alle nötigen Einstellungen für eine grobe Firewall und Gateway-Funktionalität bietet. mehr

Cisco 2600 Tipps und Tricks

Password recovery
*=*=*=*=*=*=*=*=*

Zuerst verbinden wir uns mittels Terminal auf den Router und ermitteln mit:

router show version
Cisco Internetwork Operating System Software
.
.
.
Configuration register is 0×2102

die Einstellungen des Konfigurationsregisters (0×2102). Anschließend führenwir einen Kaltstart durch und betätigen beim Neustart innerhalb der esrten 60 Sekunden die BREAK Tast. !!!Achtung!!! falls kein Prompt rommon erscheint müssen Sie die Konfiguration der Terminalsoftware überprüfen und gegebenenfalls eine Taste/Kombination konfigurieren.

Wenn sie am Prompt rommon> angelangt sind geben sie “confreg” ein.

rommon confreg

Configuration Summary
enabled are:
load rom after netboot fails
console baud: 9600
boot: the ROM Monitor

do you wish to change the configuration? y/n [n]: y
enable “diagnostic mode”? y/n [n]:
enable “use net in IP bcast address”? y/n [n]:
disable “load rom after netboot fails”? y/n [n]:
enable “use all zero broadcast”? y/n [n]:
enable “break/abort has effect”? y/n [n]:
enable “ignore system config info”? y/n [n]: y
change console baud rate? y/n [n]:
change the boot characteristics? y/n [n]:
enter to boot:
0 = ROM Monitor
1 = the boot helper image
2-15 = boot system
[0]: 2

Configuration Summary
enabled are:
load rom after netboot fails
console baud: 9600
boot: image specified by the boot system commands
or default to: cisco2-C2600

do you wish to change the configuration? y/n [y]: n
You must reset or power cycle for new config to take effect
rommon>reset

Anschließend die Konfigurationsfrage mit No beantworten und am Router> den Befehl enable eingeben. Wenn Ihr Passwort verschlüsselt ist, kopieren Sie ersteinmal Ihre Konfiguration mittels

router# copy start run

in das RAM.

router # config term
router(config) # enable secret [strg-z]
router # cop run start
router # conf term
router(config) # config-register 0×21102

Wenn Sie einen anderen Wert bei show version erhalten haben, dann tragen sie diesen anstatt 0×2102 ein. bestätigen Sie mit [strg-z] und geben reload ein.

Passwort Absicherung
*=*=*=*=*=*=*=*=*=*=

Es gibt eine Reihe von Möglichkeiten die Authentifizierung an Routern zu konfigurieren(TACACS).

Allerdings gibt es bei den Passwörtern einige Unterschiede, als erstes sei die Länge genannt und natürlich aus welchen Zeichen es sich zusammensetzen kann. Das line Passwort kann beispielsweise 80 Zeichen lang sein und alphanumerische Zeichen und Leerzeichen enthalten. Im Gegensatz hierzu, kann das Passwort für den Priviligierten Modus (enable) nur 25 Zeichen enthalten und dies ohne Leerzeichen. Des weiteren dürfen keine Passwörter der Form Nummer-Leerzeichen-String angelegt werden. Während ’susi 3′ erlaubt ist kommt es bei ‘3 susi’ zu Problemen. Darüber hinaus sind Passwörter case sensitiv, d.h. sie unterscheiden zwischen Groß- und Kleinschreibung.

Diskless Router

ÜBERSETZUNG DES LINUX KERNELS

Für die Diskless-Router gibt es zwei Komponenten, die über TFTP geladen werden – den Linux Kernel und den Init-Ramdisk. Hier wird das Erstellen des Kernels beschrieben.

Für alle Diskless-Routers existiert nur ein Kernel-Image und ein RAM-disk, welche gleich für alle Routers sind. Die Konfiguration (Hostname und IP-Adressen) sind in Konfigurationsdateien auf dem TFTP-Server abgelegt und nicht hardcodiert.

Die IP-Adresse für die äussere Schnittstelle (Richtung Backbone) wird beim Hochfahren über DHCP zugewiesen, die anderen Schnittstellen (Richtung Subnetz) werden durch das rc-Script aus dem inird konfiguriert.

Der kernel bzImage-2.4.xx-dhcp hat die IP-Autoconfiguration (IP_PNP) einkompiliert. Beim Hochfahren konfiguriert der Kernel die externe Schnittstelle über DHCP (kein dhcp-client Daemon ist notwendig).

###########################

Wichtige einkompilierte Eigenschaften:

- Netzwerktreibern: eepro100, e1000, tulip, 3com-vortex – IP-Autokonfiguration mit DHCP – keine Unterstützung für lokale Datenträger (HDD/FDD), Mouse, Sound, … – Init-Ramdisk Unterstützung – ext2fs Unterstützung (für initrd) – Kernel-keyboard Layout ist auf deutsch-qwertz gepatched

###########################

Die Übersetzung des Kernels läuft ganz normal ab:

% tar xvjf linux-2.4.20.tar.bz2 % cd linux-2.40.20 % loadkeys -m /usr/share/keymaps/i386/qwertz/de-latin1-nodeadkeys.kmap.gz > drivers/char/defkeymap.c % make mrproper

# Jetzt die Konfigration anpassen

% make menuconfig # oder auch ‘make oldconfig’ % make dep && make bzImage

Den fertigen Kernel in das TFTP-Verzeichnis kopieren (zuerst ein Backup des alten Kernels vornehmen!).

% cp arch/i386/boot/bzImage /tftpboot/bzImage-2.4.xx-dhcp

###########################

Die Übersetzungsoptionen im Überblick:

% egrep -v ‘^$|^#’ .config


CONFIG_X86=y
CONFIG_UID16=y
CONFIG_EXPERIMENTAL=y
CONFIG_M486=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=4
CONFIG_X86_USE_STRING_486=y
CONFIG_X86_ALIGNMENT_16=y
CONFIG_X86_PPRO_FENCE=y
CONFIG_X86_MCE=y
CONFIG_NOHIGHMEM=y
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_ISA=y
CONFIG_PCI_NAMES=y
CONFIG_SYSVIPC=y
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_PACKET=y
CONFIG_FILTER=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_SYN_COOKIES=y
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_VORTEX=y
CONFIG_NET_PCI=y
CONFIG_TULIP=y
CONFIG_EEPRO100=y
CONFIG_E1000=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_RAMFS=y
CONFIG_PROC_FS=y
CONFIG_EXT2_FS=y
CONFIG_MSDOS_PARTITION=y
CONFIG_VGA_CONSOLE=y

ERSTELLUNG DES RAMDISKS

Der initrd enthält folgende Teile:

- busybox (eine Binary, die wichtige Unix-Befehle implementiert) – dhcp-relay – inetd – tcpd – tcpdump – Konfigurationsdateien und Skripten

Wichtige Debian-Entwicklungspakete:

- binutils – bison – gcc – flex – libc6-dev – make

###########################

Tools und Sourcen zur Erstellung des initrd sind in Verzeichnissen unter /root/diskless-image/ zu finden:

1) Skripten zur Erstellung das init-Ramdisks

./bin/doit ./bin/makedev # wird aus doit aufgeruft

2) Masterkopien der Scripts und Konfigurationsdateien, die durch auf den Init-Ramdisk kopiert werden:

./Master/bin/pingask ./Master/etc/* ./Master/rc

3) Konfigurationsdatei für die Übersetzung von Busybox (und auch Backupkopie von .config aus dem Linux-Kernel).

./Config/busybox-Config.h ./Config/linux-2.4.xx-config

4) Mountpoint für die Erstellungs des initrd, angelegt und benutzt von Skript doit.

./mnt

5) Sourcen und Patches für die eingesetzte Software

./busybox-0.60.5/
./busybox-0.60.5.tar.bz2
./dhcp-3.0pl2/
./dhcp-3.0pl2.tar.gz
./libpcap-0.7.2
./libpcap-0.7.2.tar.gz
./netkit-base-0.17/
./netkit-base-0.17.diff.gz
# patch für inetd (ignore field 5 in inetd.conf)
./netkit-base-0.17.tar.gz ./tcp_wrappers_7.6/
./tcp_wrappers_7.6.diff.gz ./tcp_wrappers_7.6.tar.gz
./tcpdump-3.7.2 ./tcpdump-3.7.2.tar.gz

Für den TCP-Wrapper Patch sieh:

http://beyond.linuxfromscratch.org/view/cvs/basicnet/tcpwrappers.html

(This patch alters the original path and logging facility of the original tcpwrappers program.)

6) Das generierte initrd.gz

./initrd.gz

###########################

Alle Programme werden mit dem Skript doit übersetzt und im initrd.gz zusammengepackt. Vorher können die Konfiguration von Busybox (Config/busybox-Config.h) und die Dateien in ./Master/* angepasst werden.

Alle Programme werden statisch kompiliert und auch gestripped, weil die standardmässige maximale Grösse für ein initrd ist nur 4MB.

% cd /root/diskless-image % RECOMPILE=no bin/doit …output überprüfen… % cp /tftpboot/initrd-dhcp.gz /tftpboot/initrd-dhcp.gz.bck % cp initrd.gz /tftpboot/initrd-dhcp.gz

Die Variable RECOMPILE entscheidet, ob bin/doit die Programme neu entpackt und übersetzt (“yes” ist der Standardwert).

Für tiefere Änderungen in dem Build-Prozess muss das Skript bin/doit angepasst werden.

Änderungen in der Konfiguration der Diskless Routers sind im Verzeichnis ./Master und in /tftpboot/* vorzunehmen.

###########################

Wir nutzen kein /linuxrc (sieh linux/Documentation/initrd.txt für Details über /linuxrc), folgende Übersicht ist also nicht mehr wichtig.

Wie linux-kernel das Skript /linuxrc beim Hochfahren startet und root-device mountet:

1) initrd=xxxx – final root device is NOT ramdisk, linuxrc is executed mit PID > 1

2) initrd=xxxx root=/dev/ram0 – final root device IS ramdisk, linuxrc is NOT executed

3) initrd=xxxx root=/dev/ram0 init=/linuxrc – final root device IS ramdisk, linuxrc IS executed mit PID = 1 (init)

linuxrc: exec /sbin/init => kernel panic after halt (attempt to kill init)

Busybox as init: after halt/reboot: “Oops, attempted to kill init.”

Skripten zur Erstellung des Init-Ramdisks

* doit – Erstellung des Init-Ramdisks initrd

#=————————————————————————=#

#!/bin/sh

# $Id: doit,v 1.3 2003/06/30 07:37:18 karel Exp karel $

# This scripts builds the init ramdisk. # The variable RECOMPILE decides whether to recompile the software # from scratch (using previously saved configuration) or just use # already built binaries.

WDIR=$HOME/diskless-image INITRD=$WDIR/initrd MNT=$WDIR/mnt MASTER=$WDIR/Master CONFIG=$WDIR/Config

# build from scratch? RECOMPILE=${RECOMPILE:=yes}

# install tcpdump? TCPDUMP=${TCPDUMP:=yes}

######### # Create the init-ramdisk file

dd if=/dev/zero of=$INITRD bs=4M count=1 # default max size is 4MB mke2fs -F -m0 $INITRD

# Mount it

[ -d $MNT ] || mkdir $MNT mount -t ext2 -o loop $INITRD $MNT && rmdir $MNT/lost+found # pretty useless with ramdisk

# Create the directory structure

cd $MNT mkdir -p bin dev etc proc sbin usr/bin usr/sbin var/log var/run

# Create the required device files

cd $MNT/dev && $WDIR/bin/makedev

### CFG & SCRIPTS ###
# Copy the configuration files and the rc-Script

cd $WDIR cp -v $MASTER/etc/inittab $MNT/etc cp -v $MASTER/rc $MNT cp -v $MASTER/bin/pingask $MNT/bin

cd $WDIR

### BUSYBOX ###
# Build the busybox binary according to the busybox-Config.h

if [ "$RECOMPILE" == "yes" ] ; then [ -d busybox-0.60.5 ] && rm -r busybox-0.60.5 tar xvjf busybox-0.60.5.tar.bz2 && cd $WDIR/busybox-0.60.5 && cp -v $CONFIG/busybox-Config.h Config.h && make LDFLAGS=-static || exit 2 fi

# Install the busybox binary and create the symlinks

cd $WDIR/busybox-0.60.5 && ./install.sh $MNT cd $WDIR

### DHCP-RELAY ###
# Build the dhcp-relay if [ "$RECOMPILE" == "yes" ]; then [ -d dhcp-3.0pl2 ] && rm -r dhcp-3.0pl2 tar xvzf dhcp-3.0pl2.tar.gz && cd $WDIR/dhcp-3.0pl2 && ./configure && make CC=”gcc -static” || exit 2 strip work.linux-2.2/relay/dhcrelay fi

# Install the dhcrelay binary

cd $WDIR cp -v dhcp-3.0pl2/work.linux-2.2/relay/dhcrelay $MNT/sbin

### INETD ###
# Build inetd
if [ "$RECOMPILE" == "yes" ]; then tar xvzf netkit-base-0.17.tar.gz && cd netkit-base-0.17 && zcat ../netkit-base-0.17.diff.gz | patch -p0 && ./configure && make CC=”gcc -static” SUB=inetd || exit 2 strip inetd/inetd fi

# Install inetd and copy the configuration on the init ramdisk cd $WDIR cp -v netkit-base-0.17/inetd/inetd $MNT/usr/sbin cp -v $MASTER/etc/inetd.conf $MNT/etc

### TCPD ###
# Build TCP-Wrapper tcpd

if [ "$RECOMPILE" == "yes" ]; then [ -d tcp_wrappers_7.6 ] && rm -f tcp_wrappers_7.6 tar xvzf tcp_wrappers_7.6.tar.gz && cd tcp_wrappers_7.6 && zcat ../tcp_wrappers_7.6.diff.gz | patch -p1 && make CC=”gcc -static” REAL_DAEMON_DIR=/usr/sbin linux || exit 2 strip tcpd fi

# Install tcpd and copy the configuration

cd $WDIR cp -v tcp_wrappers_7.6/tcpd $MNT/usr/sbin cp -v $MASTER/etc/hosts.allow $MASTER/etc/hosts.deny $MNT/etc

### TCPDUMP ###
# Build tcpdump

if [ "$RECOMPILE" == "yes" ]; then [ -d libpcap-0.7.2 ] && rm -r libpcap-0.7.2 tar xvzf libpcap-0.7.2.tar.gz && cd libpcap-0.7.2 && ./configure && make CC=”gcc -static” || exit 2 cd .. [ -d tcpdump-3.7.2 ] && rm -r tcpdump-3.7.2 tar xvzf tcpdump-3.7.2.tar.gz && cd tcpdump-3.7.2 && ./configure –prefix=/usr –disable-ipv6 –without-crypto –disable-smb && make CC=”gcc -static” || exit 2 strip tcpdump fi

# Install tcpdump

if [ "$TCPDUMP" == "yes" ]; then cd $WDIR cp tcpdump-3.7.2/tcpdump $MNT/usr/sbin fi

### # Print disk-usage (there should remain some space for logs)

echo df -h $MNT

# Unmount and compress the init ramdisk

umount $MNT gzip -f $INITRD

echo The ramdisk $INITRD.gz is ready to use.

#=————————————————————————=#

* makedev – Erstellung der Device-Files in /dev (aufgeruft von doit)

#=————————————————————————=#

#!/bin/sh

# owner ids root=”0:0″ kmem=”0:0″ tty=”0:0″

makedev() { # Usage: makedev FILE c 1 8 $root 644 mknod -m $6 $1 $2 $3 $4 && chown $5 $1 }

# console makedev console c 5 1 $root 600 &&

# core ln -s /proc/kcore core &&

# file descriptors – link to proc (base for stdin/out/err) ln -s /proc/self/fd fd &&

# allways full device makedev full c 1 7 $root 666 &&

# kernel memory makedev kmem c 1 2 $kmem 640 &&

# system memory makedev mem c 1 1 $kmem 640 &&

# null makedev null c 1 3 $root 666 &&

# system ports makedev port c 1 4 $kmem 640 &&

# standard I/O streams (links to file descriptors in /proc) ln -s fd/2 stderr && ln -s fd/0 stdin && ln -s fd/1 stdout &&

# controlling terminal makedev tty c 5 0 $tty 666 &&

# virtual console terminals for i in 0 1 2 3 4 5 6; do makedev tty$i c 4 $i $root 600 done &&

# virtual console memory for i in 0 1 2 3 4 5 6; do makedev vcs$i c 7 $i $tty 640 && makedev vcsa$i c 7 $[$i+128] $tty 640 done &&

# zero makedev zero c 1 5 $root 666

#=————————————————————————=#

Skripten, die auf Diskless-Routers laufen

* rc Init-Skript (startet Dienste und konfiguriert Netzwerk)

#=————————————————————————=#

#!/bin/sh

# $Id: rc,v 1.1 2003/06/26 10:55:34 karel Exp karel $

### rc script called by init during system boot (see /etc/inittab)

### /proc should be mounted to get better results with BusyBox tools mount -t proc proc /proc

### Start daemons [ -x /sbin/klogd ] && /sbin/klogd # [ -x /sbin/syslogd ] && /sbin/syslogd -R loghost -L [ -x /sbin/syslogd ] && /sbin/syslogd

echo Stage one finished

### Load configuration of the other network interfaces from tftp server ### (the boot interface was configured via dhcp)

### Extract the IP of the boot server from the kernel buffer BOOTSERVER=`dmesg | grep bootserver= | cut -f 1 -d , | cut -f 2 -d =`

# Use it as TFTP Server unless TFTPSERVER set as kernel parameter TFTPSERVER=${TFTPSERVER:-”$BOOTSERVER”}

# Argument for dhcp-relay DHCPSERVER=${DHCPSERVER:-”$BOOTSERVER”}

HOSTNAME=`hostname`

# Name of the file where non-dhcp interfaces are listed IFACES=interfaces

echo Bootserver: $BOOTSERVER echo TFTP Server: $TFTPSERVER echo Hostname: $HOSTNAME

echo IP-Config: other network interfaces

IP=127.0.0.1 ifconfig lo $IP && echo “lo: IP=$IP”

tftp -g -r /$HOSTNAME/$IFACES -l $IFACES $TFTPSERVER &&

INTERFACES=`grep -v ^# $IFACES`;

for IFACE in $INTERFACES; do unset IP NETMASK BCAST

tftp -g -r /$HOSTNAME/$IFACE -l $IFACE $TFTPSERVER && echo “$IFACE: `grep ^IP $IFACE`” && eval `cat $IFACE` && ifconfig $IFACE $IP netmask $NETMASK broadcast $BCAST up

# tftp always creates the local file rm $IFACE done

rm $IFACES

### Start dhcp-relay

[ -x /sbin/dhcrelay ] && /sbin/dhcrelay $DHCPSERVER

### Start inetd [ -x /usr/sbin/inetd ] && /usr/sbin/inetd

### Enable routing echo 1 > /proc/sys/net/ipv4/ip_forward

### Remove startup script(s) rm -f /rc* 2>&1

echo Stage two finished

#=————————————————————————=#

* pingask – “Safe” ping (ping für Console 2, feste Parameter)

#=————————————————————————=#

#!/bin/sh

echo -n “Enter an IP address to ping: ” read IP IP=`echo $IP | cut -f 1 -d ” “` ping -c 4 $IP

#=————————————————————————=#

DER BOOT PROZESS DER DISKLESS-ROUTER

1) Die Äussere Netzwerkkarte startet mit einem DHCP request und bekommt vom DHCP Server folgende relevante Parameter als die Antwort:

- eigene IP-Adresse, Netzmaske, Broadcast, default Gateway

- IP-Adresse des Boot-Servers

- Pfad der Boot-Datei, die aus dem TFTP Server geladen und ausgeführt werden soll (/tftpboot/pxelinux.0)

2) pxelinux.0 ist ein Linux Boot Loader. Er versucht folgende Datei auf dem TFTP-Server zu finden:

/tfttpboot/pxelinux.cfg/

Sie enthält ähnliche Informationen wie lilo.conf, d.h. sie bestimmt, welcher linux kernel und mit welchen Parametern gebootet werden soll. Beispiel:

— /tftpboot/pxelinux.cfg/AC11000B — default linux

label linux kernel /bzImage-2.4.20-dhcp append root=/dev/ram0 initrd=/initrd-dhcp.gz rw panic=60 ip=:::::eth1:dhcp TFTPSERVER= —

Die Pfade zum Kernel und Ramdisk enthalten nicht den Prefix “/tftpboot” (wegen der Option “root-path” in dhcpd.conf).

Hier die Beschreibung der Parameter (sieh auch kernel-parameters.txt und nfsroot.txt in /usr/src/linux/Documentation):

root=/dev/ram0 – das finale Root-Filesystem ist im ram(disk)

initrd=/initrd-dhcp.gz – beim Booten soll dieser ramdisk-file geladen werden

rw – root-disk sofort beim Booten read/write einhängen

panic=60 – reboot automatisch nach 60sec, wenn ein kernel panic passiert

ip= – welche Netzwerk-Schnittstelle und wie konfiguriert werden soll. Funktioniert nur für eine Schnittstelle (nur der letzte ip=… oder nfsaddr=… eingegebene Parameter wird genutzt).

TFTPSERVER=.. – nicht wirklich ein kernel Parameter – unbekannte Optionen in der Form variable=value werden an init übergeben und als Environment-Variablen exportiert. Diese Variable wird später von dem Skript /rc benutzt.

3) pxelinux.0 ladet den angezeigten Kernel in den Speicher und führt ihn mit den Parametern aus.

4) Der Kernel bootet, initialisiert die Hardware und konfiguriert noch einmal über DHCP die äussere Netzwerk-Schnittstelle (IP_PNP Feature). Von dem DHCP Server bekommt er erneut folgende relevante Parameter (diesmal wird keine Boot-Datei übergeben):

- eigene IP-Adresse, Netzmaske, Broadcast, default Gateway

- IP-Adresse des Boot-Servers

- seinen Hostnamen

- den Root-Pfad auf dem TFTP-Server

5) Dannach entpackt der Kernel die ramdisk-Datei im Speicher und hängt sie als sein Root-Filesystem ein. Wenn alles in Ordnung ist, startet mit dem PID=1 das init-Programm /sbin/init.

6) Das init-Programm startet weitere Programme nach der Konfiguration in /etc/inittab.

— # /etc/inittab

::sysinit:/rc

### uncomment next line to debug on console 7
#tty7::askfirst:/bin/sh # the variable TFTPBOOT must be set in pxelinux.cfg/xxx as “kernel” parameter
::askfirst:/bin/ping -c 4 $TFTPSERVER
tty2::askfirst:/bin/pingask
tty3::askfirst:/sbin/ifconfig | more
tty4::askfirst:/sbin/route
tty5::askfirst:/bin/ps ax | more
tty6::respawn:/usr/bin/tail -f /var/log/messages
::ctrlaltdel:/sbin/reboot

Als erstes (Zeile sysinit) wird das Script /rc ausgeführt, welches:

- startet die Daemons klogd und syslogd

- aktiviert die anderen Netzwerkschnittstellen; die Konfiguration wird über TFTP aus dem Bootserver geholt, wo sie in den Verzeichnissen /tftpboot// liegt.

- startet die Daemons dhcp-relay und inetd (sieh auch den nächsten Punkt)

- aktiviert IP Forwarding

- löscht sich aus dem RAM-Disk

Auf den Consolen 1-5 werden die Programme ping, pingask, ifconfig, ps, route ausgeführt, wenn auf die Taste Enter gedrückt wird.

Auf der Console 6 werden die Meldungen aus der Log-Datei /var/log/messages angezeigt.

7) Der Daemon inetd erwartet Verbindungen auf dem TCP Port 1 und startet über den TCP-Wrapper tcpd den Shell /bin/sh im interaktiven Modus. TCP-Wrapper sperrt alle Verbindungen, die nicht von einer der IP-Adressen des Routers R-S01 kommen – sieh auch etc/hosts.allow und etc/hosts.deny.

— # /etc/inetd.conf

1 stream tcp nowait r00t /usr/sbin/tcpd /bin/sh -i —

Den Source von inetd.c habe ich gepatched, damit er das fünfte Feld in der inetd.conf ignoriert und Prozesse immer mit UID und GID gleich 0 startet. Der RAM-Disk entält nämlich keine C-Bibliotheken, die die Auflösung Name-UID ermöglichen (die Funktion getpwnam).

KONFIGURATION EINES NEUEN DISKLESS-ROUTERS AUF DEM R-S01

(angenommen die Verkabelung und die Hardware sind bereit)

A. Wichtige Pfade auf dem TFTP-SERVER:

/etc/dhcp3/* # Konfiguration des DHCP-Servers

/tftpboot/pxelinux.0 # PXE boot loader (~lilo) /tftpboot/pxelinux.cfg/* # Konfiguration für pxelinux (~lilo.conf)

/tftpboot/bzImage-2.4.xx-dhcp # Linux Kernel für die Disklesses /tftpboot/initrd-dhcp.gz # Ramdisk für die Disklesses

/tftpboot//* # Konfiguration für das rc-Skript /tftpboot//interfaces # Liste der inneren Schnittstellen /tftpboot//eth* # Konfiguration der inneren Schnittstellen

/root/diskless-image/* # Sourcen zur Erstellung des kernels und initrd

B. Konfigurationsanleitung

1) Die IP-Addresse und den Hostnamen für den Router in der DHCP-Konfiguration bestimmen (in dem richtigen Subnet-Block!):

— /etc/dhcp3/dhcpd.conf —

host { hardware ethernet ; fixed-address ; } —

Die Reihenfolge, in der die Intel-Karten initialisiert werden, muss nicht der Reihenfolge entsprechen, in der Linux die Schnittstellen konfiguriert (eth0, eth1, …)!

Die neue Konfiguration aktivieren:

% /etc/init.d/dhcp3-server restart

2) Die Konfiguration für den PXE-BootLoader erstellen:

% cd /tftpboot/pxelinux.cfg % vi `gethostip -x `

Beispiel (sieh auch booting.txt):

— default linux

label linux kernel /bzImage-2.4.20-dhcp append root=/dev/ram0 initrd=/initrd-dhcp.gz rw panic=60 ip=:::::eth1:dhcp TFTPSERVER= —

Noch einen symlink erstellen, damit man für spätere Änderungen die HEX-Adresse nicht mehr braucht.

% ln -s `gethostip -x `

3) Konfiguration für das rc-Script vorbereiten:

% mkdir /tftpboot/ % cd /tftpboot/

Hier zwei oder mehr Dateien nach folgendem Beispiel anlegen (interfaces und eth*). In der Datei interfaces darf nicht die Schnittstelle stehen, die über DHCP konfiguriert wird:

—interfaces— # interfaces to configure via “tftp” eth0 eth2 eth3 —

—eth0— IP=xxx.xxx.xxx.xxx NETMASK=xxx.xxx.xxx.xxx BCAST=xxx.xxx.xxx.xxx —

Falls erforderllich, das rc-Skript unterstüzt auch IP-Aliasen (zB. eth0:0).

4) Den Diskless-Router rebooten und beten :-D

nach oben