DHCP Failover / Hooks für linuxmuster-import-{devices,subnets} / iwatch

Hallo zusammen,

nachdem wir hier ein dhcp-failover eingerichtet haben. Stellt sich die Frage, wie die Konfiguration verteilen / anpassen nachdem ein Import gelaufen ist.

Zunächst das Setup:

  1. Master
  • /etc/dhcp/failover.conf
#failover configuration
failover peer "failover" {
  primary;
  address 10.0.0.1;
  peer address 10.0.0.6;
  max-response-delay 60;
  max-unacked-updates 10;
  mclt 3600;
  
# only failover primary does all as long as it's on
  split 256;
  
# load balancing 1:1
# split 128;
  load balance max seconds 3;
}
  • /etc/dhcp/dhcpd.conf
# failover
include "/etc/dhcp/failover.conf";
  • /etc/dhcp/subnets.conf
subnet 10.0.0.0 netmask 255.255.255.0 {
  option routers 10.0.0.253;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.0.0.255;
  option netbios-name-servers 10.0.0.1, 10.0.0.6;
  option host-name pxeclient;
  pool {
    failover peer "failover";
    range 10.0.0.100 10.0.0.200;
  }
}

usw. natürlich für jedes subnet

  1. Slave
  • /etc/dhcp/failover.conf
#failover configuration
failover peer "failover" {
  secondary;
  address 10.0.0.6;
  peer address 10.0.0.1;
  max-response-delay 60; 
  max-unacked-updates 10;
  load balance max seconds 3;
}

Damit das Ganze funktiniert müssen natürlich die festen IP auf beiden hosts identisch sein.
Hier käme eine Hook Möglichkeit für die Import-skripte sehr gelegen.
Da diese (noch) nicht existiert war die Überlegung nicht mit cron alle X Zeiteinheiten nen Skript laufen zu lassen dass guckt ob die conf verändert wurde, sondern das nur bei Anlass zu machen.

Hier kommt iwatch ins Spiel - iwatch ist ein daemon der die inotify API des Kernels nutzt um auf events im Filesystem zu reagieren. Damit kann man also bei Veränderung eines Files eine Aktion auslösen.
Zum Beispiel wenn sich die default-school.conf ändert diese zum anderen dhcp failover kopieren und dort den dhcp Dienst neustarten

  1. iwatch auf master
  • /etc/iwatch/iwatch.xml
[...]
  <watchlist>
    <!-- watch modifications to default-school.conf copy to dhcp2 and restart dhcp -->
    <title>default-school.conf</title>
    <contactpoint email="root@localhost" name="Administrator"/>
    <path type="recursive" alert="off" syslog="on" events="close_write" filter="^default-school.conf$" exec="rsync -a %f dhcp2:%f; ssh dhcp2
systemctl restart isc-dhcp-server">/etc/dhcp/devices</path>
  </watchlist>
[...]

Das funktioniert aber wie gesagt sauberer wäre ein Hook in linuxmuster-import-devices der ein beliebiges Skript ausführen ließe.

Interessanter wird das ganze bei Veränderungen an der subnets.conf.
Hier wurde bisher keine automatische Aktion eingerichtet.
Wir haben aber ein Skript das die /etc/dhcp/subnets.conf aus der /etc/linuxmuster/subnets.csv erzeugt.

  • fixdhcp_failover_subnets.sh
#!/bin/sh

# takes subnets.csv and inputs pool statements for dhcp failovers
# outputs to /etc/dhcp/subnets.conf directly
# restarts both dhcp servers

CSV=/etc/linuxmuster/subnets.csv
CSVCLEAN=$(mktemp)
OUTFILE=/etc/dhcp/subnets.conf
PAR="-oStrictHostKeyChecking=no"

if [ -f $CSV ]; then

  # preprocess $CSV
  grep -v ^# $CSV | grep -v "^$" > $CSVCLEAN

  # parse and process linewise
  while read line; do
          CIDR=$(echo $line | cut -d ";" -f1)
          ROUTER=$(echo $line | cut -d ";" -f2)
          RANGE1=$(echo $line | cut -d ";" -f3)
          RANGE2=$(echo $line | cut -d ";" -f4)

          NETWORK=$(echo $CIDR | cut -d "/" -f1)
          NETMASK=$(ipcalc $CIDR | grep ^Netmask | awk '{print $2}')
          BCAST=$(ipcalc $CIDR | grep ^Broadcast | awk '{print $2}')

          echo "subnet $NETWORK netmask $NETMASK {"
          echo "  option routers $ROUTER;"
          echo "  option subnet-mask $NETMASK;"
          echo "  option broadcast-address $BCAST;"
          echo "  option netbios-name-servers 10.0.0.1, 10.0.0.6;"
          echo "  option host-name pxeclient;"
          echo "  pool {" 
          echo "    failover peer \"failover\";"
          echo "    range $RANGE1 $RANGE2;"
          echo "  }"
          echo "}"

  done < $CSVCLEAN  > $OUTFILE

  # clean up
  rm -f $CSVCLEAN

  if $(grep pool $OUTFILE > /dev/null 2>&1); then
    # post processing
    systemctl restart isc-dhcp-server && echo "restarted dhcp server"
    scp $PAR $OUTFILE dhcp2:/etc/dhcp/ && echo "copied $(basename $OUTFILE) to dhcp2"
    ssh $PAR dhcp2 systemctl restart isc-dhcp-server
    echo "restarted dhcp server (slave) on dhcp2"
  else
    echo "something went terribly wrong cowardly exiting..."
    echo "maybe check $OUTFILE"
    exit 1
  fi
else
  echo "$CSV file not found!"
  exit 1
fi

Auch hier wieder - ein Hook in linuxmuster-import-subnets wäre außerst wünschenswert.

Vielleicht kann das setup hier ja jemandem helfen.

iwatch ist ein sehr nettes Tool um eventgesteuert Aktionen auszuführen statt blind mit cron zu gucken ob sich das geändert hat.

Wer rechtsschreib Fehler findet darf sie behalten :slight_smile:

Gruß Micha

Hi.
Wozu genau benötigt ihr das? DHCP ist zwar ein kritischer aber kein besonders anfälliger Service, oder?
Viele Grüße,
Michael

Wozu genau benötigt ihr das?

Damit bei Ausfall des (dhcp) linuxmuster servers der unser 2. DC die dhcpd Funktion übernimmt und weitergearbeitet werden kann.
Ob man das „braucht“ hängt naütrlich ganz von den Anforderungen ab.
Hier an der Schule versuchen wir zumindest ein single failover zu haben. Sprich es geht zumindest irgendwie weiter wenn Dienste oder gar der linuxmuster Server ganz ausfallen.
Bisher gab es dafür nur einen 2. domain controller, aber dann bekommen clients eben keine IP mehr wenn nicht ein 2. dhcpd die clients mit IP versorgt.
Und was nützt ein Client ohne IP (bei dem sich die User logischerweise auch nicht über den 2. DC anmelden können)
Nicht viel :slight_smile:

Also selbst wenn der lmn server ganz ausfallen sollte haben wir jetzt den 2. dhcp / clients bekommen ne IP.
Vorallem die dynamischen Ranges funktionieren noch und ich kann beispielsweise ein BYOD anschließen, dass eine IP bekommt.

Benutzer können sich an den pädagogischen Clients über den 2. DC anmelden.
Es stehen allerdings keine Shares zur Verfügung.

Hallo init0,

wie oft fällt der DHCP aus, dass sich dieser Aufwand lohnt? Ich kann mich nicht entsinnen, dass der DHCP in den letzten Jahren an den Schulen die ich betreue ausgefallen ist.

Gruß

Alois

Nicht oft, zugegeben.
Aber für den Fall haben wir jetzt nen Failover.
Es kam schon vor das die lmn server Maschine restored werden mußte, da ist es dann blöd wenn in der Zeit kein Unterricht am PC stattfinden kann, keine Beamer, Drucker funktionieren usw.