Linegraph für das Telekom Gateway

Wie kann man das Konfigurieren?
Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Linegraph für das Telekom Gateway

Post by Stosi » December 13th, 2015, 6:56 pm

Hallo!

Da ich gerne ein Linegraph für das Telekom GW haben will, habe ich mich mal hingesetzt und etwas kleines gebastelt. Da das GW nicht auf Pings antwortet, ist mit "Ping" natürlich nicht viel zu holen...

Also müsste ein Skript her, was die Latenz des 2. Hop anzeigt.
Hier hab ich dann etwas getestet und mit grep die ausgabe von traceroute zurecht geschnibbelt, um den 2. Hop in die "/etc/hosts" zu übergeben.

Hierzu hatte ich der /etc/ppp/ip_up folgenden Code eingetragen:

Code: Select all

#no ppp-gateway answer 
hop2_result=`traceroute ping.ipfire.org | sed -ne '3p' | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | head -1`;
  	
	if echo $hop2_result | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" ; then
		#use hop2
		echo "$hop2_result gateway" >> /tmp/hosts
	fi
Dies hat auch soweit funktioniert und der 2.Hop wurde immer brav übergeben.
Nur leider ist bei ipfire kein traceroute standardmäßig enthalten und ich habe dann nach Alternativen gesucht.

Aufgefallen ist mir dann "Tracepath", ist bestandteil von iputils und sollte eigentlich Standard sein, hopefully!
Also noch etwas kreuz und quer gedacht und mittlerweile habe ich es so gelöst:

Datei erstellt:

Code: Select all

touch /etc/sysconfig/gw_ping.sh
Die Datei ausführbar machen:

Code: Select all

chmod +x /etc/sysconfig/gw_ping.sh
Und mit folgendem Inhalt füllen:

Code: Select all

#!/bin/bash

HOSTNAME="${COLLECTD_HOSTNAME:-localhost}"
INTERVAL="${COLLECTD_INTERVAL:-30}"
PLUGIN_NAME="Telekom_Gateway"
 
while sleep "$INTERVAL"; do
GWPING=`/usr/bin/tracepath -n gateway | sed -ne '3p' | grep -E -o "([0-9]{1,3}[\.][0-9]{1,4}ms)" | cut -d "m" -f1`;
	echo "PUTVAL \"$HOSTNAME/ping/ping-$PLUGIN_NAME\" interval=$INTERVAL N:$GWPING"
done
Dann noch die /etc/collectd.custom bearbeiten:

Code: Select all

LoadPlugin exec

<Plugin exec>
	Exec "nobody:nobody" "/etc/sysconfig/gw_ping.sh"
</Plugin>
Dann noch ein

Code: Select all

/etc/init.d/collectd restart
und es sollte funktionieren.
t-com_gw.jpg
Eventuell hat ja noch jemand von euch Verbesserungen oder generelle Anmerkungen/Hinweise etc.
Last edited by Stosi on January 2nd, 2016, 1:42 pm, edited 2 times in total.

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 15th, 2015, 10:38 pm

Ahmt,

ausprobiert - funktioniert soweit.

Allerdings knallte 'tracepath' bei meiner Konfiguration (FORWARD und OUTGOING standardmäßig blockiert) innerhalb von ~17 Stunden mit Port 44444 ca. 4500 Mal in Richtung 178.63.73.246 vor die REJECT_OUTPUT-Gußeisenpumpe.

In den Statistiken machte sich das echt gut... 8)

Da sollte man ev. noch ein 'Bitte nicht loggen' mit einbauen.

Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 11:15 am

Hallo!
FischerM wrote: Da sollte man ev. noch ein 'Bitte nicht loggen' mit einbauen.
Man könnte tracepath generell mit einem bestimmten Port starten

Code: Select all

tracepath -n -p 44444 gateway
und in der /etc/sysconfig/firewall.local dies eintragen:

Code: Select all

iptables -A CUSTOMOUTPUT -p udp -m udp –sport 44444 -j ACCEPT
Eine andere Idee hätte ich da nicht.

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 16th, 2015, 12:09 pm

Hi,

Code: Select all

iptables -A CUSTOMOUTPUT -p udp -m udp –sport 44444 -j ACCEPT
halte ich für keine gute Idee, dann würde - so wie ich das verstehe - das IPFire-Gateway ständig auf Port 44444 angepingt werden, weil man die Verbindung zum davorliegenden Telekom-Gateway überprüft. Wenn das noch einige mehr machen, gibts eine ziemliche tracepath-Flut...

Ich fände droppen/rejecten und NICHT loggen besser. Sollte halt nicht mehr in den Logs auftauchen.

Jm2c,
Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 1:35 pm

FischerM wrote:halte ich für keine gute Idee, dann würde - so wie ich das verstehe - das IPFire-Gateway ständig auf Port 44444 angepingt werden, weil man die Verbindung zum davorliegenden Telekom-Gateway überprüft.
Das IPFire-Gateway ist in diesem Fall doch "ping.ipfire.org", aufgrund des nicht pingbaren Telekom-Gateways.
Macht es einen so großen Unerschied, ob nun Oping oder Tracepath "pingt"?
FischerM wrote: Wenn das noch einige mehr machen, gibts eine ziemliche tracepath-Flut...
Man könnte es auch auf das "echte" Gateway begrenzen und/oder für Router-Kaskaden ein Gateway such Script machen. So a la: Wenn Latenz kleiner-gleich 2 ms, dann teste den nächsten Hop usw.
FischerM wrote: Ich fände droppen/rejecten und NICHT loggen besser. Sollte halt nicht mehr in den Logs auftauchen.
Du bekommst REJECT_OUTPUT doch aufgrund der restriktiven FW-Einstellung.
Tracepath geht per UDP auf z.B. Port 44444 raus. Deine Output-Regel verwirft dies, also ab ins LOG (sofern eingestellt). Wenn man nun UDP/Port 44444 ausgehend erlaubt, dann sollte es doch kein Logeintrag geben.

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 16th, 2015, 2:20 pm

Hi,

kann sein, dass wir knapp aneinander vorbei reden: ;)
stosi wrote:Du bekommst REJECT_OUTPUT doch aufgrund der restriktiven FW-Einstellung.
Genau. Ich fahre eine relativ "paranoide" Konfig.
stosi wrote:Tracepath geht per UDP auf z.B. Port 44444 raus. Deine Output-Regel verwirft dies, also ab ins LOG (sofern eingestellt).
Yep. Und das "zermarmelt" mir ein bißchen die Logs. Sieht halt unschön aus.
stosi wrote:Wenn man nun UDP/Port 44444 ausgehend erlaubt, dann sollte es doch kein Logeintrag geben.
Auch richtig, aber dann schlagen nach meinem Verständnis diese ganzen tracepath-Anfragen (von u.U. mehreren Clients, je nachdem, wieviele das einsetzen) ungebremst bei ping.ipfire.org auf. Und das ist es, was mir an der "ich mache den Port auf-Lösung" nicht gefällt. Deswegen würde ich diese Anfragen zwar weiterhin OUTGOING blocken, aber eben einfach nicht loggen wollen. Falls ich mit dieser Ansicht falsch liege, bitte ich um Korrektur.

Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 2:39 pm

Huhu!
FischerM wrote: Auch richtig, aber dann schlagen nach meinem Verständnis diese ganzen tracepath-Anfragen (von u.U. mehreren Clients, je nachdem, wieviele das einsetzen) ungebremst bei ping.ipfire.org auf.
Hä?
Welche Clients meinst du?
FischerM wrote: Deswegen würde ich diese Anfragen zwar weiterhin OUTGOING blocken, aber eben einfach nicht loggen wollen.
Dann macht die Telekom-Gateway Abfrage doch gar keine Sinn.
Warum sollte man etwas "einbauen" und dann blocken?

Bin verwirrt! :o

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 16th, 2015, 3:21 pm

Hoho! ;)
stosi wrote:Welche Clients meinst du?
Ok, flascher Begriff, ich meinte nicht Clients, sondern IPFire-Router, auf denen dieses "Addon" zu Einsatz kommt.

Weil: die "tracepathen" nu alle in Richtung 'ping.ipfire.org' und filtern aus der Ergebnis-Liste der '/etc/sysconfig/gw_ping.sh' ihr Telekom-Gateway zwischendurch raus, um den Graph bauen zu können. Liege ich soweit richtig (kann ja sein, dass hier irgendwo ein Teakholz-Brett vorhanden ist, aber das sehe ich halt grad nicht...)?

Aber - und so verstehe ich das bis jetzt - wenn ich jetzt meinen Port 44444 für OUTGOING *aufmache*, schlagen diese Pings bis zu "ping.ipfire.org' durch. Und das würde ich vermeiden wollen.

Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 3:59 pm

Hu!
FischerM wrote: Ok, flascher Begriff, ich meinte nicht Clients, sondern IPFire-Router, auf denen dieses "Addon" zu Einsatz kommt.
Jop, gebongt!
FischerM wrote: Weil: die "tracepathen" nu alle in Richtung 'ping.ipfire.org' und filtern aus der Ergebnis-Liste der '/etc/sysconfig/gw_ping.sh' ihr Telekom-Gateway zwischendurch raus, um den Graph bauen zu können.
Jop, korrekt!
Alle 30 Sekunden, so wie Oping/Collectd auch.
FischerM wrote: Aber - und so verstehe ich das bis jetzt - wenn ich jetzt meinen Port 44444 für OUTGOING *aufmache*, schlagen diese Pings bis zu "ping.ipfire.org' durch. Und das würde ich vermeiden wollen.
Du willst nicht das es bis ping.ipfire.org geht, sondern z.B. am 3 Hop endet oder wie?
Last edited by Stosi on December 16th, 2015, 11:25 pm, edited 1 time in total.

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 16th, 2015, 4:03 pm

Ha! ;)
stosi wrote:Du willst nicht das es bis ping.ipfire.org geht, sondern z.B. am 3 Hop endet oder wie?
Bingo. ;D

So oder ähnlich.

Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 5:04 pm

Huhu!
FischerM wrote:
stosi wrote:Du willst nicht das es bis ping.ipfire.org geht, sondern z.B. am 3 Hop endet oder wie?
Bingo. ;D
Dann sag das doch.... ::)

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 16th, 2015, 5:40 pm

Hü!

Aber ich dachte doch, das hätte ich da oben schon ausgedrückt...ging aber halt knapp aneinander vorbei. O0
Fischerm wrote:...dann würde - so wie ich das verstehe - das IPFire-Gateway ständig auf Port 44444 angepingt werden...
Egal, jetzt ist klar, was ich meine!?

An sich finde ich die Option, das Telekom-Gateway "unter Beobachtung" zu haben, ganz nett. Nur gibts (nicht nur bei 'tracepath') die Begrenzung auf eine bestimmte HOP-Anzahl anscheinend nicht. Ein Programm, welches sowas bietet, habe ich zumindest noch nicht gefunden. Fände ich in diesem Fall wünschenswert.

Gruß
Matthias

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 16th, 2015, 9:28 pm

Huhu!
FischerM wrote: Aber ich dachte doch, das hätte ich da oben schon ausgedrückt...
Kam hier irgendwie anders an, aber ist ja nun auch egal.
FischerM wrote: An sich finde ich die Option, das Telekom-Gateway "unter Beobachtung" zu haben, ganz nett. Nur gibts (nicht nur bei 'tracepath') die Begrenzung auf eine bestimmte HOP-Anzahl anscheinend nicht.
Also!

Wenn man das:
(Ich hoffe der Syntax passt so.)

Code: Select all

#!/bin/bash
hop=1
var=false
lat=2

while [[ $var = false ]]; do
		TRACE=`/usr/bin/tracepath -n -p 44444 ping.ipfire.org  | sed -ne "$hop"p | grep -E -o "([0-9]{1,3}[\.][0-9]{1,4}ms)" | cut -d "m" -f1`;
		if [[ $TRACE > $lat ]]; then
			var=true;
			GWIP=`/usr/bin/tracepath -n -p 44444 ping.ipfire.org  | sed -ne "$hop"p | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | head -1`;
			echo "$GWIP" >> /tmp/realgw 
			else
			hop=$[hop + 1]
		fi 
done 
mv /tmp/realgw /etc/sysconfig/realgw 
Einmal beim Start ausführt, dann schreibt es das GW bzw. den ersten Hop mit mehr als 2ms Latenz in das File "realgw". Danach könnte man dann das GW/Hop mit dem "gw_ping.sh" Script auslesen und zum "Tracepathen" nutzen.

Code: Select all

#!/bin/bash

HOSTNAME="${COLLECTD_HOSTNAME:-localhost}"
INTERVAL="${COLLECTD_INTERVAL:-30}"
PLUGIN_NAME="Telekom_Gateway"
gw=$(cat /etc/sysconfig/realgw)

while sleep "$INTERVAL"; do
GWPING=`/usr/bin/tracepath -n $gw | sed -ne '2p' | grep -E -o "([0-9]{1,3}[\.][0-9]{1,4}ms)" | cut -d "m" -f1`;
	echo "PUTVAL \"$HOSTNAME/ping/ping-$PLUGIN_NAME\" interval=$INTERVAL N:$GWPING"
done
Oder man liest das GW über "route -n" aus und übergibt es in das File "realgw".

Code: Select all

route -n | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -n '2p'
Wobei man dann bei einer Router-Kaskade immer noch das eigene "Router-GW" hat.

Und wie man bei einer Zwangstrennung das neue GW bekommt, weiß ich nicht. :-[
Dazu müsste man in "ip_up" Änderungen machen und nach einem Update ist es dann eventuell weg.

Ideen?
Vorschläge?

Stosi
Posts: 251
Joined: July 20th, 2013, 8:47 pm

Re: Linegraph für das Telekom Gateway

Post by Stosi » December 19th, 2015, 12:03 pm

Hallo!
FischerM wrote:Nur gibts (nicht nur bei 'tracepath') die Begrenzung auf eine bestimmte HOP-Anzahl anscheinend nicht.
Was hältst du den hiervon:

Code: Select all

#!/bin/bash
#	/etc/sysconfig/findgw.sh
#RFC 1918 IP Address Allocation for Private Internets
#10.0.0.0        -   10.255.255.255  (10/8 prefix)
#172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
#192.168.0.0     -   192.168.255.255 (192.168/16 prefix)

# Get Gateway from route and write Gateway to file
GETGW=$(route -n | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -n 2p );
echo "$GETGW" > /tmp/nexthop

#Query if Hop matches to RFC 1918 
RFC1918=$(sed -n -e '1p' /tmp/nexthop | grep -E -o -i "10[\.]([0-9]{1,3}[\.]){2}[0-9]{1,3}|172[\.](1[6-9])[\.][0-9]{1,3}[\.][0-9]{1,3}|172[\.](2[0-9])[\.][0-9]{1,3}[\.][0-9]{1,3}|172[\.](3[0-1])[\.][0-9]{1,3}[\.][0-9]{1,3}|192[\.]168[\.][0-9]{1,3}[\.][0-9]{1,3}");

#Get Hop from file
NEXTHOP=$(sed -n -e '1p' /tmp/nexthop);

#Hop count
HOP=1

while [[ "$NEXTHOP" = "$RFC1918" ]]; do

  # ping -c =count, -n = numeric only, -t = TTL, 
  HOPTEST=$(ping -i 0.01 -c 2 -n -t "$HOP" 178.63.73.246 | sed -n 2p | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}");
  echo "$HOPTEST" > /tmp/nexthop
		
    #Check if HOP is not equal to RFC 1918
    if [[ "$NEXTHOP" != "$RFC1918" ]]; then
    echo "PUBLIC GATEWAY FOUND: $NEXTHOP"; exit 
    else
 
      #Check if maximum count reached
      if [[ "$HOP" = 5 ]]; then
      echo "MAX HOP NO. REACHED"; exit 
      else

	 #Hop count +1
        HOP=$(( HOP + 1  ))
      fi		
    fi
done

echo "$HOP" >> /tmp/nexthop
mv /tmp/nexthop /etc/sysconfig/gateway.external
Und dann:

Code: Select all

#!/bin/bash
#	/etc/sysconfig/tracegw.sh	
#
#

HOSTNAME="${COLLECTD_HOSTNAME:-localhost}"
INTERVAL="${COLLECTD_INTERVAL:-30}"
NAME="GATEWAY"
GW=$(sed -n -e '1P' /etc/sysconfig/gateway.external)
HOP=$(sed -n -e '2P' /etc/sysconfig/gateway.external)

while sleep "$INTERVAL"; do
GWPING=$(/usr/bin/tracepath -n "$GW" | sed -n -e /"$HOP":/p | grep -E -o "([0-9]{1,3}[\.][0-9]{1,4}ms)" | cut -d "m" -f1 | sed -n -e '1p' );
echo "PUTVAL \"$HOSTNAME/ping/ping-$NAME\" interval=$INTERVAL N:$GWPING"
done
Das Script "findgw" sucht bis zum 5. Hop nach einer öffentlichen IP (ping TTL 1-5) und übergibt diese in das File "gateway.external". Das Script "tracegw" nimmt sich dann das GW aus dem File und Tracepath "pingt" nur bis zu dem Hop. Somit bekommt ping.ipfire.org keinerlei Pakete zugesendet.

Das Script "findgw" müsste aber bei ppp0 UP einmal durchlaufen. Eventuell könnte man das File dann in "/etc/rc.d/init.d/networking/red.up" stecken (z.B. als "31-findgw") oder gibt es eine bessere Möglichkeit?
Last edited by Stosi on December 19th, 2015, 3:40 pm, edited 1 time in total.

User avatar
FischerM
Community Developer
Community Developer
Posts: 1025
Joined: November 2nd, 2011, 12:28 pm

Re: Linegraph für das Telekom Gateway

Post by FischerM » December 19th, 2015, 1:04 pm

Hi,
stosi wrote:...oder gibt es eine bessere Möglichkeit
Sorry, aber da ich mich programmtechnisch mittlerweile *ziemlich* weit hinter dir befinde - ;) - würde ich auf Anhieb sagen: wenn ich mir das so durchlese, denke ich, das könnte klappen. ::)

Ich versuchs mal nachzuvollziehen:

Im Verzeichnis '/etc/rc.d/init.d/networking/red.up' muss die Datei '31-findgw' (z.B.) erstellt werden. Diese wiederum schreibt zwei Parameter in '/etc/sysconfig/gateway.external' (öffentliche IP, 5.HOP).

Bessere Möglichkeit? Muss ich überlegen, weiß ich grad auch nicht, klingt aber für mich bis jetzt schlüssig. Diese Datei sollte jeweils nur einmal, z.B. beim Verbindungsaufbau, erstellt werden und die benötigten Parameter enthalten. Ev. sollte noch geprüft werden, ob der Inhalt korrekt ist?

Überlegung: ist das Verzeichnis '/etc/sysconfig' für 'gateway.external' sinnvoll/geeignet? Spricht was dafür/dagegen?

'/etc/sysconfig/tracegw.sh' liest ''/etc/sysconfig/gateway.external' ein, übernimmt die beiden Parameter und führt '/usr/bin/tracepath' entsprechend aus. Aber eben nicht, wie bisher, jedesmal bis zu 'ping.ipfire.org', sondern nur bis zum 5. HOP. Bin ich soweit hinterhergekommen?

Und zum Schluss muss dann IMHO noch die '/etc/sysconfig/tracegw.sh' - so wie in deinem ersten Posting beschrieben - in die '/etc/collectd.custom' eingetragen und der 'collectd' neu gestartet werden.

Testen könnte ich hier ja mal - stimmts soweit? (Ich hoffe, ich hab mich jetzt nicht allzusehr zum 'Brot' gemacht...)

Gruß
Matthias

Post Reply