====== 10 GE Paketbeschleuniger ======
**Übung: einen 10 GE Link zwischen 2 Switchen mittels zweier 1 GE Ports auslasten**
Wenn man der blinkenden Link-Leuchte am Switch nicht traut, die behauptet einen funktionsfähigen 10 GE-Link anzuzeigen, dann kann man mittels eines Paketbeschleunigers mal testen, ob da wirklich 10GE durch gehen.
**__Der Trick__: 20 VLANs einrichten, per Patchkabel jeweils abwechselend auf einem Switch bridgen und mit den 2 Rechnern in unterschiedlichen VLANs Traffic erzeugen**
===== Notwenige Hardware =====
* 2x HP 3800 oder 5400 mit SFP+ und min. 20 Kupferports
* 2x 10 GE SFP+ GBICs
* 2 Rechner mit Linux, Gbit-fähig
* Glas-Patchkabel und Adapter für einen LC-LC-Direktlink
* 20 kurze RJ45-Patchkabel
* evtl. serielles Kabel + Adapter zum Switch konfigurieren
===== Aufbau =====
* 2 HP-Switche mit Strom und 10 GE-GBICs bestücken
* GBICs mit Patchkabel verbinden
* Kupferpatches (Ports auf einem Switch kurzschließen)
* **Switch A**
* Port 1-2
* Port 3-4
* usw.
* Port 19-20
* **Switch B**
* Port 2-3
* Port 4-5
* usw.
* Port 18-19
* Rechner an **Switch B, Port 20 und 21 (oder höher)** anschließen
====Bilder====
{{paketbeschleuniger1.jpg?direct&300|}}
{{paketbeschleuniger2.jpg?direct&300|}}
{{paketbeschleuniger3.jpg?direct&300|}}
{{paketbeschleuniger4.jpg?direct&300|}}
{{paketbeschleuniger6.jpg?direct&300|}}
\\
===== Switch-Config =====
* auf **beiden** Switchen
* VLANs 2-20 anlegen
* Port 1 -> DEFAULT_VLAN untagged
* Port 2 -> VLAN 2 untagged
* usw.
* Port 20 -> VLAN 20 untagged
* 10 GE Port -> DEFAULT_VLAN untagged, **Alle anderen VLANS tagged**
* auf **Switch B** für die beiden Rechner
* Port 20 -> VLAN 20 untagged
* Port 21 -> DEFAULT_VLAN untagged
* Mgmt-IP: 10.0.0.3 (Netzmaske: 255.255.255.0) im DEFAULT_VLAN
===== Traffic erzeugen =====
=== 1. beiden Rechnern je eine IP anlegen ===
ip link set dev eth0 up
ip addr add 10.0.0.1/24 dev eth0
ip link set dev eth0 up
ip addr add 10.0.0.2/24 dev eth0
=== 2. auf Rechner 1 einen Server starten ===
nc -l -p 1234 > /dev/null
=== 3. auf Rechner 2 einen Client starten und Daten reinkippen ===
cat /dev/zero | nc 10.0.0.1 1234
=== 4. Portcounter beim Überlaufen zugucken ;) ===
===== Portauslastung anzeigen =====
* Switch A oder B eine IP im DEFAULT_VLAN geben
* 10.0.0.3/24
* auf Rechner im DEFAULT_VLAN
* Script (siehe unten) aufrufen (benötigt SNMP-Tools, unter Debian "apt-get install snmp")
# Usage: -h -s -i
./snmp_bandwidth.sh -h 10.0.0.3 -s public -i 25
=== erwartete Ausgabe ===
Inbound: 10501 Mbps, Outbound: 10498 Mbps, Speed: 10000 Mbps
Inbound: 10452 Mbps, Outbound: 10450 Mbps, Speed: 10000 Mbps
{{paketbeschleuniger5.jpg?direct&300|}}
\\
===== Bashscript =====
init () {
INTNUMBER=$interface
OUT=$(snmpget -v2c -c $community_string $hostname ifHCOutOctets.$INTNUMBER | awk '{print $4}')
IN=$(snmpget -v2c -c $community_string $hostname ifHCInOctets.$INTNUMBER | awk '{print $4}')
#SPEED=$(snmpget -v2c -c $community_string $hostname ifSpeed.$INTNUMBER | awk '{print $4}')
SPEED=10000000000
TIME=1
if [ -z "$OUT" ] || [ -z "$IN" ]; then
msg="Unable to retrieve SNMP info."
state=CRITICAL
echo $state $msg
exit 2
fi
}
check () {
#wait $TIME before running the same check, this way we can confirm how much the data has changed in two periods.
sleep $TIME
OUT2=$(snmpget -v2c -c $community_string $hostname ifHCOutOctets.$INTNUMBER | awk '{print $4}')
IN2=$(snmpget -v2c -c $community_string $hostname ifHCInOctets.$INTNUMBER | awk '{print $4}')
DELTAOUT=$(( $OUT2 - $OUT))
DELTAIN=$(( $IN2 - $IN))
#Value is in octets so will need to be divided by 8 to get bytes, this is then divided by 1024 to give kilobytes.
INPUTBW=$(((($DELTAIN)/$TIME)*8))
OUTPUTBW=$(((($DELTAOUT)/$TIME)*8))
#For percentage usage we do 100/(total possible bandwidth – current bandwidth).
percentage_use=$(echo "scale=9; $INPUTBW/$SPEED" | bc)
PRCNTIN=$(echo "scale=0; 100*$percentage_use" | bc)
percentage_use=$(echo "scale=9; $OUTPUTBW/$SPEED" | bc)
PRCNTOUT=$(echo "scale=0; 100*$percentage_use" | bc)
echo "Inbound: " $((INPUTBW/1000000)) "Mbps ($PRCNTIN% Used), Outbound: " $((OUTPUTBW/1000000)) "Mbps ($PRCNTOUT% Used), Speed: " $(($SPEED/1000000)) "Mbps"
IN=$IN2
OUT=$OUT2
}
while getopts ":i:s:h:" option
do
case $option in
i)interface=$OPTARG
;;
s)community_string=$OPTARG
;;
h)hostname=$OPTARG
;;
*) echo "Syntax is $usage -h -s -i "
exit 1;;
esac
done
if [ -z "$hostname" ]; then
echo "-h) IP address required."
exit 1
elif [ -z "$community_string" ]; then
echo "-s) snmp string needs to be specified."
exit 1
elif [ -z "$interface" ]; then
echo "-i) interface number required."
exit 1
else
init
while true
do
check
done
fi