# dyndns och domän hos Loopia

## preacher

Jag registrerade nyligen en domän hos Loopia, endast dns, ingen hostning.

Då jag blir tilldelad en ip-adress via dhcp från min internetleverantör vill jag gärna att domänen automatiskt skall uppdateras till rätt ip-adress.

När jag tidigare använde mig av en domän hos dyndns.org var det inga problem, det finns ju en uppsjö av mjukvaru-klienter till den tjänsten, dessutom stödde min Linksys-router dem.

Såhär skriver Loopia om sin dynamiska dns-tjänst:

```
Vad stödjer LoopiaDNS i sitt protokoll?

Loopias DynDNS server stödjer följande i GET:

system

Vilket system som används. LoopiaDNS stödjer endast system=custom.

Frivillig: ja

Förinställt: custom.

hostname

Här anger du domännamnen som du vill uppdatera separerade med kommatecken.

Frivillig: nej.

myip

Vilken IP adress som LoopiaDNS ska uppdateras till.

Frivillig: nej.

wildcard

Slår på eller av wildcard.

Möjliga värden: ON|OFF|NOCHG.

NOCHG gör att inga förändringar kommer att göras.

Frivillig: Ja

Förinställt: OFF

mx

Specifies a mail exchanger for use with the hostname being modified. The specified MX must be resolved to an IP address, or it will be ignored. Providing no MX setting or MX cannot be resolved to an IP address, will cause the hostname's MX record(s) to be removed.

Frivillig: Ja.

backmx

Request that the MX in the "mx" parameter be set up as a backup MX.

Möjliga värden: YES|NO

Frivillig: Ja

Förinställt: NO.

Följande är ett exempel på en tillåten GET till LoopiaDNS:

GET /XDynDNSServer/XDynDNS.php?

system=custom&

hostname=myhost.com&

myip=11.22.33.44&

backmx=YES

HTTP/1.0

Host: dns.loopia.se

Authorization: Basic username:password

User-Agent: myclient/1.0 me@null.net

Notera att allt från GET till HTTP/1.0 ska vara på samma rad.

Hur kan jag se min IP adress?

Genom att använda dig av adressen nedan kan du se vilken IP adress du har.

http://dns.loopia.se/checkip/checkip.php

Vad är adressen till er dynDNS server?

Adressen som du ska ange i din dynDNS klient är följande:

http://dns.loopia.se/XDynDNSServer/XDynDNS.php
```

Det ser ju informativt och bra ut, men alla dyndns-klienter jag hittat verkar vara skrivna för endast vissa specifika dyndns-providers, som t.ex dyndns.org, no-ip.com m.fl.

Kan någon hjälpa mig reda ut det här?

----------

## ndreas

Nu är jag ute lite på hal is eftersom jag inte har nån koll alls på Loopia eller dyndns, men jag ger mig på en liten gissning.

Om jag tolkar det rätt så ska det gå att sätta ip-adressen via HTTP i en GET-request. Detta måste betyda att antingen skaffar du nåt program som kan skicka en GET med de headrar som ges i exempel-GET:en (typ en webbläsare eller nåt liknande) eller så knåpar du ihop ett litet skript/program som öppnar en socket mot dns.loopia.se och skickar en GET.

Det är hur som helst i avsnittet GET till HTTP/1.0 som alla variablerna som dom pratar om ska anges, separerade av &-tecken.

Om du väljer att fixa ett eget skript/program så om jag inte minns alldeles galet så måste varje rad avslutas med \r\n för att det ska funka i en HTTP-request, och att hela requesten måste följas av en tom rad. Om jag använder exemplet dom ger ska det alltså se ut nåt sånt här:

```
GET /XDynDNSServer/XDynDNS.php?system=custom&hostname=myhost.com&myip=11.22.33.44&backmx=YES HTTP/1.0\r\n

Host: dns.loopia.se\r\n

Authorization: Basic username:password\r\n

User-Agent: myclient/1.0 me@null.net\r\n

\r\n
```

Observera att radbryten jag lade in var bara för läsbarhetens skull, i ett skript kan du stoppa in allt i en enda sträng eftersom radbryten då hamnar vid varje \r\n.

Hoppas jag har fattat det rätt och att det i så fall hjälper litegrann i alla fall.

----------

## crudh

"wget" duger fint, det finns i portage. Det är ett program för att tanka ner hemsidor från konsollen.

Du anropar helt enkelt 

http://dns.loopia.se/XDynDNSServer/XDynDNS.php

med variablerna:

```
system=custom&

hostname=myhost.com&

myip=11.22.33.44&

backmx=YES

HTTP/1.0

Host: dns.loopia.se

Authorization: Basic username:password

User-Agent: myclient/1.0 me@null.net
```

(ändrat till dina egna då enligt beskrivningen)

T ex:

```
wget -d http://dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=myhost.com&myip=11.22.33.44&... och så vidare med alla variablerna.
```

wget -d säger åt wget att den skall ta bort filen när den är klar, den får formodligen ner en konfirmationssida från loopia att ipn är bytt. Du kan även pipa outputen till /dev/null tror jag så den inte spars på disk överhuvudtaget.

Sen kan du lägga in det i t ex /etc/conf.d/local.start så körs det varje gång du startar datorn.

----------

## preacher

Tack, nu blev det hela mycket klarare!

Håller på att försöka skriva ett litet script för att få det här gjort automatiskt, men när jag ska testa kommandot som skall uppdatera ip-adressen stöter jag ändå på problem:

```
`wget --http-user=username --http-passwd=passw0rd http://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname=hostname.se&system=custom&myip=xxx.xxx.xxx.xxx&wildcard=NOCHG`

```

Detta tar bara ner en sida som innehåller ordet "notfqdn", vilket ju måste innebära att något blev fel. Testar jag att skriva in fel användarnamn eller lösenord står det däremot "badauth" i filen som wget tar ner, så kontakt blir det ju åtminstone.

Efter att ha testat ett tag började det stå "abuse" i filen som wget tankade hem istället, vilket ju inte kändes så kul...

Någon som kan se något fel i kommandot ovan, förutom det uppenbara att jag ändrat mina personliga uppgifter?

----------

## zeb

 *preacher wrote:*   

> 
> 
> ```
> `wget --http-user=username --http-passwd=passw0rd http://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname=hostname.se&system=custom&myip=xxx.xxx.xxx.xxx&wildcard=NOCHG`
> 
> ...

 

notfqdn = not fully qualified domain name; det är antagligen i hostname-parametern som felet ligger.

----------

## preacher

 *zeb wrote:*   

> 
> 
> notfqdn = not fully qualified domain name; det är antagligen i hostname-parametern som felet ligger.

 

Jo, jag antog också att det var det som notfqdn betydde, men jag har kontrollerat hostname-parametern och den är korrekt vad jag kan se.

För närvarande får jag fortfarande bara ner en fil som det står "abuse" i, trots att Loopias kundsupport säger att det inte finns någon spärr som skall göra så. Har även testat från jobbet men får samma fel, så det är inte ip-numret som är spärrat.

Jag väntar tills imorgon och försöker vidare då.

----------

## crudh

Fick du ordning på det?

----------

## preacher

Nej, det står fortfarande "abuse" i filen jag får ner, så spärren (som inte ska finnas enligt Loopia) verkar inte släppa inom överskådlig tid. Har tänkt maila dem igen men har inte haft tid.

Lovar att posta det färdiga scriptet när jag väl fått kläm på allt.

----------

## preacher

Här är scriptet som det ser ut just nu, vore trevligt om det fanns nåt käckt sätt att få fram det aktuella ip't utan att behöva använda "host", som jag inte redan hade på mitt system utan blev tvungen att emerga.

```

#!/bin/bash 

############################ LoopiaDynDns.sh v1.0 ##############################

## Loopia Dyndns ip-updatescript, made by Peter (peter@preacher.se) with      ##

## great help from Loopia support and the gentoo forums (forums.gentoo.org)   ##

## You need the command "host" available on your system, which can be found   ##

## in the bindtools package.                                                  ##

################################################################################

################################################################################

################ Edit configuration to suit your system:  ######################

################################################################################

# Your authentication

USERNAME=username

PASSWORD=password

# Your top-level domain (eg. hostname.se, NOT www.hostname.se)

TLD="domain.se"

# Hosts you want to update, separated by commas

HOSTS="domain.se,www.domain.se"

# MX-pointer, leave blank to skip

MX="mail.domain.se"

# Use wildcard (*.hostname.se = hostname.se)? Set to either "ON", "OFF",

# or leave blank to leave current setting unchanged

WILDCARD=""

# Check for changes in IP every X seconds

TIME=300

################################################################################

########## End of configuration, shouldn't need to change below ################

################################################################################

# If no mx specified then dont try to set one

if [ $MX ]

then

        MXCOMMAND="&mx=$MX"

else

        MXCOMMAND=""

fi

# Wildcard wanted or not?

if [ $WILDCARD ]

then

        WCOMMAND="&wildcard=$WILDCARD"

else

        WCOMMAND="&wildcard=NOCHG"

fi

# Update the DNS with current ip if needed

while [ 1 ]

do

# Get our current ip:

IP=`wget http://dns.loopia.se/checkip/checkip.php -q -O - | tail -c +77 | head -c -14`

# Get ip currently in dns

DNSIP=`host $TLD | sed -e "s/$TLD//" -e "s/ has address //"`

# If ip's are not equal, update record

if [ $IP != $DNSIP ]

  then

    wget --delete-after --http-user='$USERNAME' --http-passwd='$PASSWORD' \

'http://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname=$HOSTS&\

myip=$IP$WCOMMAND&system=custom$MXCOMMAND'"

fi

sleep $TIME

done

```

----------

