d1ck3n
Goto Top

Den geografisch nähesten Server per Bash finden

Hallo zusammen,

gibt es eine Möglichkeit per bash Skript von einer Liste von Servern den geografisch nähesten bzw. am schnellsten antwortenden Server aus zu geben?

Ich arbeite momentan an einem Ansible Playbook das dynamisch immer den schnellsten bzw. nähesten AD-Server auswählen soll.

Grüße
D1Ck3n

Content-ID: 569462

Url: https://administrator.de/contentid/569462

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

143728
143728 04.05.2020 aktualisiert um 10:40:31 Uhr
Goto Top
Und zum dritten ... Stelle sicher das du deine Site- und Subneteinstellungen in der MMC (Active Directory Sites and Services) richtig gesetzt hast, dann geschieht das automatisch per DNS Query
https://blog.ahasayen.com/nearest-domain-controller/

p.s. Antworten wäre auch mal nett anstatt 100 mal das selbe in neue Threads zu verpacken...
Vision2015
Vision2015 04.05.2020 um 10:36:26 Uhr
Goto Top
moin...
Zitat von @143728:

Und zum dritten ... Stelle sicher das du deine Site- und Subneteinstellungen in der MMC richtig gesetzt hast, dann geschieht das automatisch per DNS Query
https://blog.ahasayen.com/nearest-domain-controller/

jo... das stimmt wohl

Frank
D1Ck3n
D1Ck3n 04.05.2020 um 10:54:40 Uhr
Goto Top
Hi und Sorry,

wusste nicht genau wie ich das formulieren soll.

Funktioniert das denn auch bei Linux Clients? Ich muss doch in der /etc/krb5.conf meine AD Server definieren und diese Liste wird von oben nach unten abgearbeitet wenn ich mich bei der AD authentifizieren will.
emeriks
emeriks 04.05.2020 aktualisiert um 11:22:58 Uhr
Goto Top
Für einfach DNS-Abfragen muss man sich nicht authentifizieren. Der DNS-Server entscheidet das anhand der Absender-Adresse des anfragenden Clients. Aber dafür muss er die Subnetze kennen, wo sie zugehören. Und das erfährt der Windows-DNS-Server über die Standort-und-Dienste-Konfiguration.

E.

Edit:
Ich habe das mal durchgestrichen. Die Entscheidung fällt wohl nur aufgrund der Netzwerkmaske. Das läuft im Deutschen bei Windows unter "Netzwerkmaskenanforderung".
https://support.microsoft.com/en-us/help/842197/description-of-the-netma ...
143728
143728 04.05.2020 aktualisiert um 11:15:23 Uhr
Goto Top
Zitat von @D1Ck3n:
Funktioniert das denn auch bei Linux Clients?
Ja.

Ich muss doch in der /etc/krb5.conf meine AD Server definieren
Nein nicht zwingend, lasse die manuelle Angabe weg und setze die SRV Records im DNS.
https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.ht ...

this tag must be given a value in each realm subsection in the configuration file, or there must be DNS SRV records specifying the KDCs.
aqui
aqui 04.05.2020 um 11:15:49 Uhr
Goto Top
Spannend wäre ja auch mal zu wissen wie die Entfernung bzw Nähe bestimmt wird ? Geschieht das über Routing Hop Counts oder Time Stamps in Ping oder wie wird das gemacht ?
143728
143728 04.05.2020 aktualisiert um 11:19:32 Uhr
Goto Top
Nur über die Subnetz-Definitionen im AD und sortierter DNS-Ausgabe an den Client, s. Link oben und @emeriks.
emeriks
emeriks 04.05.2020 um 11:22:13 Uhr
Goto Top
Zitat von @143728:
Nur über die Subnetz-Definitionen im AD und sortierter DNS-Ausgabe an den Client, s. Link oben und @emeriks.
Wenn es nur im einen nahen DC geht, dann ja. Ansonsten hat das nichts mit Site-and-Services zu tun.
aqui
aqui 04.05.2020 um 14:39:25 Uhr
Goto Top
Nur über die Subnetz-Definitionen im AD und sortierter DNS-Ausgabe an den Client
Aber nur mit dem Subnetz weiss ein Client ja noch nicht wie weit der weg ist, sprich wieviele Routing Hops und damit Delay das Ziel weg ist.
Nur mal Interesse halber ohne vom Thema abzuschweifen...?! face-wink
emeriks
emeriks 04.05.2020 um 14:47:19 Uhr
Goto Top
@aqui
So wie ich das verstanden habe, berechnet der DNS-Server von Windows über die Netzwerkmaske die theoretische Nähe.
Wenn er für einen Namen mehrerer Records hat, dann fordert er also vom anfragenden DNS-Client dessen Maske an. Dann wertet er aus, ob einer der Records eine Adresse enthält, welche mathematisch zum Subnetz des anfragenden Clients passt. Wenn ja, dann liefert er diese (und nicht nach Round-Robin den nächst besten). Wenn er da nichts passendes findet dann erweitert er die vom Client gemeldete Maske solange um jeweils 1 Bit, bis min. einer der Records in das Subnetz mit der erweiterten Maske fällt. Wenn das mehrere der Records sind, dann wird er unter diesen wohl im Round-Robin liefern.
aqui
aqui 04.05.2020 aktualisiert um 15:55:28 Uhr
Goto Top
Danke für das Feedback. Wieder was gelernt ! Das ist aber eher ein grobes Schätzeisen, wenn man es recht versteht.
NetzwerkDude
Lösung NetzwerkDude 04.05.2020 aktualisiert um 16:26:18 Uhr
Goto Top
Also wenn es um die Paketlaufzeit geht, könnte man das schon mit bash skripten - ich nehme dazu fping am liebsten, da er recht gut listen von ips verarbeiten kann:
ips="<erste ip> <zweite ip> <dritte ip>"  
fping $ips -e | sort -k4 | awk '{print $1}'  
Als Ergebnis erhälst du eine ip liste, sortiert nach der antwortzeit - ansonsten hinten via head -n 1 nur den ersten(=schnellsten) nehmen
emeriks
emeriks 04.05.2020 um 17:03:29 Uhr
Goto Top
Zitat von @aqui:
Das ist aber eher ein grobes Schätzeisen, wenn man es recht versteht.
Ja, so Pi mal Handwerkerdaumen.
D1Ck3n
D1Ck3n 05.05.2020 um 12:15:24 Uhr
Goto Top
Zitat von @NetzwerkDude:

Also wenn es um die Paketlaufzeit geht, könnte man das schon mit bash skripten - ich nehme dazu fping am liebsten, da er recht gut listen von ips verarbeiten kann:
> ips="<erste ip> <zweite ip> <dritte ip>"  
> fping $ips -e | sort -k4 | awk '{print $1}'  
> 
Als Ergebnis erhälst du eine ip liste, sortiert nach der antwortzeit - ansonsten hinten via head -n 1 nur den ersten(=schnellsten) nehmen

Hi NetzwerkDude,

genau das habe ich gesucht, danke! Eine kleine Frage noch: was meinst du mit "head -n 1"? Wo genau füge ich das ein? Im Grunde will ich nur den schnellsten Server aus einer Liste aus output

Grüße
D1Ck3n
143728
143728 05.05.2020 aktualisiert um 12:19:27 Uhr
Goto Top
Geht auch mit dem normalen ping:
#!/bin/bash
IPs="<erste ip> <zweite ip> <dritte ip>"  
for x in $IPs;do ping -c 1 $x | sed -rne 's/.*from ([^:]+).*time=([0-9\.]+).*/\2;\1/p';done | sort -g -t';' -k1 | head -n 1 | cut -d';' -f2  
D1Ck3n
D1Ck3n 05.05.2020 um 13:10:12 Uhr
Goto Top
Danke für beide Antworten! Das hat mir sehr geholfen.

Mir ist was kleines aufgefallen: manchmal wird mir anstatt dem schnellsten einer der langsamsten ausgegeben (siehe line 2 und 12)

[root@0 Documents]# ./geoping.sh
us.server.com is alive (132 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (11.1 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.1 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.2 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.6 ms)
[root@0 Documents]# ./geoping.sh
us.server.com is alive (130 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.2 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.3 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.0 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.7 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (11.3 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.2 ms)
[root@0 Documents]# ./geoping.sh
eu.server.com is alive (10.4 ms)

Woran kann das liegen?
aqui
aqui 05.05.2020 um 13:27:41 Uhr
Goto Top
Ein Ping ist doch immer davon abhängig was auf den einzelnen Providerleitungen so los ist. Das Internet ist vollvermascht und du gehst vermutlich blauäugig davon aus das jeder eine einzelne dedizierte Leitung hat was natürlich Quatsch ist.
Alles ist ein Shared Medium und Verbindungslinks sind immer abhängig vom Rest Traffic der da sonst noch "Grundrauschen" auf einem Link erzeugt. Insbesondere Burst Traffic. Vom Traffic Volumen ist damit auch massiv die Ping Times abhängig.
Vielleicht solltest du in einer ruhigen Minute nochmal genau über die Internet Infrastruktur nachdenken und dir das vor Augen führen.
Zudem kommt noch dazu das ICMP Traffic (dazu gehört Ping) in den Task Schedulern der Router und OS eher nebenbei behandelt wird.
In sofern sind das immer nur Pi mal Handwerkerdaumen.
NetzwerkDude
NetzwerkDude 06.05.2020 um 13:26:02 Uhr
Goto Top
Hinten:
fping $ips -e | sort -k4 | awk '{print $1}' | head -n 1