Web-server (fortsettelse...)

Ein ting som er litt meir komplisert når ein skal ha sidene lagra på USB er at det tek litt tid etter oppstart av ruteren før USB-disken er montert. Ein kan legge inn ein liten forsinkelse i post-boot-skriptet slik at USB-disk rekk å bli montert før ein startar http-serveren:

Code:
j=0
while [ $j -le 10 ]; do
	if [ -d /tmp/harddisk/wwwroot ] ; then
		busybox_httpd -p 8080 -r "Logg inn" -c /usr/local/etc/httpd/min_httpd.conf -h /tmp/harddisk/wwwroot
		break
	fi
	sleep 1
	: $((j = $j + 1 ))
done

DynDNS

For å få til aksess på navn slik som "http://kongeside.homeip.net" kan ein opprette såkalt "dynamic DNS" på DynDNS.org. Dette er ein gratis teneste som anbefales!
Kvar gong maskina di får ny IP-adresse må dette oppdaterast på DynDNS.org. Ruter-programvaren har innebygd støtte for automatisk oppdatering vha. programmet ez-ipupdate (http://ez-ipupdate.com/). Dette vises ikkje på administrasjonssidene når ruteren er satt opp i aksesspunkt modus. Den kan jo sjølvsagt settast opp vha. egne skript frå Telnet-kommandolinja, men grunnen til at dette ikkje er så enkelt er at Asus-ruteren i aksesspunkt modus ikkje vil ha ei ekstern IP-adresse, men kun ei lokal nettverksadresse - i mitt tilfelle IP 10.0.0.3.

Frå Telnet-kommandolinja kan ein likevel lage eit skript som gjer at den eksterne IP-adressa blir henta, og DNS-kontoane oppdatert. For å få til dette brukes programmet wget (http://www.gnu.org/software/wget/, et program for aksessere filer vha. protokollane HTTP, HTTPS og FTP frå kommandolinja.

For å oppdatere DNS-kontoane mine så bruker eg WGet først for å laste ned ei side (checkip.dyndns.org) som seier kva for ekstern IP-adresse maskina har. Sjølve IP-adresse blir "klipt ut", det sjekkes om IP-adressa har endra seg siden siste sjekk og hvis den har det så blir den nye IP-adressa registrert hos DynDNS vha. wget mot http://members.dyndns.org/.

Mi WAN IP-adressa hentar eg frå nettsida http://checkip.dyndns.org/, som har ip-adresse 204.13.250.51 (Eg hadde litt problemer med å få wget til å virke saman med navn så eg måtte bruke IP adresse i staden) For å hente den gjeldande IP-adressa ned til ei fil, f.eks. /usr/local/etc/dyndns/current_wan_ip brukes følgande kommando:
Code:
wget -O - http://204.13.250.51 | sed -e 's/<\/body><\/html>.*//' |sed -e 's/<html><head><title>Current IP Check<\/title><\/head><body>Current IP Address: //'>/usr/local/etc/dyndns/current_wan_ip
For å oppdatere DynDNS-tjenestene med IP-adressa kjøres følgande kommando:
Code:
wget -q http://<dyndnsusername>:<dyndnspwd>@63.208.196.95/nic/update?hostname=myhost.dnsalias.com\&myip=xxx.xxx.xxx.xxx --output-document=/usr/local/etc/dyndns/dyndns.log
I kommandoen ovanfor skal IP 63.208.196.95 svare til adressa "members.dyndns.org". Har ein fleire enn et hostname registrert på DynDNS.org så kan ein inkludere alle i ein kommando ved å liste dei opp i hostname-argumentet separarert med komma. Argumentet "mypi" skal angi IP-adressa som skal oppdateres.
Eg har laga meg eit skript /usr/local/etc/dyndns/dyndns_update som håndterer sjekking av IP og oppdatering av mine DynDNS kontoar. Dette er gitt i sin heilhet (kun fjerna passord og litt sånt) nedanfor under kapittelet Vedlegg. Husk å gi skriptet kjøre-rettigheter, altså f.eks. chmod +x /usr/local/etc/dyndns/dyndns_update.

Det siste som må gjerast er å sette opp korleis skriptet skal kjørast. Dette kan settast opp i post-boot for å kjøre skriptet ein gong kvar gong ruteren startes. Eller det kan settes opp som ein autojobb som kjøres ved gitte intervaller vha. Cron.
Eg har valgt å gjere begge deler. Eg har ADSL frå NextGentel og sålenge ADSL-modemet står på får eg då sjeldan ny IP-adresse. Hvis eg skrur av ADSL-modemet så skrur eg vanlegvis også av Asus-ruteren. Så når eg då legg eit kall til dyndns_update-skriptet i post-boot så skal i utgangspunktet dette halde. For sikkerhetsskyld har eg også lagt til ein autojobb som kjører skriptet ein gong i døgnet. Eit tilleggsargument for også å legge det inn som ein slik autojobb er at DynDNS kontoane går ut på tid hvis ein ikkje har oppdatert IP-adressa i løpet av rundt ein måneds tid (sjå her). Etter 25 dagar sender DynDNS ut påminnelsesmail. For å unngå dette så bør ei oppdatering uansett om IP har endra seg eller ikkje kjørast innan 25 dager. Eg har lagt til støtte for dette i skriptet (/usr/local/etc/dyndns/dyndns_update).

Til å kjøre oppdateringsskriptet regelmessig har eg brukt Cron, som er allerede er installert på ruteren. Dette settes opp ved å legge til /usr/sbin/crond til usr/local/sbin/post-boot skriptet.
I tillegg må det lages ei såkalla crontab-fil. Standard plassering av denne er på /var/spool/cron/crontabs (katalogen må sannsynligvis opprettes). På denne katalogen må det lages ei ny fil med navn "admin", altså brukernavnet du bruker på ruteren. For å kjøre skriptet kvar natt klokka 01:00 må fila innehalde følgande:

Code:
#<Minute 0-59> <Hour 0-23> <DayOfMonth 1-31> <Month 1-12> <DayOfWeek 0-6, Sunday=0>
0 1 * * * /usr/local/etc/dyndns/dyndns_update
Her er ei kort oppsummering av skriptet mitt dyndns_update og oppsettet av dette for oppdatering av mine DynDNS kontoar:
  • Skriptet kjøres ein gong kvar gong ruteren startes.
  • Hvis ruteren er på kjøres skriptet kvar natt klokka 01:00. Det vil slås opp på gjeldende WAN IP.
  • Når skriptet kjøres for første gong så vil DynDNS-kontoane oppdaterast med gjeldande IP.
  • Hvis skriptet har kjørt før, men det er 25 dagar eller meir sidan sist DynDNS-kontoane vart oppdatert, så vil dei (DynDNS-kontoane) oppdaterast med gjeldande IP.
  • Hvis skriptet har kjørt før, og det er mindre enn 25 dagar siden sist DynDNS-kontonae vart oppdatert, så vil dei (DynDNS-kontoane) oppdaterast med gjeldande IP - men bare hvis denne er forskjellig frå den WAN IP som vart funnen forrige gang skriptet vart kjørt!