Script das interne und externe Nutzer erkennt

Status
Für weitere Antworten geschlossen.

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Hey,

Folgende Situation: Die Homepage für unseren "Familienserver" liegt auf einem externen Server von dem aus die Synology Server Dienste verlinkt sind.

Da es nun aber einige Probleme gibt, wenn im Heimnetzwerk Nutzer über die Domain auf den Server zugreifen, bin ich auf die Idee gekommen, ob es nicht ein Script gäbe was erkennt woher der Benutzer kommt und ihn dementsprechend auf die interne IP oder die Domain umleiten soll.

Natürlich könnte ich auch auf die HP Links für interne und externe Benutzer setzten, dies würde aber zu Verwirrungen führen.


Ist so etwas möglich? Hat jemand eine Ahnung wie (kenne mich damit leider nicht aus)?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
klar ist das möglich z.B. mit einem PHP Script. PHP kennt sogn Server-Variablen und eine davon ist die IP des anfragenden Clients. Die Var heisst $_SERVER['REMOTE_ADDR']
Einfacher wäre es aber imho immer alle auf die Domain zu schicken und im LAN einen DNS Server zu haben, der den Domainnamen fürs LAN mit der LAN-IP auflöst
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Und wie lässt sich das letztere realisieren?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
z.B. dnsmasq installieren und dann einen Eintrag für deinen Domainnamen der auf die LAN IP zeigt
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Okay Danke. Nur erscheint mir das etwas schwierig, gerade in der Konsolen arbeit.

Über das php Script habe ich mich auch ein wenig informiert, aber keine nennenswerte Lösung gefunden. Also ich meine damit keine Fertiglösung, sondern eine Beschreibung dazu.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Werbung in eigener Sache: http://syno.brain-force.ch/dnsmasq_installieren :)
Ist wirklich keine Zauberei. Dann schaust du dir den letzten Teil im Abschnitt Konfiguration an. Der zeigt wie man ein zusätzliches File für die Namensauflösung nutzen kann. Dort rein würde ich den Eintrag machen, damit die Domain lokal mit der LAN-IP deiner DS aufgelöst wird
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Mit dem neuen Speedport W 723V funktionieren nun gar keine Anfragen aus dem internen Netzwerk mehr über die Domain. Von extern funktioniert es jedoch.

Komischerweise funktioniert es jedoch wenn ich das FTP Protokoll nutze. Was kann das sein?

Gibt es nicht eine Möglichkeit per .htaccess die internen Nutzer auf die interne IP umzuleiten? Deinen Tipp fand ich ganz nett, allerdings finde ich mich in der Konsole nicht ganz zurecht.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Gibt es nicht eine Möglichkeit per .htaccess die internen Nutzer auf die interne IP umzuleiten?
das hast du einen Denkfehler drin ;-)
Wenn .htaccess zum Zug kommt, dann ist der Client bereits mit dem Webserver verbunden. Du willst ja aber den Client "umleiten" bevor er mit dem Webserver redet. Das geht nur via DNS. Entweder mit dem DNS-Server im LAN, der den Request nach deinem dyndns-Namen mit der LAN IP der DS auflöst oder mit einer hosts Datei. Letzteres hat aber den Nachteil, dass du es immer manuell ändern musst wenn du nicht innerhalb deines LANs bist. Mittlerweile gibt es doch den dnsmasq mit der Firmware. Kann der keine DNS-Auflösung machen?
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Naja die Webseite mit den Links liegt auf einem anderen Webserver von daher müsste es doch mit .htaccess gehen, aber wie?

Ich schau mal wegen dem dnsmasq. Mal sehen ob ich das hin bekomme. :)

Danke für alles! ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
d.h. alle Request landen auf dem anderen Server und du willst "nur" eine andere URL im Link wenn der Client im LAN ist? Dann wie bereits vorher mal erwähnt wäre es mittels PHP wohl recht einfach. Sagen wir dein LAN ist 192.168.57.0 - 192.168.57.255 Die LAN IP deiner DS ist 192.168.57.62 Du hast URLs für die Links und den dynDNS Namen meineDomain.dyndns.org
PHP:
<?php
# Array mit den URL Pfaden also alles hinter dem Hostname resp der LAN-IP
$url[] = array('pfad/zum/script','Linktext1');
$url[] = array('anderer/link/ziel','Linktext2');
$url[] = array('','Home');
# dein LAN also alles was lokal ist
$local = '192.168.57.';
# LAN IP der DS und der Hostname
$host_ip = '192.168.57.62';
$host_name = 'meineDomain.dyndns.org';

# fuer jedes Element des Array $url einen Link erstellen
foreach($url as $wert) {
 if(strpos($_SERVER['REMOTE_ADDR'],$local) === 0 ) {
  #Zugriff von intern
    echo '<a href="'.$host_ip.'/'.$wert[0].'">'.$wert[1].'</a>';
 } else {
  #Zugriff von extern
    echo '<a href="'.$host_name.'/'.$wert[0].'">'.$wert[1].'</a>';
 }
}
das Script kommt auf den externen Server, der die Links generieren soll

vollkommen ungetestet, aber so in etwa sollte es funzen :) Hoffentlich habe ich jetzt richtig verstanden was du vorhast

Gruss

tobi
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Ja im Prinzip richtig.

Mir würde ja eine php Datei genügen auf die der Link zeigt. Sagen wir mal ich möchte zum DSM verlinken.
Auf der HP ist der Link zum DSM gesetzt zu "http://www.meindomainvomexternenserver.de/weiterleitung/dsm.php".
Die php Datei dsm.php erkennt nun woher der Nutzer kommt und leitet ihn nun entweder auf "http://www.domain.de:5000" oder "http://192.168.2.103:5000/".

Das lässt sich für mich am einfachsten einbauen ohne alles verändern zu müssen, so viele Links sind es ja nicht.


Bei deinem jetzigen Script werden irgendwie alle Links angezeigt. Woher soll eigentlich der externe Server wissen das ich aus dem LAN komme?
Dein Script: http://web3138.srv21.sysproserver.de/test/test.php

Danke das du mir hilfst! ;-)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Stimmt ich habe in meinem Bsp die br-Tags nach dem Link vergessen :)
Die php Datei dsm.php erkennt nun woher der Nutzer kommt und leitet ihn nun entweder auf "http://www.domain.de:5000" oder "http://192.168.2.103:5000/".
Wenn es nur eine Weiterleitung sein soll, dann geht das noch einfacher. Dazu in dsm.php auf dem anderen Server
PHP:
<?php
if(strpos($_SERVER['REMOTE_ADDR'],'192.168.2.') === 0 ){
 header('Location: http://192.168.2.103:5000');
} else{
 header('Location: http://www.domain.de:5000');
}
wieder ungetestet :)
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Danke für deine Antwort. :)

Leider leitet mich dieses Script auf die Domain obwohl ich aus dem LAN komme.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dann musst du statt 192.168.2 auf deine externe IP prüfen
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Diese ist ja aber dynamisch, kann man es so machen das das Script die aktuelle IP aus der Domain familienserver.synology.me ausliest? ;-)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Klar geht das :)
PHP:
<?php
$ip = gethostbyname("familienserver.synology.me");
if(strpos($_SERVER['REMOTE_ADDR'],$ip) === 0 ){
 header('Location: http://192.168.2.103:5000');
} else{
 header('Location: http://www.domain.de:5000');
}
 

TopTobi

Benutzer
Mitglied seit
03. Apr 2011
Beiträge
256
Punkte für Reaktionen
0
Punkte
0
Funktioniert wunderbar. Ich danke dir vielmals! :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat