Schlagwort-Archiv: netzwerk

LAN vor WLAN im NetworkManager

Mein Arbeitsnotebook ist aus Performancegründen meistens per Kabel am Netzwerk angeschlossen, für die Mobilität im Büro besteht zusätzlich eine WLAN-Verbindung zum selben Netzwerk. Beide Verbindungen werden vom NetworkManager verwaltet, allerdings kann man hier keine Priorisierung einstellen, was zu folgender Routing-Tabelle führt:

Kernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 wlan00.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth010.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 wlan010.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0

Die Metric steht bei beiden Interfaces auf 0, weshalb nicht eindeutig festgelegt ist, wo der Traffic nun rausgeht. Das System nimmt die erste Route, die in diesem Falle über das WLAN läuft.Um dieses Problem zu umgehen, habe ich ein NetworkManager-Script gebastelt. Dies muss im Verzeichnis /etc/NetworkManager/dispatcher.d/ liegen und für root ausführbar sein.

#!/bin/sh#wireless-metric.sh - NetworkManager script#sets a higher metric for wireless connections to prioritize a wired connection#metric that will be used for the wireless connectionMETRIC=100#check input parametersif [ -z "$1" -o -z "$2" ]; thenecho "This script is meant to be run by the NetworkManager";echo "Syntax: $0 <device> <up/down>"exit 1fidevice=$1updown=$2#exit if the current connection isn't a wireless oneiwconfig $device > /dev/nullif [ $? -eq 161 ]; thenexitfi#get default route and local network addressdefaultgw=`ip route|grep default.*$device|awk '{print $3}'`localnet=`ip route|grep $device|grep -v default|head -n1|awk '{print $1}'`#delete the routes for the device and add new ones with the higher metricif [ "$updown" = "up" ]; thenroute del -net $localnet dev $deviceroute add -net $localnet dev $device metric $METRICroute del -net 0.0.0.0/0 gw $defaultgw dev $deviceroute add -net 0.0.0.0/0 gw $defaultgw dev $device metric $METRICfi

Nachdem ich die WLAN-Verbindung getrennt und wieder aufgebaut habe, finde ich nun eine eindeutige Routingtabelle vor:

Kernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         10.0.0.1        0.0.0.0         UG    100    0        0 wlan00.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth010.0.0.0        0.0.0.0         255.255.0.0     U     100    0        0 wlan010.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0

Das Script wurde getestet unter Debian 7.1 wheezy AMD64 mit NetworkManager Version 0.9.4.0-10.

ARP-Cache unter Linux vergrößern

Die Ursachen von Verbindungsabbrüchen in einem größeren LAN zu finden ist schwierig, in meinem Fall war die ARP-Tabelle des Routers voll. Auf Debian-Systemen ist sie standardmäßig auf 1024 Einträge begrenzt. Ist der Adressraum des Netzwerks größer, könnte jemand allein durch einen Ping-Scan die ARP-Tabelle des Routers füllen. Wenn das passiert, ist im Kernel-Log folgende Meldung zu lesen.

Dec 16 09:08:19 router kernel: [14468939.388404] Neighbour table overflow.
ad544175926582a129e2bb76e6a252a5001

Um die Optionen dauerhaft zu speichern, sollten sie in die sysctl.conf eingetragen werden.

net.ipv4.neigh.default.gc_thresh2=32768net.ipv4.neigh.default.gc_thresh3=65536