netzwerkdude
Goto Top

WAN mit einem Linux PC simulieren (sog. "impairment node" bauen)

Wenn man schnell eine Applikation testen möchte wie Sie sich unter WAN Bedingungen verhält, hilft ein sogenanntes "impairment node" also ein Gerät auf der Strecke die Leitungsqualität beeinflusst, so kann eine Teilstrecke im LAN so schlecht gemacht werden wie eine beliebig schlechte WAN Strecke.
So eins lässt sich schnell mit einem Linux System realisieren - ob nun virtuell oder physisch ist schlussendlich egal, in diesem Beispiel machen wir eine physischen Aufbau:
Netzseite A Switch <> USB NIC - Onboard NIC <> Netzseite B Switch

Was man braucht:
- Ubuntu 1804 (mit Gnome) auf einem PC mit zwei Ethernet Schnittstellen (z.B. Onboard + USB Ethernet Dongle)

Wir bridgen die beiden NICs zusammen, und verbinden Sie so auf Layer2
Dazu bemühen wir uns der Kommandozeilentool des GnomeNetwork Managers (falls ihr das Netzwerk anders managed, Netplan o.ä. dann entsprechend anders gestalten):

1. Überblick verschaffen wie die Netzwerkkarten heißen:
ip link

hier aufschreiben wie die Devices heißen, in meinem Fall sinds:
enp0s25 und enx504eaaa89ec1

Prüfen ob im GnomeNetworkManager schon Profile hinterlegt sind:
nmcli con show
Falls ja, die Verbindungen auf Down setzen:
sudo nmcli con down "Verbindungsname"  

2. Bridge erstellen:
sudo nmcli con add ifname br0 type bridge con-name br0
STP auf der Bridge abschalten:
sudo nmcli con modify br0 bridge.stp no
Und der Bridge nun die physischen NICs zuordnen:
sudo nmcli con add type bridge-slave ifname enp0s25 master br0
sudo nmcli con add type bridge-slave ifname enx504eaaa89ec1 master br0

Wenn "nmcli con show" alles grün anzeigt, sollte es eigentlich i.O. sein.
Ab jetzt ist der PC ein Switch!
(Falls es nicht gleich geht, evtl. noch die Bridge aus/anmachen: mit
 sudo nmcli con down "br0" && sudo nmcli con up "br0"   



3. Nun müssen wir noch eins der beiden interface mit Fehlern behaften, nehmen wir das enx504eaaa89ec1:
 tc qdisc add dev enx504eaaa89ec1 root handle 1: netem delay 50ms 5ms distribution normal loss 1% 
hierbei wird ein delay von 50ms +-5ms mit einer normalverteilung der streuung und ein fester wert von 1% loss simuliert

Man kann das nach seinem gutdünken anpassen, hier die doku zu netem:
https://wiki.linuxfoundation.org/networking/netem
Wenn man die Regel anpasst, muss statt der "add" ein "change" in den Befehl

Will man noch zusätzlich weitere Regeln, so muss man einen Befehl dazuketten, machen wir noch eine Bandbreitenbegrenzung dazu:
 tc qdisc add dev enx504eaaa89ec1 parent 1: handle 2: tbf rate 2mbit burst 64kbit latency 100ms 
Hierbei ist der Wert nach rate interessant (wir setzern es hier auf 2mbit), brust und latency helfen nur der Pipelinesteuerung, mehr dazu im Link unten

mehr dazu in der TBF Manpage:
http://man7.org/linux/man-pages/man8/tc-tbf.8.html
einem Post der das Bucket bei rbf erklärt:
https://unix.stackexchange.com/questions/100785/bucket-size-in-tbf
Und etwas zu Rule Chaining:
https://www.excentis.com/blog/use-linux-traffic-control-impairment-node- ...

Viel Spaß
N-Dude

Content-ID: 425353

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

Printed on: December 6, 2024 at 16:12 o'clock