dhcpd.conf laten updaten door dhclient

Pagina: 1
Acties:

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Naar aanleiding van de dns wijzigingen van @home, heb ik gezocht op GOT (en google) of het mogelijk is om de instellingen van dhclient door te spelen naar dhcpd.conf, zodat de clients van je router ook automagisch de juiste dns instellingen hebben.
Ik zag dat veel mensen hun heil maar zochten in een caching dns oplossing, maar dat wilde ik niet (des te minder services des te beter). Dus heb ik uiteindelijk maar een script geschreven wat in dhclient-exit-hooks moet komen te staan. Om dat er in het verleden gelijke vragen zijn geweest dacht ik dat het wellicht handig was om het maar te posten.

Graag opmerkingen, commentaar???

O ja, ik heb misschien wat overbodige quotes in het script staan, maar het was alweer een tijdje geleden dat ik wat in shell scripting gedaan had.

O ja 2, initieel wilde ik alleen bij veranderingen van de nameservers (old_domain_name_servers != new_domain_name_servers), de veranderingen naar dhcpd.conf zetten. Ik kon echter niet echt vinden waar dclient zijn old_domain_name_servers vandaan haalt, iig niet uit resolv.conf. En bij mij zijn tot nu toe altijd de nieuwe en de oude gelijk geweest..... Dus als iemand hier iets zinnigs over kan zeggen...

O ja 3, zijn de nieuwe ip nrs van de dns-en van @home 213.51.129.170, 213.51.144.170, want GOT geeft zo nu en dan nog dns-errors bij mij :)...


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
#
# simple script to put domain_name_servers in the dhcpd.conf
# file. Only do this if the domain_name_servers are not empty
# *and* they are changed (a well that was the plan...).
#
# Tested on debian-unstable
#

DHCPD=/etc/dhcpd.conf
nameservers=""
emptystring=""

if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
   [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
  if [ "$new_domain_name_servers" != "$emptystring" ]; then
#  if [ "$new_domain_name_servers" != "$emptystring" ] && \
#     [ "$new_domain_name_servers" != "$old_domain_name_servers" ]; then
    for nameserver in $new_domain_name_servers; do
      if [ "$nameservers" = "$emptystring" ]; then
        nameservers=$nameserver
      else
        nameservers=$nameservers,$nameserver
      fi
    done

    echo 'making backup of old dhcpd.conf'
    cp $DHCPD $DHCPD.old
    sed -e "s/domain-name-servers.*;/domain-name-servers $nameservers;/g" $DHCPD
 > /tmp/dhcpd.conf
    mv /tmp/dhcpd.conf $DHCPD
    /etc/init.d/dhcp restart
    echo 'done'
  fi
fi

  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Als het werkt (ik heb even geen server) is het vast een nuttig scriptje voor sommige mensen.
Twee opmerkingen:
- in plaats van die vreemd aandoende 'if [ x$reason = xBOUND ] ' etc, vind ik het duidelijker dit te gebruiken:
code:
1
if [ "$reason" = "BOUND" ]; ...
(zoals je verder zelf ook doet)
- De melding voor de gebruiker is incompleet, omdat er niet alleen een copy wordt gemaakt, maar heel dhcpd wordt herstart. Ik zou de melding wat algemener houden.

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
1) Het reason deel is botweg gekopieerd uit dhclient-script...
2) Bij het herstarten van het dhcp script krijg je al meldingen, dus ik vond meer niet echt nodig.

Verwijderd

Wat jouw dns servers zijn hangt denk ik van je regio af.
Maar ik denk dat dat inderdaad dns-servers zijn.

[walther@workstation]:~$ host 213.51.144.170
170.144.51.213.in-addr.arpa domain name pointer dns3.tilbu1.nb.home.nl.
[walther@workstation]:~$ host 213.51.129.170
170.129.51.213.in-addr.arpa domain name pointer dns3.zwoll1.ov.home.nl.

( niet een antwoord op je vraag, maar ik kan het toch niet laten: ik gebruik dus wel een soort van dns-cacher: dnsmasq en dat bevalt uitstekend )

Verwijderd

ajvdvegt schreef op 05 november 2003 @ 15:59:
- in plaats van die vreemd aandoende 'if [ x$reason = xBOUND ] ' etc, vind ik het duidelijker dit te gebruiken:
code:
1
if [ "$reason" = "BOUND" ]; ...
(zoals je verder zelf ook doet)
Als $reason niet gedefinieerd is (kortom ""), zal /bin/sh de regel veranderen in:
code:
1
if [ = "BOUND" ]


Je begrijpt dat dit weer een syntaxisfout oplevert. Waarom men voor het teken "x" heeft gekozen, heeft de tijd mogen bepalen, maar dit is de gebruikelijke manier van scripten.

[ Voor 47% gewijzigd door Verwijderd op 05-11-2003 19:47 . Reden: neurotisch klikgedrag ]