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-Key: 569462

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

Printed on: July 24, 2024 at 14:07 o'clock

Mitglied: 143728
143728 May 04, 2020 updated at 08:40:31 (UTC)
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...
Member: Vision2015
Vision2015 May 04, 2020 at 08:36:26 (UTC)
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
Member: D1Ck3n
D1Ck3n May 04, 2020 at 08:54:40 (UTC)
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.
Member: emeriks
emeriks May 04, 2020 updated at 09:22:58 (UTC)
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 ...
Mitglied: 143728
143728 May 04, 2020 updated at 09:15:23 (UTC)
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.
Member: aqui
aqui May 04, 2020 at 09:15:49 (UTC)
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 ?
Mitglied: 143728
143728 May 04, 2020 updated at 09:19:32 (UTC)
Goto Top
Nur über die Subnetz-Definitionen im AD und sortierter DNS-Ausgabe an den Client, s. Link oben und @emeriks.
Member: emeriks
emeriks May 04, 2020 at 09:22:13 (UTC)
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.
Member: aqui
aqui May 04, 2020 at 12:39:25 (UTC)
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
Member: emeriks
emeriks May 04, 2020 at 12:47:19 (UTC)
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.
Member: aqui
aqui May 04, 2020 updated at 13:55:28 (UTC)
Goto Top
Danke für das Feedback. Wieder was gelernt ! Das ist aber eher ein grobes Schätzeisen, wenn man es recht versteht.
Member: NetzwerkDude
Solution NetzwerkDude May 04, 2020 updated at 14:26:18 (UTC)
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
Member: emeriks
emeriks May 04, 2020 at 15:03:29 (UTC)
Goto Top
Zitat von @aqui:
Das ist aber eher ein grobes Schätzeisen, wenn man es recht versteht.
Ja, so Pi mal Handwerkerdaumen.
Member: D1Ck3n
D1Ck3n May 05, 2020 at 10:15:24 (UTC)
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
Mitglied: 143728
143728 May 05, 2020 updated at 10:19:27 (UTC)
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  
Member: D1Ck3n
D1Ck3n May 05, 2020 at 11:10:12 (UTC)
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?
Member: aqui
aqui May 05, 2020 at 11:27:41 (UTC)
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.
Member: NetzwerkDude
NetzwerkDude May 06, 2020 at 11:26:02 (UTC)
Goto Top
Hinten:
fping $ips -e | sort -k4 | awk '{print $1}' | head -n 1