Mehrere DHCP-Server abfragen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
emge
Beiträge: 1525
Registriert: 20.10.2003 22:05:46
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: 50° 45' 0" N 12° 10' 0" E

Mehrere DHCP-Server abfragen

Beitrag von emge » 07.09.2004 10:16:04

Hallo,

in meinem Notebook sind 2 NW-Karten (WLAN und Ethernet). Das Teil wird oft in unterschiedlichen Netzen betrieben. Im Büro hängt es mit dem Ethernet-Adapter am Netz und zu Hause via WLAN. In beiden Netzen wird die Konfiguration über DHCP bezogen.

Es werden beide Devices beim Starten mit DHCP konfiguriert und von einem von beiden wird dann auch die NW-Konfiguration empfangen. Leider werden beide Devices nacheinander abgefragt. Erst eth0 - das Ethernet-Device - wenn dort ein Timeout kommt, dann wird erst das WLAN-Device befragt, von dem dann die Konfiguration kommt.

Das Lästige ist das Warten auf den Timeout. Der liegt momentan bei etwa 1,5 min, in denen erstmal nichts passiert.

Ich hätte diese beiden Abfragen gern entweder parallelisiert oder wengistens das Timeout auf max. 15 sec runtergesetzt, so dass die Wartezeit nicht so lang ist.

Leider hab ich null Peilung, wo ich das einstellen kann und ob das überhaupt möglich ist.

Einen Vorschlag hab ich bekommen, entweder in /etc/network/options zu schauen oder die ifup-Scripte anzupassen. Bei beiden Varianten schaue ich wie die Sau ins Uhrwerk.

Wäre nett, wenn mir da jemand auf die Sprünge helfen könnte.

Grüße, Marco

Benutzeravatar
ckihm.deb
Beiträge: 263
Registriert: 26.12.2002 18:49:38
Wohnort: Saarbrücken

Beitrag von ckihm.deb » 07.09.2004 10:29:41

Vielleicht ein Workaround:

I1) n der interfaces.conf die devices nicht auf auto stellen, damit das booten schnell geht.

2) falls die DHCP Server verschiedene IP Adressen haben, ein eigenes Script schreiben welches einen ping (dort kann man glaube ich eine timeout option mitgeben) an einen Server absetzt und in einem if $? then .. else Konstrukt entsprechen dem Status ein ifup ethx macht.

3) das Script beim start ausführen

Gruss christian
christian

Benutzeravatar
emge
Beiträge: 1525
Registriert: 20.10.2003 22:05:46
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: 50° 45' 0" N 12° 10' 0" E

Beitrag von emge » 07.09.2004 10:34:26

ckihm.deb hat geschrieben:Vielleicht ein Workaround:

I1) n der interfaces.conf die devices nicht auf auto stellen, damit das booten schnell geht.

2) falls die DHCP Server verschiedene IP Adressen haben, ein eigenes Script schreiben welches einen ping (dort kann man glaube ich eine timeout option mitgeben) an einen Server absetzt und in einem if $? then .. else Konstrukt entsprechen dem Status ein ifup ethx macht.

3) das Script beim start ausführen
Ich bin verwirrt. Ich dachte, bei DHCP geht es darum, dass man nicht wissen muss, wo denn der DHCP-Server genau läuft, sondern dass ein Broadcast ins Netzwerk geschickt wird, auf den dann irgendein DHCP-Server antwortet und mir die gewünschten Informationen übermittelt.

Wenn ich ein Ping versenden will, muss ich ja das passende Device schonmal konfiguriert haben, was aber (zumindest bei mir auf Arbeit) der Massgabe wiederspricht, dass keine festen IPs verwendet werden dürfen.

Grüße, Marco

Benutzeravatar
ckihm.deb
Beiträge: 263
Registriert: 26.12.2002 18:49:38
Wohnort: Saarbrücken

Beitrag von ckihm.deb » 07.09.2004 11:02:38

Du hast recht, ich habe bei meiner Antwort nicht richtig überlegt. Tut mir leid. Ich habe DNS Server im Kopf gehabt.
christian

Benutzeravatar
emge
Beiträge: 1525
Registriert: 20.10.2003 22:05:46
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: 50° 45' 0" N 12° 10' 0" E

Beitrag von emge » 07.09.2004 11:43:49

ckihm.deb hat geschrieben:Du hast recht, ich habe bei meiner Antwort nicht richtig überlegt. Tut mir leid. Ich habe DNS Server im Kopf gehabt.
*steinvomherzfall* Ich dachte schon, ich hab die ganze Zeit einer Fata Morgana nachgejagt und hätte alles wesentlich einfacher haben könne :-)

Die Variante mit einem Script hatte ich bisher auch im Einsatz. Einem (händisch zu startenden) Skript hab ich bisher den aktuellen Ort mitgegeben und das hat dann die Interfaces gestartet, die Routen gesetzt, DNS eingetragen, Konfigfiles für apt und den Konqueror gesetzt,... Das ganze ist mir jetzt auf den Senkel gegangen, zumal in unserer Firma eine große IP-Adressumstellung anstand, und ich bin auf DHCP umgestiegen.

Grüße, Marco

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 07.09.2004 20:34:07

ich hab mir ein script geschrieben, das das alles automatisch macht, es merkt ob ein kabel am ethernet steckt oder nicht, desweitern erkennt es um welches netzt es sich handelt wlan eth, home, office und connected auch direkt.

Code: Alles auswählen

#!/bin/bash
#===================================================================================
#
#         FILE:  NETWORK1.sh
#
#        USAGE:  ./1.sh 
#
#     SYNOPSIS:  
#
#  DESCRIPTION:  
#      OPTIONS:  ---
# REQUIREMENTS:  ---
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  Michel Pelzer (), michel@pelzernet.de
#      COMPANY:  ATecoM GmbH
#      VERSION:  1.0
#      CREATED:  21.08.2004 11:26:20 CEST
#     REVISION:  ---
#===================================================================================
#DEVICES
DRIVER="ndiswrapper"
NICKNAME="Michel"
#COLOURS
CS="\\033[1;32m"
CF="\\033[1;31m"
CN="\\033[0;39m"

ifup lo

# LAN
####################################################################################
lantest () {
DEVICE=`ifconfig | grep eth0 | gawk 'NR == 1 {print $1}'`
if [ -z $DEVICE ]; then
        #echo "setze test lan auf"
        ifconfig eth0 1.1.1.1 netmask 0.0.0.0 up
        sleep 4
fi
LINKSTATUS=`ethtool eth0 |grep Link | gawk '{print $3}' | sed -e 's,[:],,g'`
if [ $LINKSTATUS == "yes" ]; then
        echo -e $CS"found"$CN
     else
        ifconfig eth0 down
        echo -e $CF"not found"$CN
fi
}
echo -en "Network: Checking for Cabel: "

lantest

echo -e "Network: Negotiating with Network: Please wait ..."

case $LINKSTATUS in
       yes)
       WLAN=`cat /proc/net/wireless | grep wlan* | gawk '{print $1}' | sed -e 's,[:],,g'`
       ifconfig $WLAN down >/dev/null 2>&1
       dhclient eth0 >/dev/null 2>&1
       RESULT=`ifconfig | grep -n2 eth0 | gawk 'NR == 2 {print $2}'`
       if [ $RESULT = "inet" ]; then
           GATEWAY=`route -n | grep eth0 | grep -v 255.* | gawk '{print $2}'`
           ping -c 1 $GATEWAY >/dev/null 2>&1
           RESULT=$?
           if [ $RESULT -eq 0 ]; then
           echo -en "Network: Connection Established with " $CS
           case $GATEWAY in
               10.2.4.1)
               echo "atecom"
               ;;
               192.168.120.1)
               echo "pelzernet"
               ;;
               *)
               echo "unknown"
               ;;
           esac
           fi
       fi
       echo -e $CN
       ;;
       no)
# Wlan
####################################################################################
        wlanscan () {
        WLAN=`cat /proc/net/wireless | grep wlan* | gawk '{print $1}' | sed -e 's,[:],,g'`
        if [ -z $WLAN ]; then
                #echo "lade treiber"
                modprobe $DRIVER
                WLAN="wlan0"
                #echo "treiber geladen"
        fi
        ESSID=`iwlist $WLAN scan | gawk 'NR == 3 {print $1}' | sed -e 's,["],,g' -e 's,[ESSID:],,g'`
        }

        wlanscan

        gateway () {
        GATEWAY=`route -n | grep $WLAN | grep -v 255.* | gawk '{print $2}'`
        }

        connect () {
        iwconfig $WLAN essid $ESSID nickname $NICKNAME $KEY
        dhclient $WLAN >/dev/null 2>&1
        RESULT=`ifconfig $WLAN | gawk 'NR == 2 {print $1}'`
        if [ $RESULT = "inet" ]; then
            gateway
            ping -c 1 $GATEWAY >/dev/null 2>&1
            RESULT=$?
            if [ $RESULT -eq 0 ]; then
                   echo -e "Network: Connection established with" $CS\"$ESSID\"$CN
               else
                   echo -e "Network: Failed to connect to" $CS\"$ESSID\"$CN
            fi
        fi

        }

        case $ESSID in
            home)
                KEY="key HIER WEP KEY"
                connect
                ;;
            office)
                KEY="key HIER WEP KEY"
                connect
                ;;
            fiends)
                KEY="key HIER WEP KEY"
                connect
                ;;
            *)
                NICKAME="Voyager_MP"
                ;;
        esac
esac
ich habs bei mir in rc3 gehängt, dann probt mein laptop während des booten und connectet dann direkt, entsprechend.

du wirst ein paar kleine änderungen vornehmen müssen, sollte aber eigentlich klar sein.
Gruß Michel

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 07.09.2004 21:27:40

whereiam, netenv, laptop-net, laptop-netconf und switchconf lösen dein Problem mit verschiedenen Ansätzen. Vielleicht ist ja eins davon für dich geeignet.

cu

tafkad
Beiträge: 282
Registriert: 22.09.2004 13:54:26

Beitrag von tafkad » 22.09.2004 14:02:24

Auchwenn das Thema hier schon etwas älter ist, aber ein Timeout kann man in /etc/dhclient.conf einstellen. Suche zwar immer noch eine Möglichkeit das ganze anhand der Abfrage nach Netzwerkkabel plugged in zu machen, leider bisher noch nichts gefunden was meiner Meinung nach gut klappt.

Antworten