Frage: MAC Tabelle in Linux?

cisco_3548xl_mac_after

Wo ist die Tabelle mit allen MAC Adressen, die in letzter Zeit mit meiner Linux-Kiste kommuniziert haben?

Es geht nicht um die arp Tabelle. Die bekomme ich mit

arp

oder dem neuen Befehl

ip neigh show

heraus. Es geht um das, was auf einer Cisco der Befehl

show mac-address-table

auswirft. Etwa, wenn ich einen transparenten Proxy baue und wissen will, welche MAC hinter welchem Interface ist oder wenn ich einfach nur sehen will, welche MAC-Adressen ohne IP was von mir gewollt haben könnten.

Ich habe mich im /proc totgesucht, das ethtool befragt, Tante Google gequält, Kollegen ausgequetscht und es hat alles nichts gebracht. Wer hat eine Idee?

Frage: MAC Tabelle in Linux?

Welche Prefixe liefert welches AS – Teil 3

In den Teilen 1 und 2 habe ich per whois und per IRRToolset nach Prefixen eines AS oder eines AS-Sets gesucht. Ich will diese Information nutzen, um automatische Filterlisten für einen bird Routeserver zu bauen. Ein Kollege hat mich mit der Nase auf bgpq3 gestupst. Man muss es zwar auch selbst kompilieren, aber ./configure; make; make install funktionierte anstandslos auf meinem Debian.

Das Programm wird weiter aktiv entwickelt, im Gegensatz zu dem IRRToolset, und es ist deutlich schneller. Hinter meiner DSL-Leitung braucht das IRRToolset für das Zusammensammeln aller Prefixe von dem befreundeten Provider TNG (AS-TNG) geschlagene 1 Minute und 8 Sekunden und das bgpq3 nur 2 Sekunden. Wir haben also einen Gewinner.

Der Routeserver läuft mit der Software bird. Auch wenn es nicht schwer ist, selbst aus einer Liste an Prefixen eine Access-Liste zusammenzubauen, so bietet bgpq3 doch die Möglichkeit neben IOS, Junos und sogar JSON eben auch bird Access-Listen direkt auszugeben. Das spart Arbeit. Und so sieht es dann aus:

# bgpq3 -b -l allnet  AS-LWL
allnet = [
    31.24.144.0/21,
    31.209.80.0/20,
    37.72.144.0/21,
    37.72.144.0/22,
    37.72.144.0/24,
    37.72.145.0/24,
    37.72.146.0/24,
    37.72.147.0/24,
    37.72.148.0/22,
    37.72.148.0/24,
    37.72.149.0/24,
    37.72.150.0/24,
    37.72.151.0/24,
    46.19.88.0/21,
    46.19.88.0/22,
    46.19.88.0/24,
    46.19.89.0/24,
    46.19.90.0/24,
    46.19.91.0/24,
    46.19.92.0/22,
    46.19.92.0/24,
    46.19.93.0/24,
    46.19.94.0/24,
    46.19.95.0/24,
    87.253.189.0/24,
    91.202.40.0/22,
    95.47.96.0/24,
    109.69.64.0/21,
    152.143.0.0/16,
    185.52.160.0/22,
    185.55.116.0/22,
    185.55.116.0/23,
    185.55.116.0/24,
    185.55.117.0/24,
    185.55.118.0/24,
    185.76.188.0/22,
    185.76.188.0/23,
    193.47.147.0/24,
    195.191.196.0/23
];
Welche Prefixe liefert welches AS – Teil 3

Welche Prefixe liefert welches AS – Teil 2

Mit der -i origin Abfrage vom letzten Post gibt es zu viele Einschränkungen. Das funktioniert nur mit der RIPE und andere IRR haben eine andere whois-Syntax und um ein ganzes AS-set rekursiv aufzulösen, muss ich unter Umständen viele, viele Male den Befehl anwenden. Das zu automatisieren, hat natürlich schon mal jemand gemacht. Das ISC hat mit dem IRRToolset ein eben solches herausgebracht. Ich habe es mir heruntergeladen und unter Debian 7 kompiliert. Dafür müssen ein paar Pakete installiert werden:

apt-get install make g++ bison flex

Danach kann man es wie üblich mit ./configure; make; make install kompilieren und installieren. Drei Programme werden installiert: peval, rpslcheck, rtconfig

Mit peval kann man rekursiv AS-Sets durchsuchen. Hier wieder ein Beispiel mit dem AS meines Arbeitgebers:

% peval 'afi ipv4, ipv6 AS-LWL'

({195.191.196.0/23, 193.47.147.0/24, 185.76.188.0/22, 185.76.188.0/23, 185.55.116.0/22, 185.55.118.0/24, 185.55.116.0/23, 185.55.116.0/24, 185.55.117.0/24, 185.52.160.0/22, 152.143.0.0/16, 109.69.64.0/21, 95.47.96.0/24, 91.202.40.0/22, 87.253.189.0/24, 46.19.88.0/21, 46.19.88.0/22, 46.19.92.0/22, 46.19.88.0/24, 46.19.89.0/24, 46.19.90.0/24, 46.19.91.0/24, 46.19.92.0/24, 46.19.93.0/24, 46.19.94.0/24, 46.19.95.0/24, 37.72.144.0/21, 37.72.144.0/22, 37.72.148.0/22, 37.72.144.0/24, 37.72.145.0/24, 37.72.146.0/24, 37.72.147.0/24, 37.72.148.0/24, 37.72.149.0/24, 37.72.150.0/24, 37.72.151.0/24, 31.209.80.0/20, 31.24.144.0/21}) OR ({2a04:ec40:ff28::/48, 2a04:ec40:ff29::/48, 2a04:ec40:ff20::/48, 2a04:ec40:ff21::/48, 2a04:ec40:ff22::/48, 2a04:ec40:ff23::/48, 2a04:ec40:ff24::/48, 2a04:ec40:ff25::/48, 2a04:ec40:ff26::/48, 2a04:ec40:ff27::/48, 2a04:ec40:ff18::/48, 2a04:ec40:ff19::/48, 2a04:ec40:ff14::/48, 2a04:ec40:ff15::/48, 2a04:ec40:ff16::/48, 2a04:ec40:ff17::/48, 2a04:ec40:ff12::/48, 2a04:ec40:ff13::/48, 2a04:ec40:ff10::/48, 2a04:ec40:ff09::/48, 2a04:ec40:ff04::/48, 2a04:ec40:ff05::/48, 2a04:ec40:ff06::/48, 2a04:ec40:ff07::/48, 2a04:ec40:ff02::/48, 2a04:ec40:ff03::/48, 2a04:ec40:ff01::/48, 2a02:2918::/32, 2a02:2918:adad::/48, 2a02:16d0::/32, 2a00:c380::/32, 2001:67c:1b43::/48})

Wie man sieht, ist das Ergebnis deutlich länger als eine einfache whois-Abfrage nach dem AS. Das liegt daran, dass nun rekursiv alle Prefixe von allen im AS-set definierten AS mit ausgegeben werden.

Mit rpslcheck hat man einen erweiterten whois-client, einfach mal ausprobieren. Das Programm rtconfig wiederum ist sehr spannend. Es kann Konfigurationen für Cisco und Juniper-Geräte generieren. Ich muss mir das mal genauer anschauen. Aber ehrlich gesagt, bei so wichtigen Geräten im Netz will ich lieber selbst die Konfig schreiben und das nicht einem Script überlassen.

Welche Prefixe liefert welches AS – Teil 2

expect in bash

Mit expect kann man u.A. eine Telnet-Verbindung auf machen und dann Geräte, die keine andere Möglichkeit (snmp, tftp, etc.) bieten per script konfigurieren. Daher will man so ein expect-script gerne mal in ein bash script integrieren. Das geht so:

#!/bin/bash

# hier mein bash script. bash-Variablen werden in expect uebernommen

ROUTER=192.168.1.1
USER=eliyah
PASS=geheim
expect <<- DONE
     spawn telnet $ROUTER
     expect "Username:"
     send "$USER\r"
     expect "Password:"
     send "$PASS\r"
     expect "*#"
     send " ter len 0\r"
     expect "*#"
   # hier kommt der expect-Teil, der den Router konfiguriert
     send "end\r"
     expect "*#"
     send "wr\r"
     expect "*#"
     send "exit\r"
     exit
DONE

exit 0

expect in bash

NAT und Cisco

Hier will ich nicht erklären, wie man NAT auf einer Cisco konfiguriert. Aber ein paar Dinge suche ich immer wieder und daher schreibe ich sie hier auf:

  • Port forwarding mit statischer IP
ip nat inside source static tcp [int. IP] [int. Port] [ext. IP] [ext. Port] extendable
  • Port forwarding mit dynamischer IP auf Dialer1
ip nat inside source static tcp [int. IP] [int. Port] interface Dialer1 [ext. Port]
  • exposed host (alle Ports auf eine interne IP)
ip nat inside source static [int. IP] interface Dialer1

und damit Telnet von aussen auf den Router noch geht (wenn gewünscht):

ip nat inside source static tcp [int. Router-IP] 23 [ext. IP] 23 extendable
NAT und Cisco