Semiautomatische Netzwerkkonfiguration.

Aus gegebenem Anlass musste ich diverse Rechner nicht nur per PXE mit dem selben Betriebssystem versorgen, sondern diese auch noch mit weiterer Netzwerkkonfiguration, bestehend aus weiteren IP-Adressen fue weitere Interfaces sowie Routingtabellen versorgen. Dabei war der Name des Rechners jeweils im Vorhinein klar; ebenso die darin verbaute Netzwerkkartensammlung. Als Resultat aus der haendischen Konfiguration entstand dann dieses kleine Skript -- vielleicht kann es ja einmal jemanem in aehnlicher Lage behilflich sein.
Das haette man bestimmt auch alles anders und viel schoener loesen koennen. So ging es aber am schnellsten.

#! /bin/sh

CONFS=$1
PC=$2

echo "Configuring for ID $PC using configurations from $CONFS."

echo "Setting IP."
IPCONF=`grep "$PC IP" $CONFS | sed 's/.*IP //'`

for a in $IPCONF
do
        iface=`echo $a|sed 's/:.*//'`;
        ipaddr=`echo $a|sed 's/.*://'`;
        echo "iface $iface gets ip $ipaddr"
        ifconfig $iface $ipaddr up
done

echo "Adding routing."

RLST=`grep "$PC ROUTING" $CONFS | awk '{printf("%s:%s ", $3, $4);}'`
for r in $RLST
do
        target=`echo $r|sed 's/:.*//'`
        router=`echo $r|sed 's/.*://'`

        echo "Adding route to $target, which is $router"
        route add $target $router
done

echo "Executing additional commands"
CLST=`grep "$PC SHELL" $CONFS | sed 's/.*SHELL //'`
echo $CLST
`$CLST`
Das Config-File besteht wie folgt aus Eintragsbloecken:
eins CONNECTIONS em0:34-1 re0:36-1
eins IP re0:1.1.1.3
eins ROUTING 2.2.2.1 1.1.1.1
eins ROUTING 3.3.3.1 1.1.1.1
eins ROUTING 4.4.4.1 1.1.1.1

zwei CONNECTIONS em0:34-2 re0:36-2
zwei IP re0:1.1.1.2
zwei ROUTING 2.2.2.1 1.1.1.1
zwei ROUTING 3.3.3.2 1.1.1.1
zwei ROUTING 4.4.4.3 1.1.1.1

drei CONNECTIONS em0:34-2 re0:36-2
drei IP re0:1.1.1.1 re1:2.2.2.1
drei ROUTING 3.3.3.1 2.2.2.3
drei ROUTING 4.4.4.2 2.2.2.3
drei SHELL sysctl net.inet.ip.forwarding=1
Der Aufruf ist simpel:
shell# sh autocofig.sh configs.cf zwei

Stichworte:


Impressum