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:
hier aufschreiben wie die Devices heißen, in meinem Fall sinds:
enp0s25 und enx504eaaa89ec1
Prüfen ob im GnomeNetworkManager schon Profile hinterlegt sind:
Falls ja, die Verbindungen auf Down setzen:
2. Bridge erstellen:
STP auf der Bridge abschalten:
Und der Bridge nun die physischen NICs zuordnen:
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
3. Nun müssen wir noch eins der beiden interface mit Fehlern behaften, nehmen wir das enx504eaaa89ec1:
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:
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
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
sudo nmcli con down "Verbindungsname"
2. Bridge erstellen:
sudo nmcli con add ifname br0 type bridge con-name br0
sudo nmcli con modify br0 bridge.stp no
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%
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
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 425353
Url: https://administrator.de/contentid/425353
Printed on: December 6, 2024 at 16:12 o'clock