Janik
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    ``` Verbindungen: 1. Switch Port 3-5: IP: 10.1.1.xxx Netzmaske: 255.255.255.0 Gateway: - 2. Router Port 2-4: IP: 10.1.<port>.xxx Netzmaske: 255.255.255.0 Gateway: 10.1.<port>.254 3. Router Port 5: IP: egal Netzmaske: 255.255.255.0 (evtl egal) Gateway: 10.1.5.254 ``` # Protokoll 2 ## Konfiguration ### IP Adresse finden Nach _Anhang B_ Interface konfigurieren. IP-Adresse des Raspberry Pi via Wireshark ausgelesen: `192.168.137.104` Verbindung via SSH: `$ ssh pi@192.168.137.104` erfolgreich Interface-Name und MAC-Adresse: `$ ifconfig`: ``` eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.137.105 netmask 255.255.255.0 broadcast 192.168.137.255 inet6 fe80::43c2:bf93:b7b3:36ff prefixlen 64 scopeid 0x20<link> ether b8:27:eb:fc:10:f5 txqueuelen 1000 (Ethernet) RX packets 283 bytes 26177 (25.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 298 bytes 30880 (30.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` -> MAC: `b8:27:eb:fc:10:f5` -> Interface: `eth0` ### Statische IP Adresse festlegen `$ micro /etc/dhcpcd.conf` ``` # Example static IP configuration: interface eth0 static ip_address=10.1.1.1/24 #static ip6_address=fd51:42f8:caae:d92e::ff/64 static routers=10.1.1.2 #static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1 ``` reboot mit `$ sudo reboot` ## Temperatursensor Nach Schaltplan angeschlossen und Module geladen. Richtiger Widerstand wurde mit [Digikey](https://www.digikey.de/de/resources/conversion-calculators/conversion-calculator-resistor-color-code) herausgefunden: ![Screenshot from 2024-04-25 14-04-43](https://hackmd.io/_uploads/ryHlvaDZC.png) Schaltung: ![Screenshot from 2024-04-25 14-02-41](https://hackmd.io/_uploads/ryru8pP-A.png) ### Einrichtung W1 Protokoll dtoverlay nach Anleitung in boot config konfiguriert + reboot (muss entgegen der Anleitung mit `sudo` präfix geöffnet werden) Hinzufügen der Module in `$ sudo micro /etc/modules` ``` wire w1-gpio w1-therm ``` ### Identifizieren des Sensors `$ ls /sys/bus/w1/devices` liefert `28-01143c82f2aa w1_bus_master1` -> SensorID: 28-01143c82f2aa Auslesen des Sensors: `$ cat /sys/bus/w1/devices/28-01143c82f2aa/w1_slave` liefert ``` 74 01 4b 46 7f ff 0c 10 55 : crc=55 YES 74 01 4b 46 7f ff 0c 10 55 t=23250 ``` -> Aktuelle Temperatur: 23.25°C # Protokoll 3 Festlegen der lokalen IPs: ``` RaspberryPi: 10.1.1.1 Password: hwp Switch: 10.1.1.100 Password: hwp Moritz: 10.1.1.187 Leon: 10.1.1.120 Julien: 10.1.1.112 Janik: 10.1.1.123 ``` IP Adresse von Notebook geändert zu: `192.168.88.2` und mit ` $ ssh admin@192.168.88.1 ` mit Switch (Port 2) verbunden. In Eingabeaufforderung Passwort zu `hwp` geändert ## Switch Konfiguration ### Switch Name nach Rechersche mit folgendem Befehl zu `Switch-1` geändert. `/system identity set name=Switch-1` Wireshark Log: ![switch_rename](https://hackmd.io/_uploads/HyRomAv-C.png) ### Uhrzeit `/system clock` Anzeige der aktuellen Einstellungen: `print` Editor: `edit` Ändern der Daten mit: `date`, `$ timezone`, `$ time` für die jeweiligen Einstellungen ### Konfigurieren der Bridge #### Neue Bridge erstellen `/interface bridge` `add` erstellt neue Bridge `print` gibt nun die neue Bridge aus, allerdings mit falschem Namen (_bridge1_) Ändern des Namen mit `set name=br1` und Eingabe der Bridge-Nummer `0` ``` [admin@Switch-1] /interface bridge> print Flags: X - disabled, R - running 0 R name="br1" mtu=auto actual-mtu=1500 l2mtu=65535 arp=enabled arp-timeout=auto mac-address=76:4B:F5:1C:86:A1 protocol-mode=rstp fast-forward=yes igmp-snooping=no auto-mac=yes ageing-time=5m priority=0x8000 max-message-age=20s forward-delay=15s transmit-hold-count=6 vlan-filtering=no dhcp-snooping=no ``` #### Ausgabe verfügbarer Interfaces `/interface` `print` gibt aus: ``` Flags: D - dynamic, X - disabled, R - running, S - slave # NAME TYPE ACTUAL-MTU L2MTU MAX-L2MTU MAC-ADDRESS 0 ether1 ether 1500 1598 2028 64:D1:54:9F:6E:38 1 R ether2 ether 1500 1598 2028 64:D1:54:9F:6E:39 2 R ether3 ether 1500 1598 2028 64:D1:54:9F:6E:3A 3 ether4 ether 1500 1598 2028 64:D1:54:9F:6E:3B 4 ether5 ether 1500 1598 2028 64:D1:54:9F:6E:3C 5 R br1 bridge 1500 65535 76:4B:F5:1C:86:A1 ``` #### Hinzufügen der Interfaces zu _br1_: `/interface bridge port` `add bridge=br1 interface=ether<interfaceid>` `print` gibt nun aus: ``` Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload # INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON 0 I H ether1 br1 yes 1 0x80 10 10 none 1 H ether2 br1 yes 1 0x80 10 10 none 2 H ether3 br1 yes 1 0x80 10 10 none 3 I H ether4 br1 yes 1 0x80 10 10 none 4 I H ether5 br1 yes 1 0x80 10 10 none ``` #### IP-Adresse der Bridge ändern `/ip address add address=10.1.1.100/24 interface=br1 network=10.1.1.0` Austesten mit verschiedenen Geräten (an unterschiedlichen Ports) ``` [admin@Switch-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 192.168.88.1/24 192.168.88.0 ether2 1 10.1.1.100/24 10.1.1.0 br1 ``` #### Entfernen des Eintrages von Interface ether2 ``` [admin@Switch-1] /ip address> remove number=0 [admin@Switch-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.100/24 10.1.1.0 br1 ``` #### Verbinden von RaspberryPi mit Switch RaspberryPi kann angepingt werden und Verbindung zu Switch und RaspberryPi mit ssh möglich (ohne Umstecken) ``` $ ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.1: Bytes=32 Zeit=2ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=64 Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 1ms, Maximum = 2ms, Mittelwert = 1ms ``` #### MAC-Adresstabelle der Bridge br1 ``` [admin@Switch-1] /interface bridge> host [admin@Switch-1] /interface bridge host> print Flags: X - disabled, I - invalid, D - dynamic, L - local, E - external # MAC-ADDRESS VID ON-INTERFACE BRIDGE AGE 0 D E 50:3E:AA:D1:5B:60 ether3 br1 1 DL 64:D1:54:9F:6E:38 br1 br1 2 DL 64:D1:54:9F:6E:3A ether3 br1 3 DL 64:D1:54:9F:6E:3B ether4 br1 4 DL 64:D1:54:9F:6E:3C ether5 br1 5 D E 98:FA:9B:65:8A:B4 ether4 br1 6 D E B8:27:EB:FC:10:F5 ether5 br1 ``` - Einträge #2-#4 sind die MAC-Adressen der jeweiligen Ports am Switch. - Eintrag #6 ist die MAC-Adresse des RaspberryPi (siehe Protokoll 2). - Auf #0 und #5 sind zwei weitere Laptops an den Switch angeschlossen. - #1 ist der Eintrag für die Bridge selbst. #### ARP Tabelle Notebook ``` PS C:\Users\julie> arp -a Schnittstelle: 10.1.1.112 --- 0x7 Internetadresse Physische Adresse Typ 10.1.1.1 b8-27-eb-fc-10-f5 dynamisch 10.1.1.100 64-d1-54-9f-6e-38 dynamisch 10.1.1.255 ff-ff-ff-ff-ff-ff statisch 224.0.0.22 01-00-5e-00-00-16 statisch 224.0.0.251 01-00-5e-00-00-fb statisch 224.0.0.252 01-00-5e-00-00-fc statisch 239.255.255.250 01-00-5e-7f-ff-fa statisch Schnittstelle: 10.107.29.152 --- 0xd Internetadresse Physische Adresse Typ ... (WLAN Schnittstelle) ``` #### ARP Tabelle Raspberrypi ``` pi@raspberrypi:~ $ arp -e Address HWtype HWaddress Flags Mask Iface 10.1.1.2 (unvollständig) eth0 10.1.1.123 ether 00:e0:4c:6b:5d:64 C eth0 10.1.1.112 ether 50:3e:aa:d1:5b:60 C eth0 ``` #### Ping Request zu unbelegter Addresse im Subnetz ``` PS C:\Users\julie> ping 10.1.1.45 Ping wird ausgeführt für 10.1.1.45 mit 32 Bytes Daten: Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Ping-Statistik für 10.1.1.45: Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust), ``` Wireshark Protokoll: `122 88.715907 TpLinkTechno_d1:5b:60 Broadcast ARP 42 Who has 10.1.1.87? Tell 10.1.1.112` (tritt mehrfach auf) Ping an Facebook.com: ![Screenshot from 2024-05-08 13-28-04](https://hackmd.io/_uploads/BJeDG1FzC.png) # Protokoll 4 ## Einrichtung des TCP-Servers Einrichtung des TCP-Servers wie in der Aufgabenstellung angegeben. (tcp_server.py) Testen des TCP-Servers mit netcat: ``` pi@raspberrypi:~ $ netcat 10.1.1.112 56565 hallo ``` Antwort: ``` C:\Uni\HWP-Python\.venv\Scripts\python.exe C:\Uni\HWP\gruppe-01\section4\tcp_server.py Connected by <socket.socket fd=460, family=2, type=1, proto=0, laddr=('0.0.0.0', 56565)> <socket.socket fd=432, family=2, type=1, proto=0, laddr=('10.1.1.112', 56565), raddr=('10.1.1.1', 53884)> received data: b'hallo\n ``` WireShark-Mitschnitt: ![section4_1](https://hackmd.io/_uploads/BJUxn1Kf0.png) ## Anpassung des Skripts Anpassung des TCP-Serverskriptes, um alle Antworten (übertragene Temperaturwerte) in einer .csv-Datei abzuspeichern: ```python= with open(f"{datetime.now().date().strftime("%Y%m%d")}.csv", "a") as f: f.writelines(str(int(datetime.now().timestamp())) + "," + data.decode("utf-8")) ``` ## Einrichtung des TCP-Client (RaspberryPi) Einrichtung und Anpassung des TCP-Client wie in der Aufgabenstellung angegeben. (tcp_client.py) ### Senden der Daten ```python= try: while True: time.sleep(5) temp = str(read_sensor()) print(f"Send Temp: {temp}") s.send(bytes(temp, 'utf-8')) finally: s.close() ``` ### Auslesen des Sensors ```python= def read_sensor(): sensors = list([x.joinpath('w1_slave') for x in Path('/sys/bus/w1/devices').glob('28*')]) temp = 0.0 if not sensors: print('No sensors found!') return temp with open(sensors[0], 'r') as fp: data = fp.readlines()[1] # read second line i = (len(data) - data.find('t=') - 2) * -1 temp = round(int(data[i:].replace('\n', '')) / 1000, 2) return temp ``` ### TCP Client Skript auf Raspberry speichern Skript (tcp_client.py) wird auf RaspberryPi unter `~/tcp_client.py` gespeichert Zum Ausführen: ``` python3 tcp_client.py ``` ### Probleme bei der Ausführung - TCP-Server muss zuerst gestartet werden - Encoding-Error bei gesendeten Bytes in tcp_client.py ('utf-8' erforderlich; im Code oben bereits richtig angepasst): ``` C:\Uni\HWP-Python\.venv\Scripts\python.exe C:\Uni\HWP\gruppe-01\section4\tcp_client.py Traceback (most recent call last): File "C:\Uni\HWP\gruppe-01\section4\tcp_client.py", line 22, in <module> s.connect((TCP_IP, TCP_PORT)) ConnectionRefusedError: [WinError 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte Process finished with exit code 1 ``` ### Präsentation im Browser #### Verwendung von plotly zur Darstellung Für Darstellung mit plotly wird temp_http.py erstellt. In der tcp_server.py muss die Erstellung der .csv-Dateien so geändert werden, dass immer header (timestamp, temp) eingefügt werden, um die Werte in plotly leichter verwenden zu können. - Dropdownmenü zur Auswahl der jeweiligen .csv-datei - temp_http.py so angepasst, dass Plot alle 5 Sekunden im Browser aktualisiert wird ![section4_2](https://hackmd.io/_uploads/HyLnNZKGR.png) #### Beobachtungen mit WireShark ![WireShark_Dash](https://hackmd.io/_uploads/SJA52-tGA.png) - TCP-Handshakes: Ja man erkennt den Handshake an den [ACK], [SYN] und [SYN,ACK] Paketen. - Source-Port: 62629 und 8050 - Destination-Port: 62629 und 8050 Das ausgewählte Dropdown Menü wird über das HTTP Protokoll übermittelt. ![Http_Dropdown](https://hackmd.io/_uploads/r1tKlztfA.png) Gesamter Wireshark Verlauf Dropdown Change: ![wireshark_dropdown](https://hackmd.io/_uploads/Sk4Y-zKzC.png) # Protokoll 5 ## 5.2. Router-Einrichtung ### Grundkonfiguration Direkte Verbidung mit Router über Port 2, setzen des Passwortes auf "hwp" für user "admin": ```shell! PS C:\Users\User> ssh admin@192.168.88.1 The authenticity of host '192.168.88.1 (192.168.88.1)' can't be established. RSA key fingerprint is SHA256:IVjD9sbqUzWRJj2V0/UsCOsWUXQUgOOVsRjzczO8yZU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.88.1' (RSA) to the list of known hosts. MMM MMM KKK TTTTTTTTTTT KKK MMMM MMMM KKK TTTTTTTTTTT KKK MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK MikroTik RouterOS 6.49.8 (c) 1999-2023 http://www.mikrotik.com/ [?] Gives the list of available commands command [?] Gives help on the command and list of arguments [Tab] Completes the command/word. If the input is ambiguous, a second [Tab] gives possible options / Move up to base level .. Move up one level /command Use command at the base level Change your password new password> *** # hwp repeat new password> *** Password changed ``` Fehlerbehebung durch Löschen des Eintrags in der `known-hosts`-Datei: ```shell! PS C:\Users\User> ssh admin@192.168.88.1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:IVjD9sbqUzWRJj2V0/UsCOsWUXQUgOOVsRjzczO8yZU. Please contact your system administrator. Add correct host key in C:\\Users\\User/.ssh/known_hosts to get rid of this message. Offending RSA key in C:\\Users\\User/.ssh/known_hosts:4 Host key for 192.168.88.1 has changed and you have requested strict checking. Host key verification failed. ``` ### Routername ```shell [admin@MikroTik] > system identity set name="Router-1" ``` ### Datum und Uhrzeit ```shell [admin@Router-1] /system clock> set time="13:17:30" ``` ### Subnetzmaskenzuweisung für Ports #1-#5 des Routers Subnetzmaske "/24" muss immer bei Adresse mit angegeben werden. Mittels `ip address` lassen sich die Ports konfigurieren: ```shell= [admin@Router-1] /ip address> add address: 10.1.1.254 interface: ether1 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 192.168.88.1/24 192.168.88.0 ether2 1 10.1.1.254/32 10.1.1.254 ether1 [admin@Router-1] /ip address> remove numbers: 1 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 192.168.88.1/24 192.168.88.0 ether2 [admin@Router-1] /ip address> add address: 10.1.1.254/24 interface: ether1 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 192.168.88.1/24 192.168.88.0 ether2 1 10.1.1.254/24 10.1.1.0 ether1 [admin@Router-1] /ip address> add address: 10.1.3.254/24 interface: ether3 [admin@Router-1] /ip address> add address: 10.1.4.254/24 interface: ether4 [admin@Router-1] /ip address> add address: 10.1.5.254/24 interface: ether5 [admin@Router-1] /ip address> add address: 10.1.2.254/24 interface: ether2 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 192.168.88.1/24 192.168.88.0 ether2 1 10.1.1.254/24 10.1.1.0 ether1 2 10.1.3.254/24 10.1.3.0 ether3 3 10.1.4.254/24 10.1.4.0 ether4 4 10.1.5.254/24 10.1.5.0 ether5 5 10.1.2.254/24 10.1.2.0 ether2 [admin@Router-1] /ip address> ``` ### Fehler bei Verbinden mit Router Lokale IP-Adresse muss an Subnetz angpasst sein, also z.B., wenn Laptop an Port 3 des Routers angeschlossen ist, muss lokale IP-Adresse `10.1.3.XXX` entsprechen. Gateway am Laptop muss zu Port des Routers passen, also z.B., wenn Laptop an Port 3 des Routers, dann muss lokales Gateway z.B. `10.1.3.254`. ### Standard-Gateway des RaspberryPi In `/etc/dhcpcd.conf` wird static `routers=10.1.1.254` geändert. Reboot zum übernehmen. ### Fehler bei Verbinden mit RaspberryPi Verbindung mit RaspberryPi ist nicht mehr möglich, wenn Laptop an Router angeschlossen ist. Lösung: WLan ausschalten, da ansonsten Standard-Gateway von WLan verwendet wird. ### Löschen des alten ether2 ```shell [admin@Router-1] /ip address> remove 0 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.254/24 10.1.1.0 ether1 1 10.1.3.254/24 10.1.3.0 ether3 2 10.1.4.254/24 10.1.4.0 ether4 3 10.1.5.254/24 10.1.5.0 ether5 4 10.1.2.254/24 10.1.2.0 ether2 [admin@Router-1] /ip address> ``` ### Ping an RaspberryPi ```shell janik@osiris:~$ ping 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=63 time=0.782 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=63 time=1.42 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=63 time=0.699 ms 64 bytes from 10.1.1.1: icmp_seq=4 ttl=63 time=0.697 ms 64 bytes from 10.1.1.1: icmp_seq=5 ttl=63 time=0.730 ms 64 bytes from 10.1.1.1: icmp_seq=6 ttl=63 time=0.725 ms 64 bytes from 10.1.1.1: icmp_seq=7 ttl=63 time=0.743 ms 64 bytes from 10.1.1.1: icmp_seq=8 ttl=63 time=0.712 ms 64 bytes from 10.1.1.1: icmp_seq=9 ttl=63 time=0.687 ms ^C --- 10.1.1.1 ping statistics --- 9 packets transmitted, 9 received, 0% packet loss, time 8219ms rtt min/avg/max/mdev = 0.687/0.799/1.422/0.221 ms ``` $\Rightarrow$ Ping war erfolgreich! ### Anlegen der statischen Route Um nicht immer die Verbindung zu anderen Netzwerken trennen zu müssen, um z.B. den RaspberryPi anzupingen, werden statische Routen im eigenen Gerät angelegt. (z.B.: Laptop an Port 2 des Routers $\rightarrow$ Gateway `10.1.2.254`) Unter Windows: ```shell PS C:\Users\User> route ADD 10.1.0.0 MASK 255.255.0.0 10.1.2.254 OK! PS C:\Users\User> ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit<1ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 0ms, Maximum = 1ms, Mittelwert = 0ms ``` Unter Linux: ```shell janik@osiris:~$ sudo ip route add 10.1.0.0/16 via 10.1.3.254 proto static metric 100 janik@osiris:~$ ping 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=63 time=87.5 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=63 time=0.681 ms ^C --- 10.1.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.681/44.086/87.491/43.405 ms ``` ## 5.3. NAT-Konfiguration ### Port #5 - öffentliches Netz Port #5 des Routers wird mit folgendem Befehl als öffentlicher Port eingerichtet: ```shell [admin@Router-1] /ip firewall nat> add chain="srcnat" src-address="10.1.1.0/24" action=src-nat to-address="10.1.5.254/24 " out-interface=ether5 ``` ### Firewall-Filter Anmerkung: `chain` ist vordefiniert. Ermöglicht Hinzufügen von Regeln. #### Hinzufügen der Filter Regeln ```shell [admin@Router-1] /ip firewall filter> add chain=forward action=drop src-address=10.1.5.0/24 connection-state=new connection-nat-state=!dstnat ``` #### Ausgabe - Regel ```shell [admin@Router-1] /ip firewall filter> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=forward action=drop connection-state=new connection-nat-state=!dstnat src-address=10.1.5.0/24 ``` $\Rightarrow$ Versuch über Port #5 zu pingen schlägt nun fehl: ```shell PS C:\Users\julie> ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Zeitüberschreitung der Anforderung. Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust) ``` #### Hinzufügen der Nat Konfiguration Folgende Regeln werden hinzugefügt: ```shell [admin@Router-1] /ip firewall nat> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=srcnat action=src-nat to-addresses=10.1.5.254 src-address=10.1.1.0/24 out-interface=ether5 1 chain=srcnat action=src-nat to-addresses=10.1.5.254 src-address=10.1.2.0/24 out-interface=ether5 2 chain=srcnat action=src-nat to-addresses=10.1.5.254 src-address=10.1.3.0/24 out-interface=ether5 3 chain=srcnat action=src-nat to-addresses=10.1.5.254 src-address=10.1.4.0/24 out-interface=ether5 4 chain=dstnat action=dst-nat to-addresses=10.1.1.1 to-ports=22 protocol=tcp dst-address=10.1.5.254 in-interface=ether5 dst-port=10022 ``` #### Zugriff auf Pi über SSH Der Zugriff mit SSH über den Port 5 erfolgt nun folgendermaßen: ```shell PS C:\Users\julie> ssh pi@10.1.5.254 -p 10022 pi@10.1.5.254's password: Last login: Thu Apr 25 23:37:13 2024 from 10.1.5.112 pi@raspberrypi:~ $ ``` ### Ausgabe der Routen im Router ```shell [admin@Router-1] > /ip route print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.1.1.0/24 10.1.1.254 ether1 0 1 ADC 10.1.2.0/24 10.1.2.254 ether2 0 2 DC 10.1.3.0/24 10.1.3.254 ether3 255 3 DC 10.1.4.0/24 10.1.4.254 ether4 255 4 ADC 10.1.5.0/24 10.1.5.254 ether5 0 ``` ## 5.4 Entfernte Subnetze und Routingprotokolle ### 5.4.1 Neuer Versuchsaufbau #### Switch konfigurieren Löschen von `ether1` aus `br1` ```shell [admin@Switch-1] /interface bridge port> print Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload # INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON 0 I H ether1 br1 yes 1 0x80 10 10 none 1 H ether2 br1 yes 1 0x80 10 10 none 2 H ether3 br1 yes 1 0x80 10 10 none 3 I H ether4 br1 yes 1 0x80 10 10 none 4 I H ether5 br1 yes 1 0x80 10 10 none [admin@Switch-1] /interface bridge port> remove numbers: 0 [admin@Switch-1] /interface bridge port> print Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload # INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON 0 H ether2 br1 yes 1 0x80 10 10 none 1 H ether3 br1 yes 1 0x80 10 10 none 2 I H ether4 br1 yes 1 0x80 10 10 none 3 I H ether5 ``` Hinzufügen der Adresskonfiguration: ```shell [admin@Switch-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.100/24 10.1.1.0 br1 [admin@Switch-1] /ip address> add address: 10.0.0.2/30 interface: ether1 [admin@Switch-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.100/24 10.1.1.0 br1 1 10.0.0.2/30 10.0.0.0 ether1 ``` #### Router konfigurieren Ändern der IP Adresse von `ether1` ```shell [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.254/24 10.1.1.0 ether1 1 10.1.3.254/24 10.1.3.0 ether3 2 10.1.4.254/24 10.1.4.0 ether4 3 10.1.5.254/24 10.1.5.0 ether5 4 10.1.2.254/24 10.1.2.0 ether2 [admin@Router-1] /ip address> add address: 10.0.0.1/30 interface: ether1 [admin@Router-1] /ip address> print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.1.254/24 10.1.1.0 ether1 1 10.1.3.254/24 10.1.3.0 ether3 2 10.1.4.254/24 10.1.4.0 ether4 3 10.1.5.254/24 10.1.5.0 ether5 4 10.1.2.254/24 10.1.2.0 ether2 5 10.0.0.1/30 10.0.0.0 ether1 ``` Löschen der alten IP Adresse von `ether1` ```shell [admin@Router-1] /ip address> remove numbers: 0 [admin@Router-1] > ip address print Flags: X - disabled, I - invalid, D - dynamic # ADDRESS NETWORK INTERFACE 0 10.1.3.254/24 10.1.3.0 ether3 1 10.1.4.254/24 10.1.4.0 ether4 2 10.1.5.254/24 10.1.5.0 ether5 3 10.1.2.254/24 10.1.2.0 ether2 4 10.0.0.1/30 10.0.0.0 ether1 ``` #### Ping Switch und Rasp von Router ```shell [admin@Router-1] > ping 10.0.0.2 SEQ HOST SIZE TTL TIME STATUS 0 10.0.0.2 56 64 0ms 1 10.0.0.2 56 64 0ms 2 10.0.0.2 56 64 0ms 3 10.0.0.2 56 64 0ms sent=4 received=4 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=0ms [admin@Router-1] > ping 10.1.1.1 SEQ HOST SIZE TTL TIME STATUS 0 no route to host 1 no route to host 2 no route to host 3 no route to host ``` ### 5.4.2 Statische Routen #### Hinzufügen der statischen Route am Router ```shell! [admin@Router-1] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 DC 10.1.2.0/24 10.1.2.254 ether2 255 2 ADC 10.1.3.0/24 10.1.3.254 ether3 0 3 DC 10.1.4.0/24 10.1.4.254 ether4 255 4 ADC 10.1.5.0/24 10.1.5.254 ether5 0 [admin@Router-1] /ip route> add gateway=10.0.0.2 dst-address=10.1.1.0/24 [admin@Router-1] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 A S 10.1.1.0/24 10.0.0.2 1 2 DC 10.1.2.0/24 10.1.2.254 ether2 255 3 ADC 10.1.3.0/24 10.1.3.254 ether3 0 4 DC 10.1.4.0/24 10.1.4.254 ether4 255 5 ADC 10.1.5.0/24 10.1.5.254 ether5 0 ``` Die neue Route hat nun den `s` Flag, der eine statische Route definiert. #### Hinzufügen der statischen Routen am Switch ```shell [admin@Switch-1] /ip route> add gateway=10.0.0.1 dst-address=10.1.2.0/24 [admin@Switch-1] /ip route> add gateway=10.0.0.1 dst-address=10.1.3.0/24 [admin@Switch-1] /ip route> add gateway=10.0.0.1 dst-address=10.1.4.0/24 [admin@Switch-1] /ip route> add gateway=10.0.0.1 dst-address=10.1.5.0/24 ``` #### Problem Timeout bei Ping von Router nach Raspberry Pi ```shell! [admin@Router-1] > ping 10.1.1.1 SEQ HOST SIZE TTL TIME STATUS 0 10.1.1.1 timeout 1 10.1.1.1 timeout 2 10.1.1.1 timeout 3 10.1.1.1 timeout 4 10.1.1.1 timeout 5 10.1.1.1 timeout 6 10.1.1.1 timeout sent=7 received=0 packet-loss=100% ``` Lösung: Gateway am Raspberry Pi falsch konfiguriert. in `/etc/dhcpcd.conf` ```shell static routers=10.1.1.254 zu static routers=10.1.1.100 ``` #### Abschließend ping testen ```shell [admin@Router-1] > ping 10.1.1.1 SEQ HOST SIZE TTL TIME STATUS 0 10.1.1.1 56 63 0ms 1 10.1.1.1 56 63 0ms 2 10.1.1.1 56 63 0ms 3 10.1.1.1 56 63 0ms sent=4 received=4 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=0ms ``` ### RIP #### Löschen der zuvor erstellten statischen Routen ##### Im Switch alle mit Flag 'S' ```shell [admin@Switch-1] /ip route> remove 2 [admin@Switch-1] /ip route> remove 3 [admin@Switch-1] /ip route> remove 4 [admin@Switch-1] /ip route> remove 5 [admin@Switch-1] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.2 ether1 0 1 ADC 10.1.1.0/24 10.1.1.100 br1 0 ``` ##### Im Router alle mit Flag 'S' ```shell [admin@Router-1] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 A S 10.1.1.0/24 10.0.0.2 1 2 DC 10.1.2.0/24 10.1.2.254 ether2 255 3 ADC 10.1.3.0/24 10.1.3.254 ether3 0 4 ADC 10.1.4.0/24 10.1.4.254 ether4 0 5 DC 10.1.5.0/24 10.1.5.254 ether5 255 [admin@Router-1] /ip route> remove 1 [admin@Router-1] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 DC 10.1.2.0/24 10.1.2.254 ether2 255 2 ADC 10.1.3.0/24 10.1.3.254 ether3 0 3 ADC 10.1.4.0/24 10.1.4.254 ether4 0 4 DC 10.1.5.0/24 10.1.5.254 ether5 255 [admin@Router-1] /ip route> ``` ##### Ping Pi von Router ```shell! [admin@Router-1] > ping 10.1.1.1 SEQ HOST SIZE TTL TIME STATUS 0 no route to host 1 no route to host 2 no route to host 3 no route to host 4 no route to host 5 no route to host sent=6 received=0 packet-loss=100% ``` #### Hinzufügen der Netzwerke am Router in RIP ```shell! [admin@Router-1] /routing rip network> add network=10.0.0.0/30 [admin@Router-1] /routing rip network> print Flags: X - disabled # NETWORK 0 10.0.0.0/30 [admin@Router-1] /routing rip network> add network=10.1.2.0/24 [admin@Router-1] /routing rip network> add network=10.1.3.0/24 [admin@Router-1] /routing rip network> add network=10.1.4.0/24 [admin@Router-1] /routing rip network> add network=10.1.5.0/24 [admin@Router-1] /routing rip network> print Flags: X - disabled # NETWORK 0 10.0.0.0/30 1 10.1.2.0/24 2 10.1.3.0/24 3 10.1.4.0/24 4 10.1.5.0/24 [admin@Router-1] > /routing rip route print Flags: C - connect, S - static, R - rip, O - ospf, B - bgp # DST-ADDRESS GATEWAY FROM METRIC TIMEOUT 0 R 10.0.0.0/30 1 1 R 10.1.1.0/24 10.0.0.2 2 2m53s 2 R 10.1.3.0/24 1 3 R 10.1.4.0/24 1 [admin@Router-1] > /ip route print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 ADr 10.1.1.0/24 10.0.0.2 120 2 DC 10.1.2.0/24 10.1.2.254 ether2 255 3 ADC 10.1.3.0/24 10.1.3.254 ether3 0 4 ADC 10.1.4.0/24 10.1.4.254 ether4 0 5 DC 10.1.5.0/24 10.1.5.254 ether5 255 ``` #### Hinzufügen der Netzwerke am Switch in RIP ```shell [admin@Switch-1] /routing rip network> add network=10.0.0.0/30 [admin@Switch-1] /routing rip network> add network=10.1.1.0/24 [admin@Switch-1] /routing rip network> print Flags: X - disabled # NETWORK 0 10.0.0.0/30 1 10.1.1.0/24 [admin@Switch-1] /routing rip route print> Flags: C - connect, S - static, R - rip, O - ospf, B - bgp # DST-ADDRESS GATEWAY FROM METRIC TIMEOUT 0 R 10.0.0.0/30 1 1 R 10.1.1.0/24 1 2 R 10.1.3.0/24 10.0.0.1 2 2m36s 3 R 10.1.4.0/24 10.0.0.1 2 2m36s [admin@Switch-1] > /ip route print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.2 ether1 0 1 ADC 10.1.1.0/24 10.1.1.100 br1 0 2 ADr 10.1.3.0/24 10.0.0.1 120 3 ADr 10.1.4.0/24 10.0.0.1 120 ``` #### Ping von Laptop zu Raspi geht wieder (Laptop am Router) ```shell! PS C:\Users\User> ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=62 Antwort von 10.1.1.1: Bytes=32 Zeit<1ms TTL=62 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=62 Antwort von 10.1.1.1: Bytes=32 Zeit<1ms TTL=62 Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 0ms, Maximum = 1ms, Mittelwert = 0ms ``` #### Kurze Zwischenfragen Achten Sie bei den Routing-Listen auf die Details: Welche Routen sind in der Liste enthalten? Es sind alle Routen enthalten, deren Ports aktiv verwendet werden. Welche fehlen? Alle Routen deren Ports nicht verwendet werden. In unserem Fall aktuell Port 2 und 5. Was bedeuten die Flags in den Listen? Die Flags werden beim Print erklärt. A: active; C: connect; etc. Was bedeuten die Spalten METRIC und DISTANCE? Metric: Er bezeichnet die Anzahl der Router, die entlang eines Pfades bis zum Zielnetz durchlaufen werden müssen. Distance: Distance beschreibt die Distanz. Bei 255 wird der Port nicht verwendet, bei 0 ist es der eigene Port. 120 ist die Standarddistanz. ### OSPF #### Entfernen der Netzwerke aus RIP Tabelle des Routers ```shell [admin@Router-1] > /routing rip network remove 0 [admin@Router-1] > /routing rip route print Flags: C - connect, S - static, R - rip, O - ospf, B - bgp # DST-ADDRESS GATEWAY FROM METRIC TIMEOUT [admin@Router-1] > /routing rip network print Flags: X - disabled # NETWORK ``` #### Entfernen der Netzwerke aus RIP Tabelle des Switches ```shell [admin@Switch-1] > /routing rip network remove 0 [admin@Switch-1] /routing rip route> print Flags: C - connect, S - static, R - rip, O - ospf, B - bgp # DST-ADDRESS GATEWAY FROM METRIC TIMEOUT [admin@Switch-1] /routing rip network> print Flags: X - disabled # NETWORK ``` #### Prüfung ob Router Standard OSPF Instance/Area verfügbar ```shell [admin@Router-1] /routing ospf instance> print Flags: X - disabled, * - default 0 * name="default" router-id=0.0.0.0 distribute-default=never redistribute-connected=no redistribute-static=no redistribute-rip=no redistribute-bgp=no redistribute-other-ospf=no metric-default=1 metric-connected=20 metric-static=20 metric-rip=20 metric-bgp=auto metric-other-ospf=auto in-filter=ospf-in out-filter=ospf-out [admin@Router-1] /routing ospf area> print Flags: X - disabled, I - invalid, * - default # NAME AREA-ID TYPE DEFAULT-COST 0 * backbone 0.0.0.0 default ``` #### Prüfung ob Switch Standard OSPF Instance/Area verfügbar ```shell [admin@Switch-1] /routing ospf instance> print Flags: X - disabled, * - default 0 * name="default" router-id=0.0.0.0 distribute-default=never redistribute-connected=no redistribute-static=no redistribute-rip=no redistribute-bgp=no redistribute-other-ospf=no metric-default=1 metric-connected=20 metric-static=20 metric-rip=20 metric-bgp=auto metric-other-ospf=auto in-filter=ospf-in out-filter=ospf-out [admin@Switch-1] /routing ospf area> print Flags: X - disabled, I - invalid, * - default # NAME AREA-ID TYPE DEFAULT-COST 0 * backbone 0.0.0.0 default ``` #### Hinzufügen von OSPF Network beim Router ```shell [admin@Router-1] /routing ospf network> add network=10.0.0.0/30 area=backbone [admin@Router-1] /routing ospf network> print Flags: X - disabled, I - invalid # NETWORK AREA 0 10.0.0.0/30 backbone [admin@Router-1] /routing ospf network> add network=10.1.2.0/24 area=backbone [admin@Router-1] /routing ospf network> add network=10.1.3.0/24 area=backbone [admin@Router-1] /routing ospf network> add network=10.1.4.0/24 area=backbone [admin@Router-1] /routing ospf network> add network=10.1.5.0/24 area=backbone [admin@Router-1] /routing ospf network> print Flags: X - disabled, I - invalid # NETWORK AREA 0 10.0.0.0/30 backbone 1 10.1.2.0/24 backbone 2 10.1.3.0/24 backbone 3 10.1.4.0/24 backbone 4 10.1.5.0/24 backbone [admin@Router-1] /routing ospf network> /ip route print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.1 ether1 0 1 ADo 10.1.1.0/24 10.0.0.2 110 2 DC 10.1.2.0/24 10.1.2.254 ether2 255 3 ADC 10.1.3.0/24 10.1.3.254 ether3 0 4 ADC 10.1.4.0/24 10.1.4.254 ether4 0 5 DC 10.1.5.0/24 10.1.5.254 ether5 255 ``` #### Hinzufügen von OSPF Network beim Switch ```shell [admin@Switch-1] /routing ospf network> add network=10.0.0.0/30 area: backbone [admin@Switch-1] /routing ospf network> add network=10.1.1.0/24 area: backbone [admin@Switch-1] /routing ospf network> print Flags: X - disabled, I - invalid # NETWORK AREA 0 10.0.0.0/30 backbone 1 10.1.1.0/24 backbone [admin@Switch-1] /routing ospf network> /ip route print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADC 10.0.0.0/30 10.0.0.2 ether1 0 1 ADC 10.1.1.0/24 10.1.1.100 br1 0 2 ADo 10.1.3.0/24 10.0.0.1 110 3 ADo 10.1.4.0/24 10.0.0.1 110 ``` ### Export Router ```shell! [admin@Router-1] > export # may/15/2024 14:26:38 by RouterOS 6.49.8 # software id = PUSP-SIE8 # # model = RouterBOARD 750 r2 # serial number = 67D207F8A4C9 /interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik /ip address add address=10.1.3.254/24 interface=ether3 network=10.1.3.0 add address=10.1.4.254/24 interface=ether4 network=10.1.4.0 add address=10.1.5.254/24 interface=ether5 network=10.1.5.0 add address=10.1.2.254/24 interface=ether2 network=10.1.2.0 add address=10.0.0.1/30 interface=ether1 network=10.0.0.0 /ip firewall filter add action=drop chain=forward connection-nat-state=!dstnat connection-state=new src-address=10.1.5.0/24 /ip firewall nat add action=src-nat chain=srcnat out-interface=ether5 src-address=10.1.1.0/24 to-addresses=10.1.5.254 add action=src-nat chain=srcnat out-interface=ether5 src-address=10.1.2.0/24 to-addresses=10.1.5.254 add action=src-nat chain=srcnat out-interface=ether5 src-address=10.1.3.0/24 to-addresses=10.1.5.254 add action=src-nat chain=srcnat out-interface=ether5 src-address=10.1.4.0/24 to-addresses=10.1.5.254 add action=dst-nat chain=dstnat dst-address=10.1.5.254 dst-port=10022 in-interface=ether5 protocol=tcp to-addresses=\ 10.1.1.1 to-ports=22 /routing ospf network add area=backbone network=10.0.0.0/30 add area=backbone network=10.1.2.0/24 add area=backbone network=10.1.3.0/24 add area=backbone network=10.1.4.0/24 add area=backbone network=10.1.5.0/24 /system identity set name=Router-1 [admin@Router-1] > ``` ### Export Switch ```shell /interface bridge add name=br1 /interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik /interface bridge port add bridge=br1 interface=ether2 add bridge=br1 interface=ether3 add bridge=br1 interface=ether4 add bridge=br1 interface=ether5 /ip address add address=10.1.1.100/24 interface=br1 network=10.1.1.0 add address=10.0.0.2/30 interface=ether1 network=10.0.0.0 /routing ospf network add area=backbone network=10.0.0.0/30 add area=backbone network=10.1.1.0/24 /system clock set time-zone-name=Europe/Berlin /system identity set name=Switch-1 ``` Beim Übergang auf Section 6 wurden alle dynamisches Routing auf statische geändert. # Protokoll 6 ## 6.2 Aufnahme von Audiosignalen ### ID's ```shell pi@raspberrypi:~ $ arecord --list-devices **** List of CAPTURE Hardware Devices **** card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 ``` $\Rightarrow$ **Geräte-ID: 0, Karten-ID: 1** ### Test Aufnahme ```shell pi@raspberrypi:~ $ arecord --file-type wav --format cd --device hw:1,0 --channels 1 --duration 5 test.wav Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono ``` ### Veränderung der Standart-Werte Erhöhung der Sample-Rate um 50 Hz (44150), da dieser Wert nicht erlaubt ist, wird automatisch auf 48000 Hz gesetzt. ```shell pi@raspberrypi:~ $ arecord -t wav -f S16_LE -r 44150 -V mono -D hw:1,0 -c 1 -d 5 test5.wav ``` #### Zwischenfragen Welche Abtastrate würden Sie hierzu verwenden? 44,1 kHz. Mit welcher Rate werden bspw. Audio-CDs kodiert? 44,1 kHz. Was würde Ihrer Meinung nach für alleinige Sprache ausreichen? 4 kHz, da die Menschliche Sprache einen Frequenzbereich von bis zu 2 kHz hat und mit der doppelten Frequenz das ursprüngliche Signal vollständig rekonstruiert werden kann. #### Unterschiedliche Sample-Raten Anpassung der Raten (z.B. auf 6000Hz) ```shell pi@raspberrypi:~ $ sox test4.wav -r 6000 -c 1 -b 16 test4_6000.wav ``` Beobachtung: Ab ~6000Hz kaum mehr merkbarer Unterschied zu 44,1kHz ## 6.3 Einlesen von Audiodateien in Python Siehe Code in Gitlab. Verstärkte Audiodatei anhören: Die Datei ist besser verständlich, wenn die Datei sonst zu leise ist. Sehr laute Bereiche, die noch zustätzlich verstärkt werden, sind allerdings übersteuert und somit teils nicht mehr verständlich. ## 6.4 Fouriertranformation & Bandpass ### Informationen der Diagramme Man kann ablesen wie häufig eine Frequenz aufgetreten ist. x-Achse: Frequenz [Hz] y-Achse: Häufigkeit (Code siehe GitLab) Betrachtet man die Darstellung unterschiedlicher Töne (z.B. von Mann und Frau), lässt sich feststellen, dass bei Männern häufiger tiefe Frequenzen auftreten. Bei Frauen hingegen sind häufiger höhere Frequenzen beobachtbar. Um die Daten im Frequenzbereich zu bearbeiten, um z.B. Stimmen klarer zu machen, kann ein Bandpassfilter (nur Frequenzen in einem bestimmten Bereich werden erhalten) verwenden. ### Bandpassfilter Für den Bandpassfilter werden nur Frequenzen im Bereich 250-2500Hz (Frequenzen für menschliche Sprache) zugelassen. Plots sind im GitLab: - orig.png: Plot der Audiofile im Zeitbereich - orig_fourier.png: Plot der Audiofile im Frequenzbereich - filtered_fourier.png: Audiofile mit Bandpassfilter im Frequenzbereich - filtered.png: Audiofile mit Bandpassfilter im Zeitbereich - filtered.wav: Bearbeitete Soundfile (mit Bandpassfilter) # Protokoll 7 ## 7.3 Messung und Identifikation der Latenzprofile ### Ping verbindung vom PC zum PI ohne NetEm ```shell PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=61 time=3.21 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=61 time=2.08 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=61 time=1.72 ms 64 bytes from 10.1.1.1: icmp_seq=4 ttl=61 time=1.65 ms 64 bytes from 10.1.1.1: icmp_seq=5 ttl=61 time=2.32 ms 64 bytes from 10.1.1.1: icmp_seq=6 ttl=61 time=1.91 ms --- 10.1.1.1 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5026ms rtt min/avg/max/mdev = 1.653/2.148/3.205/0.521 ms` ```` ### Ping Verbindung vom PC zum Pi mit NetEm ```shell PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=61 time=38.4 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=61 time=49.1 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=61 time=53.8 ms 64 bytes from 10.1.1.1: icmp_seq=4 ttl=61 time=42.0 ms 64 bytes from 10.1.1.1: icmp_seq=5 ttl=61 time=51.0 ms --- 10.1.1.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4045ms rtt min/avg/max/mdev = 38.407/46.867/53.763/5.753 ms ``` -> Wie man oben sieht hat sich die Latenz deutlich verstärkt und schwankt sehr viel ### Wie viele Profile hat das NetEm ```shell // 1. Profile 64 bytes from 10.1.1.1: icmp_seq=2 ttl=61 time=48.0 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=61 time=54.6 ms 64 bytes from 10.1.1.1: icmp_seq=4 ttl=61 time=54.9 ms 64 bytes from 10.1.1.1: icmp_seq=5 ttl=61 time=50.2 ms 64 bytes from 10.1.1.1: icmp_seq=6 ttl=61 time=71.1 ms 64 bytes from 10.1.1.1: icmp_seq=7 ttl=61 time=54.2 ms 64 bytes from 10.1.1.1: icmp_seq=8 ttl=61 time=50.0 ms 64 bytes from 10.1.1.1: icmp_seq=9 ttl=61 time=69.6 ms 64 bytes from 10.1.1.1: icmp_seq=10 ttl=61 time=49.9 ms 64 bytes from 10.1.1.1: icmp_seq=11 ttl=61 time=52.4 ms 64 bytes from 10.1.1.1: icmp_seq=12 ttl=61 time=73.3 ms 64 bytes from 10.1.1.1: icmp_seq=13 ttl=61 time=72.3 ms 64 bytes from 10.1.1.1: icmp_seq=14 ttl=61 time=55.3 ms 64 bytes from 10.1.1.1: icmp_seq=15 ttl=61 time=60.5 ms 64 bytes from 10.1.1.1: icmp_seq=16 ttl=61 time=44.9 ms 64 bytes from 10.1.1.1: icmp_seq=17 ttl=61 time=47.4 ms 64 bytes from 10.1.1.1: icmp_seq=18 ttl=61 time=56.7 ms 64 bytes from 10.1.1.1: icmp_seq=19 ttl=61 time=63.0 ms 64 bytes from 10.1.1.1: icmp_seq=20 ttl=61 time=41.6 ms 64 bytes from 10.1.1.1: icmp_seq=21 ttl=61 time=57.3 ms 64 bytes from 10.1.1.1: icmp_seq=22 ttl=61 time=42.0 ms 64 bytes from 10.1.1.1: icmp_seq=23 ttl=61 time=64.9 ms 64 bytes from 10.1.1.1: icmp_seq=24 ttl=61 time=41.8 ms 64 bytes from 10.1.1.1: icmp_seq=26 ttl=61 time=62.7 ms 64 bytes from 10.1.1.1: icmp_seq=27 ttl=61 time=46.5 ms // 2. Profile 64 bytes from 10.1.1.1: icmp_seq=28 ttl=61 time=338 ms 64 bytes from 10.1.1.1: icmp_seq=29 ttl=61 time=313 ms 64 bytes from 10.1.1.1: icmp_seq=30 ttl=61 time=290 ms 64 bytes from 10.1.1.1: icmp_seq=31 ttl=61 time=381 ms 64 bytes from 10.1.1.1: icmp_seq=32 ttl=61 time=338 ms 64 bytes from 10.1.1.1: icmp_seq=33 ttl=61 time=255 ms 64 bytes from 10.1.1.1: icmp_seq=34 ttl=61 time=353 ms 64 bytes from 10.1.1.1: icmp_seq=35 ttl=61 time=275 ms 64 bytes from 10.1.1.1: icmp_seq=37 ttl=61 time=368 ms 64 bytes from 10.1.1.1: icmp_seq=38 ttl=61 time=358 ms 64 bytes from 10.1.1.1: icmp_seq=39 ttl=61 time=264 ms 64 bytes from 10.1.1.1: icmp_seq=40 ttl=61 time=271 ms 64 bytes from 10.1.1.1: icmp_seq=41 ttl=61 time=332 ms 64 bytes from 10.1.1.1: icmp_seq=42 ttl=61 time=250 ms 64 bytes from 10.1.1.1: icmp_seq=43 ttl=61 time=269 ms 64 bytes from 10.1.1.1: icmp_seq=44 ttl=61 time=255 ms 64 bytes from 10.1.1.1: icmp_seq=45 ttl=61 time=265 ms 64 bytes from 10.1.1.1: icmp_seq=46 ttl=61 time=282 ms 64 bytes from 10.1.1.1: icmp_seq=47 ttl=61 time=261 ms 64 bytes from 10.1.1.1: icmp_seq=48 ttl=61 time=338 ms 64 bytes from 10.1.1.1: icmp_seq=49 ttl=61 time=269 ms 64 bytes from 10.1.1.1: icmp_seq=50 ttl=61 time=341 ms 64 bytes from 10.1.1.1: icmp_seq=51 ttl=61 time=387 ms 64 bytes from 10.1.1.1: icmp_seq=52 ttl=61 time=342 ms 64 bytes from 10.1.1.1: icmp_seq=53 ttl=61 time=258 ms 64 bytes from 10.1.1.1: icmp_seq=54 ttl=61 time=325 ms 64 bytes from 10.1.1.1: icmp_seq=55 ttl=61 time=352 ms 64 bytes from 10.1.1.1: icmp_seq=56 ttl=61 time=347 ms 64 bytes from 10.1.1.1: icmp_seq=57 ttl=61 time=321 ms 64 bytes from 10.1.1.1: icmp_seq=59 ttl=61 time=490 ms 64 bytes from 10.1.1.1: icmp_seq=60 ttl=61 time=478 ms 64 bytes from 10.1.1.1: icmp_seq=61 ttl=61 time=385 ms 64 bytes from 10.1.1.1: icmp_seq=62 ttl=61 time=486 ms 64 bytes from 10.1.1.1: icmp_seq=63 ttl=61 time=562 ms 64 bytes from 10.1.1.1: icmp_seq=64 ttl=61 time=475 ms 64 bytes from 10.1.1.1: icmp_seq=65 ttl=61 time=439 ms 64 bytes from 10.1.1.1: icmp_seq=67 ttl=61 time=571 ms 64 bytes from 10.1.1.1: icmp_seq=68 ttl=61 time=533 ms 64 bytes from 10.1.1.1: icmp_seq=69 ttl=61 time=528 ms 64 bytes from 10.1.1.1: icmp_seq=70 ttl=61 time=403 ms 64 bytes from 10.1.1.1: icmp_seq=72 ttl=61 time=396 ms 64 bytes from 10.1.1.1: icmp_seq=73 ttl=61 time=361 ms 64 bytes from 10.1.1.1: icmp_seq=75 ttl=61 time=470 ms 64 bytes from 10.1.1.1: icmp_seq=77 ttl=61 time=675 ms 64 bytes from 10.1.1.1: icmp_seq=78 ttl=61 time=531 ms 64 bytes from 10.1.1.1: icmp_seq=79 ttl=61 time=382 ms 64 bytes from 10.1.1.1: icmp_seq=80 ttl=61 time=381 ms 64 bytes from 10.1.1.1: icmp_seq=81 ttl=61 time=400 ms 64 bytes from 10.1.1.1: icmp_seq=82 ttl=61 time=551 ms 64 bytes from 10.1.1.1: icmp_seq=83 ttl=61 time=570 ms 64 bytes from 10.1.1.1: icmp_seq=84 ttl=61 time=565 ms 64 bytes from 10.1.1.1: icmp_seq=85 ttl=61 time=539 ms 64 bytes from 10.1.1.1: icmp_seq=86 ttl=61 time=386 ms 64 bytes from 10.1.1.1: icmp_seq=87 ttl=61 time=237 ms // 3.Profil 64 bytes from 10.1.1.1: icmp_seq=88 ttl=61 time=12.6 ms 64 bytes from 10.1.1.1: icmp_seq=89 ttl=61 time=13.1 ms 64 bytes from 10.1.1.1: icmp_seq=90 ttl=61 time=13.3 ms 64 bytes from 10.1.1.1: icmp_seq=91 ttl=61 time=11.6 ms 64 bytes from 10.1.1.1: icmp_seq=92 ttl=61 time=13.2 ms 64 bytes from 10.1.1.1: icmp_seq=93 ttl=61 time=12.6 ms 64 bytes from 10.1.1.1: icmp_seq=94 ttl=61 time=13.0 ms 64 bytes from 10.1.1.1: icmp_seq=95 ttl=61 time=12.4 ms 64 bytes from 10.1.1.1: icmp_seq=96 ttl=61 time=11.5 ms 64 bytes from 10.1.1.1: icmp_seq=97 ttl=61 time=11.9 ms 64 bytes from 10.1.1.1: icmp_seq=98 ttl=61 time=13.5 ms 64 bytes from 10.1.1.1: icmp_seq=99 ttl=61 time=11.1 ms 64 bytes from 10.1.1.1: icmp_seq=100 ttl=61 time=11.9 ms 64 bytes from 10.1.1.1: icmp_seq=101 ttl=61 time=12.4 ms 64 bytes from 10.1.1.1: icmp_seq=102 ttl=61 time=12.7 ms 64 bytes from 10.1.1.1: icmp_seq=103 ttl=61 time=12.8 ms 64 bytes from 10.1.1.1: icmp_seq=104 ttl=61 time=12.8 ms 64 bytes from 10.1.1.1: icmp_seq=105 ttl=61 time=11.2 ms 64 bytes from 10.1.1.1: icmp_seq=106 ttl=61 time=12.7 ms 64 bytes from 10.1.1.1: icmp_seq=107 ttl=61 time=14.1 ms 64 bytes from 10.1.1.1: icmp_seq=108 ttl=61 time=13.0 ms 64 bytes from 10.1.1.1: icmp_seq=109 ttl=61 time=12.5 ms 64 bytes from 10.1.1.1: icmp_seq=110 ttl=61 time=20.0 ms 64 bytes from 10.1.1.1: icmp_seq=111 ttl=61 time=13.1 ms 64 bytes from 10.1.1.1: icmp_seq=112 ttl=61 time=12.3 ms 64 bytes from 10.1.1.1: icmp_seq=113 ttl=61 time=12.4 ms 64 bytes from 10.1.1.1: icmp_seq=114 ttl=61 time=11.4 ms 64 bytes from 10.1.1.1: icmp_seq=115 ttl=61 time=13.1 ms 64 bytes from 10.1.1.1: icmp_seq=116 ttl=61 time=12.4 ms // 1.Profil 64 bytes from 10.1.1.1: icmp_seq=117 ttl=61 time=43.5 ms 64 bytes from 10.1.1.1: icmp_seq=118 ttl=61 time=67.6 ms 64 bytes from 10.1.1.1: icmp_seq=119 ttl=61 time=42.7 ms 64 bytes from 10.1.1.1: icmp_seq=120 ttl=61 time=52.1 ms 64 bytes from 10.1.1.1: icmp_seq=121 ttl=61 time=41.0 ms 64 bytes from 10.1.1.1: icmp_seq=122 ttl=61 time=47.1 ms 64 bytes from 10.1.1.1: icmp_seq=123 ttl=61 time=41.1 ms 64 bytes from 10.1.1.1: icmp_seq=124 ttl=61 time=58.0 ms 64 bytes from 10.1.1.1: icmp_seq=125 ttl=61 time=70.4 ms 64 bytes from 10.1.1.1: icmp_seq=126 ttl=61 time=54.6 ms 64 bytes from 10.1.1.1: icmp_seq=127 ttl=61 time=55.6 ms 64 bytes from 10.1.1.1: icmp_seq=128 ttl=61 time=53.1 ms 64 bytes from 10.1.1.1: icmp_seq=129 ttl=61 time=55.5 ms 64 bytes from 10.1.1.1: icmp_seq=130 ttl=61 time=53.1 ms 64 bytes from 10.1.1.1: icmp_seq=131 ttl=61 time=37.6 ms 64 bytes from 10.1.1.1: icmp_seq=132 ttl=61 time=52.9 ms 64 bytes from 10.1.1.1: icmp_seq=133 ttl=61 time=57.6 ms 64 bytes from 10.1.1.1: icmp_seq=134 ttl=61 time=47.0 ms 64 bytes from 10.1.1.1: icmp_seq=135 ttl=61 time=51.2 ms 64 bytes from 10.1.1.1: icmp_seq=136 ttl=61 time=47.1 ms 64 bytes from 10.1.1.1: icmp_seq=137 ttl=61 time=57.1 ms 64 bytes from 10.1.1.1: icmp_seq=138 ttl=61 time=56.0 ms 64 bytes from 10.1.1.1: icmp_seq=139 ttl=61 time=59.6 ms 64 bytes from 10.1.1.1: icmp_seq=140 ttl=61 time=47.0 ms 64 bytes from 10.1.1.1: icmp_seq=141 ttl=61 time=59.9 ms 64 bytes from 10.1.1.1: icmp_seq=142 ttl=61 time=54.9 ms 64 bytes from 10.1.1.1: icmp_seq=143 ttl=61 time=69.2 ms 64 bytes from 10.1.1.1: icmp_seq=144 ttl=61 time=42.6 ms 64 bytes from 10.1.1.1: icmp_seq=145 ttl=61 time=60.0 ms 64 bytes from 10.1.1.1: icmp_seq=146 ttl=61 time=40.3 ms // 2. Profile 64 bytes from 10.1.1.1: icmp_seq=147 ttl=61 time=295 ms 64 bytes from 10.1.1.1: icmp_seq=148 ttl=61 time=293 ms 64 bytes from 10.1.1.1: icmp_seq=149 ttl=61 time=261 ms ``` -> Das NetEm hat 3 Profile im Abstand von ca. 30 oder ca. 60 Pakete ### Ploten der Ping Latenz Schreiben eines Batch Files um die Ping NAchricht in eine csv Datei umzuschreiben. Damit man diese mit Hilfe von der Python lib panda und mathplolib als Graphen darstellen lassen kann. ## 7.4 Subjektiver Einfluss von Latenz und Paketverlust ### Verbindung mit netcat zwischen RaspberryPi und Laptop Auf Port 3333 lauschen (mit RaspberryPi): ```shell pi@raspberrypi:~ $ nc -l -p 3333 ``` Verbinden mit lauschendem Partner (mit Laptop): ```shell # nc <zieladresse> <zielport> User@pop-os:~ $ nc 10.1.1.1 3333 ``` Um zu überprüfen, ob TCP oder UDP verwendet wird: - TCP: ```shell user@pop-os:~$ nc -vz 10.1.1.1 3333 Connection to 10.1.1.1 3333 port [tcp/*] succeeded! ``` - UDP: ```shell user@pop-os:~$ nc -vz -u 10.1.1.1 3333 Connection to 10.1.1.1 3333 port [udp/*] succeeded! ``` Wenn man nun auf RaspberryPi etwas in der Kommandozeile taucht dies auch beim Laptop auf. Umgekehrt genauso $\Rightarrow$ Standard-Inputs und Standard-Outputs sind ### Wireshark TCP vs UDP #### TCP: ![tcp_netcat](https://hackmd.io/_uploads/S1Yg4ATNR.png) $\Rightarrow$ Bei TCP wird ein 3-Way-Handshake (SYN, SYN_ACK, ACK) durchgeführt. #### UDP: ![udp_netcat](https://hackmd.io/_uploads/BkTPNCp4C.png) ### Echtzeitübertragung #### TCP RaspberryPi: ```shell arecord -f S16_LE -r 44100 -V mono -D hw:1,0 -c 1 -t raw | nc -l -p 3333 ``` Hierbei ```shell arecord -D hw:1,0 -f S16_LE -r 44100 -c 1 -t raw | sox -t raw -r 44100 -e signed -b 16 -c 1 - -t raw -c 2 -r 44100 - | nc -l -p 3333 ``` Client: ```shell netcat 10.1.1.1 3333 | aplay -f S16_LE -r 44100 -V stereo -D hw:1,0 -t raw -c 2 ``` Hiermit wird erfolgreich eine Live-Übertragung etabliert (~1s Verzögerung) #### UDP RaspberryPi: ```shell arecord -D hw:1,0 -f S16_LE -r 44100 -c 1 -t raw | sox -t raw -r 44100 -e signed -b 16 -c 1 - -t raw -c 2 -r 44100 - | nc -u -l -p 3333 ``` Client: ```shell netcat -u 10.1.1.1 3333 | aplay -f S16_LE -r 44100 -V stereo -D hw:1,0 -c 2 -t raw ``` (Bei Client muss einmal Enter gedrückt werden, damit der RaspberryPi weiß, an wen er die Pakete schicken muss). Es gibt bei UDP keine deutliche Verschlechterung der Audioqualiät, aber es kommt gelegentlich zu Paketverlusten. ### 7.4.1 Latenzminimierung und Puffer Einstellen der Pufferzeit mit: `--buffer-time <X>`, wobei X die Zeit in µs ist Pufferzeit (Sendeseite): 10000µs = 10ms Pufferzeit (Empfängerseite): 10000µs = 10ms $\Rightarrow$ Wiedergabe ist OK Pufferzeit (Sendeseite): 20000µs = 20ms Pufferzeit (Empfängerseite): 20000µs = 20ms $\Rightarrow$ Wiedergabe (etwas) verzögert, aber Stabilität besser. Die Pufferzeit kann beliebig verkleinert werden und trotzdem ist eine Signalübertragung möglich. Allgemein lässt sich feststellen, dass die Übertragung bei TCP besser ist als bei UDP. ### 7.4.2 Paketverlust und Latenz Es werden nun die NetEm-Profile durchgegangen: #### TCP **1.)** (10-25ms): Sinnvolle Übertragung möglich **2.)** (30-70ms): Sinnvolle Übertragung möglich **3.)** (200-400ms): Keine Übertragung mehr möglich **4.)** (300-600ms): Keine Übertragung mehr möglich #### UDP **1.)** (10-25ms): Sinnvolle Übertragung möglich **2.)** (30-70ms): Übertragung fehlerhaft (definitiv schlechter als TCP) **3.)** (200-400ms): Keine Übertragung mehr möglich aber besser als bei TCP **4.)** (300-600ms): Keine Übertragung mehr möglich #### Dimensionierung der Pufferzeiten Bei UDP kann man mit einer Pufferzeit von 1000ms unterbrechungsfrei übertragen werden, allerdings kommen manche Pakete in der falschen Reihenfolge an, wodurch das Signal verfälscht wird. Somit wäre ein sinnvolles Echtzeitgespräch nicht möglich. Bei TCP hingegen kommen die Pakete in der richtigen Reihenfolge an, wodurch ein sinnvolles Echtzeitgespräch möglich wird. (Allerdings bei beiden Protokollen: Hohe Latenz) # Protokoll 8 ## 8.3 Einfache OpenFlow Regeln ### Verbindung bereits möglich? Nein ```shell PS C:\Users\Leon-> ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.120: Zielhost nicht erreichbar. Zeitüberschreitung der Anforderung. ``` ### Match zur Kommunikation zwischen RaspberryPi (Port #2 SDN-Switch) und Endgerät (Port #3 SDN-Switch) ```shell! root@OpenWrt:~# ovs-ofctl add-flow ovs-br "table=0 in_port=2 actions=3" root@OpenWrt:~# ovs-ofctl add-flow ovs-br "table=0 in_port=3 actions=2" root@OpenWrt:~# ovs-ofctl dump-flows ovs-br cookie=0x0, duration=10.483s, table=0, n_packets=10, n_bytes=642, in_port="eth0.2" actions=output:"eth0.3" cookie=0x0, duration=4.628s, table=0, n_packets=18, n_bytes=1660, in_port="eth0.3" actions=output:"eth0.2" ``` Ping ist nun möglich: ```shell! PS C:\Users\user-> ping 10.1.1.1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.1: Bytes=32 Zeit=2ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=2ms TTL=64 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=64 Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 1ms, Maximum = 2ms, Mittelwert = 1ms ``` $\Rightarrow$ Paketcounter: 4, Bytecounter: 32 ### MAC-Adressen festellen - RaspberryPi: `ip addr` b8:27:eb:fc:10:f5 - Notebook: Windows Network Manager 00:e0:4c:6b:5d:64 (muss für andere Geräte geändert werden) ### Hinzufügen der MAC Regeln ```shell root@OpenWrt:~# ovs-ofctl add-flow ovs-br "arp,actions=flood" root@OpenWrt:~# ovs-ofctl add-flow ovs-br "dl_dst=00:E0:4C:6B:5D:64,dl_src=b8:27:eb:fc:10:f5,actions=3" root@OpenWrt:~# ovs-ofctl add-flow ovs-br "dl_src=00:E0:4C:6B:5D:64,dl_dst=b8:27:eb:fc:10:f5,actions=2" ``` ### Hinzufügen der IP Regeln Alte Regeln löschen: ```shell root@OpenWrt:~# ovs-ofctl del-flows ovs-br ``` Hinzufügen der neuen Regeln: ```shell root@OpenWrt:~# ovs-ofctl add-flow ovs-br "arp,actions=flood" root@OpenWrt:~# ovs-ofctl add-flow ovs-br "ip,nw_src=10.1.1.1,nw_dst=10.1.1.120,actions=dec_ttl,3" root@OpenWrt:~# ovs-ofctl add-flow ovs-br "ip,nw_dst=10.1.1.1,nw_src=10.1.1.120,actions=dec_ttl,2" ``` Für Ping mit TTL=1 (nach Reduzieren TTL=0 und verwerfen) ```shell PS C:\Users\user-> ping 10.1.1.1 -i 1 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Zeitüberschreitung der Anforderung. Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust), STRG-C PS C:\Users\user-> ping 10.1.1.1 -i 2 Ping wird ausgeführt für 10.1.1.1 mit 32 Bytes Daten: Antwort von 10.1.1.1: Bytes=32 Zeit=3ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Antwort von 10.1.1.1: Bytes=32 Zeit=1ms TTL=63 Ping-Statistik für 10.1.1.1: Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 1ms, Maximum = 3ms, Mittelwert = 1ms ``` ## 8.4 Nachbau eines statischen NAT mit Firewall RaspberryPi: `static_router` auf `10.1.1.254` geändert (von `10.1.1.100` aus vorherigen Aufgaben) ### Match-Action-Regeln ```shell ovs-ofctl add-flow ovs-br "priority=100,arp,arp_tpa=10.1.1.254,in_port=2,actions=set_field:2->arp_op,move:arp_spa->arp_tpa,set_field:10.1.1.254->arp_spa,move:arp_sha->arp_tha,set_field:08:55:31:34:9e:aa->arp_sha,move:eth_src->eth_dst,set_field:08:55:31:34:9e:aa->eth_src,in_port" ovs-ofctl add-flow ovs-br "priority=100,arp,arp_tpa=10.1.123.254,in_port=3,actions=set_field:2->arp_op,move:arp_spa->arp_tpa,set_field:10.1.123.254->arp_spa,move:arp_sha->arp_tha,set_field:08:55:31:34:9e:ab->arp_sha,move:eth_src->eth_dst,set_field:08:55:31:34:9e:ab->eth_src,in_port" ``` ![Screenshot from 2024-06-26 13-13-26](https://hackmd.io/_uploads/Syrw-Ft8A.png) Weiterleitung Port#2 $\leftrightarrow$ Port#3: ```shell ovs-ofctl add-flow ovs-br "priority=100,ip,in_port=3,nw_dst=10.1.1.1 actions=set_field:b8:27:eb:fc:10:f5->eth_dst, set_field:08:55:31:34:9e:ab->eth_src,dec_ttl,2" ovs-ofctl add-flow ovs-br "priority=100,ip,in_port=2,nw_dst=10.1.123.120 actions=set_field:08:55:31:34:9e:aa->eth_src, set_field:00:e0:4c:6b:5d:64->eth_dst,dec_ttl,3" ``` Ping Test: ```shell PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=1.95 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.921 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.922 ms 64 bytes from 10.1.1.1: icmp_seq=4 ttl=64 time=0.903 ms --- 10.1.1.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3002ms rtt min/avg/max/mdev = 0.903/1.172/1.945/0.445 ms ``` Droppen aller IP-Pakete aus Subnetz 10.1.1.0/24: ```shell ovs-ofctl add-flow ovs-br "priority=1500,ip,nw_dst=10.1.1.0/24,actions=drop" ``` Regeln für indirekte Aufrufe (10.1.123.254:12221 nach Port 22 (SSH) des RapberryPi) ```shell ovs-ofctl add-flow ovs-br "priority=2000,tcp,nw_dst=10.1.123.254,tp_dst=12221, actions=mod_nw_dst:10.1.1.1,mod_tp_dst:22,mod_dl_src:08:55:31:34:9e:aa,mod_dl_dst:b8:27:eb:fc:10:f5,2" ovs-ofctl add-flow ovs-br "priority=2000,tcp,in_port=2,nw_dst=10.1.123.0/24,tp_src=22, actions=mod_tp_src:12221,mod_nw_src:10.1.123.254,mod_dl_src:08:55:31:34:9e:ab,mod_dl_dst:00:e0:4c:6b:5d:64,3" ``` $\Rightarrow$ SSH funktioniert, Ping nicht möglich Verbindung zu Dash-Web-Server: Neue Regeln: ```shell ovs-ofctl add-flow ovs-br "priority=2000,tcp,nw_dst=10.1.1.254,tp_dst=10810, actions=mod_nw_dst:10.1.123.120,mod_dl_src:08:55:31:34:9e:ab,mod_dl_dst:00:e0:4c:6b:5d:64,mod_nw_src:10.1.123.254,3" ovs-ofctl add-flow ovs-br "priority=1000,tcp,nw_dst=10.1.123.254,actions=mod_nw_dst:10.1.1.1,mod_dl_src:08:55:31:34:9e:aa,mod_dl_dst:b8:27:eb:fc:10:f5,mod_nw_src:10.1.1.254,2" ``` Verbindungen sind wieder möglich und Temperaturverlauf kann am Endgerät (Laptop) über `127.0.0.1:10810` tcp_client.py, tcp_server.py und temp_http.py sind in GitLab. #### Übersicht aller Regeln ```shell root@OpenWrt:~# ovs-ofctl dump-flows ovs-br cookie=0x0, duration=830.881s, table=0, n_packets=78, n_bytes=8485, priority=2000,tcp,nw_dst=10.1.123.254,tp_dst=12221 actions=mod_nw_dst:10.1.1.1,mod_tp_dst:22,mod_dl_src:08:55:31:34:9e:aa,mod_dl_dst:b8:27:eb:fc:10:f5,output:"eth0.2" cookie=0x0, duration=823.096s, table=0, n_packets=8, n_bytes=552, priority=2000,tcp,nw_dst=10.1.1.254,tp_dst=10810 actions=mod_nw_dst:10.1.123.120,mod_dl_src:08:55:31:34:9e:ab,mod_dl_dst:00:e0:4c:6b:5d:64,mod_nw_src:10.1.123.254,output:"eth0.3" cookie=0x0, duration=827.144s, table=0, n_packets=64, n_bytes=9728, priority=2000,tcp,in_port="eth0.2",nw_dst=10.1.123.0/24,tp_src=22 actions=mod_tp_src:12221,mod_nw_src:10.1.123.254,mod_dl_src:08:55:31:34:9e:ab,mod_dl_dst:00:e0:4c:6b:5d:64,output:"eth0.3" cookie=0x0, duration=834.147s, table=0, n_packets=0, n_bytes=0, priority=1500,ip,nw_dst=10.1.1.0/24 actions=drop cookie=0x0, duration=819.254s, table=0, n_packets=6, n_bytes=404, priority=1000,tcp,nw_dst=10.1.123.254 actions=mod_nw_dst:10.1.1.1,mod_dl_src:08:55:31:34:9e:aa,mod_dl_dst:b8:27:eb:fc:10:f5,mod_nw_src:10.1.1.254,output:"eth0.2" cookie=0x0, duration=847.139s, table=0, n_packets=18, n_bytes=1080, priority=100,arp,in_port="eth0.2",arp_tpa=10.1.1.254 actions=load:0x2->NXM_OF_ARP_OP[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xa0101fe->NXM_OF_ARP_SPA[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],load:0x85531349eaa->NXM_NX_ARP_SHA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:08:55:31:34:9e:aa,IN_PORT cookie=0x0, duration=843.286s, table=0, n_packets=3, n_bytes=180, priority=100,arp,in_port="eth0.3",arp_tpa=10.1.123.254 actions=load:0x2->NXM_OF_ARP_OP[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xa017bfe->NXM_OF_ARP_SPA[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],load:0x85531349eab->NXM_NX_ARP_SHA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:08:55:31:34:9e:ab,IN_PORT cookie=0x0, duration=840.242s, table=0, n_packets=0, n_bytes=0, priority=100,ip,in_port="eth0.3",nw_dst=10.1.1.1 actions=mod_dl_dst:b8:27:eb:fc:10:f5,mod_dl_src:08:55:31:34:9e:ab,dec_ttl,output:"eth0.2" cookie=0x0, duration=836.798s, table=0, n_packets=0, n_bytes=0, priority=100,ip,in_port="eth0.2",nw_dst=10.1.123.120 actions=mod_dl_src:08:55:31:34:9e:aa,mod_dl_dst:00:e0:4c:6b:5d:64,dec_ttl,output:"eth0.3" ```

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully