Script das interne und externe Nutzer erkennt

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

TopTobi

Benutzer
Registriert
03. Apr. 2011
Beiträge
256
Reaktionspunkte
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)?
 
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
 
z.B. dnsmasq installieren und dann einen Eintrag für deinen Domainnamen der auf die LAN IP zeigt
 
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.
 
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
 
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.
 
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?
 
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! ;)
 
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
 
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! ;-)
 
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 :-)
 
Danke für deine Antwort. :)

Leider leitet mich dieses Script auf die Domain obwohl ich aus dem LAN komme.
 
dann musst du statt 192.168.2 auf deine externe IP prüfen
 
Diese ist ja aber dynamisch, kann man es so machen das das Script die aktuelle IP aus der Domain familienserver.synology.me ausliest? ;-)
 
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');
}
 
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