Sida 1 av 1

Snickra ihop egen DynDNS? [LÖST]

Postat: 04 sep 2010, 17:58
av perepost
Om man har en egen webserver med dynamiskt tilldelad IP-adress och vill kunna nå denna utifrån så finns det externa DNS-tjänster för detta, tex DynDNS och yi.org.
Nu funderar jag på om man inte kunde åstadkomma detta själv relativt enkelt genom man skickar aktuell IP hemifrån till en extern webbsida.
Ungefär såhär:
1. Ett bashskript körs på hemmaservern som hämtar aktuell extern IP, typ

Kod: Markera allt

 ifconfig | grep inet addr:192.168.*
2. Bashskriptet skickar IP-addressen till den externa webbplatsen i ett GET-paket, tex med hjälp av CURL eller i värsta fall med WGET, typ

Kod: Markera allt

wget http://minsajt/mittskript.php?IP=192.168.1.99
Bashskriptet körs tex en gång om dagen med hjälp av cron.
3. PHP-skriptet på den externa webbplatsen tar emot anropet och hämtar ip-addressen, typ:

Kod: Markera allt

$ip = !empty($_GET['IP']) ? $_GET['IP'] : FALSE;
4. PHP-skriptet på den externa webbplatsen lagrar IP-addressen i en textfil:

Kod: Markera allt

if (!empty($ip)) {
	if ($open = fopen($textfile, 'w')){
		fwrite($open, $ip;
		fclose($open);
	}
5. När du besöker den externa webbplatsen hämtar skriptet aktuell ip från textfilen och visar den, typ:

Kod: Markera allt

if ( (is_readable($textfile)) && (empty($ip)) ) {
	if ($fp = fopen($textfile,'r')) {
		$ip = fread($fp);
		fclose($fp);
	}
}
if (!empty($ip)) {
	echo "<a href=\"$ip\">Hemmaservern har IP $ip</a>";
}
Skulle det funka (bortsett från den slarviga koden)? Finns det bättre lösningar? Alla idéer är välkomna!
/Per

Re: Snickra ihop egen DynDNS?

Postat: 04 sep 2010, 18:07
av Konservburk
Det borde väl funka? Förutom att du förmodligen inte är intresserad av ip:n i stil med 192.168.* och egentligen vill åt routerns ip, om du nu sitter bakom en sådan.

Och sen kanske det är vettigare att uppdatera när ip:t ändras, snarare än strikt en gång om dagen eftersom ip:t kan ändras både oftare och mer sällan än så.

Re: Snickra ihop egen DynDNS?

Postat: 04 sep 2010, 18:13
av Alleinsora
Konservburk skrev:Och sen kanske det är vettigare att uppdatera när ip:t ändras, snarare än strikt en gång om dagen eftersom ip:t kan ändras både oftare och mer sällan än så.
Precis det jag tänkte på, och funderade på om det inte går att läsa ut hur länge dhcp-lånet är giltigt och på så och sätt sätta nästa gång scriptet ska köras.

Re: Snickra ihop egen DynDNS?

Postat: 04 sep 2010, 18:37
av perepost
En möjlighet är att lagra senaste externa ip lokalt på servern och jämföra med den ofta, tex en gång i timmen, för att ta hänsyn till så många scenarier som möjligt?
Sedan uppdatera den externa webbplatsen bara när adressen faktiskt ändrats.

Re: Snickra ihop egen DynDNS?

Postat: 28 sep 2010, 21:47
av perepost
Man behöver faktiskt inte skicka med ip-addressen i GET-satsen, man kan ju låta PHP läsa av aktuell ip såhär:

Kod: Markera allt

$ip_guest = getenv('REMOTE_ADDR');
Om det nu är den externa ip-n man vill åt.

Det blev så att jag använde curl istället för wget.

Kod: Markera allt

curl --max-time 10 --head http://minsajt/ip.php?uppdatera=auto
Nu är jobbet inlagt i cron.hourly, provkört och klart.
Finns det något intresse för den kompletta koden?

Re: Snickra ihop egen DynDNS? [LÖST]

Postat: 19 okt 2010, 15:30
av starfish1107
hej,
guess its ok writing in english. I read your post - and think this could be a solution to my "problem" - could you please send me the finished code?
I run a home automation server near Höganäs which gives me control over the summerhouse when I am back to Switzerland. I actually use dyndns but I want to be independent - therefore I think its a good idea to use my fixed IP server here at the other end.
Just go on in swedish by the way, I´ll understand it.
hälsningar
Beat

Re: Snickra ihop egen DynDNS? [LÖST]

Postat: 19 okt 2010, 16:01
av perepost
Om du redan har fast IP så kommer inte detta att hjälpa dig.
Namnet DynDNS i tråden är missvisande eftersom detta inte ordnar namnupplösningen till en IP-adress.

Det vi gjort här är helt enkelt att automatiskt uppdatera en hemsida med den senaste (dynamiskt tilldelade) externa ip-adressen på den klient som skickar meddelandet till hemsidan.

Men om du fortfarande skulle ha nytta av det så fixar jag gärna koden! :)