Um die fehlenden Massnahmen gegen Bufferbloat kompensieren zu können, kann ein Linux-Rechner als "Traffic Shaper" eingesetzt werden. Zum Thema "Traffic Shaping" siehe auch:
https://de.wikipedia.org/wiki/Traffic-Shaping
Zum Thema "fehlende Massnahmen gegen Bufferbloat" bei LANCOM-Routern mit dem Betriebssystem LCOS siehe auch:
fragen-zur-lancom-systems-routern-und-g ... ml#p106483
Diese Anleitung soll den Einsatz eines Mini-Computers Raspberry Pi 4 Modell B mit Ubuntu 20.04 LTS (focal) als "Traffic Shaper" aufzeigen.
Für das bessere Verständnis der Angaben in dieser Anleitung wird das vorgängige Lesen der "Gute Performance"-Regeln Nr. 21, 22 und 29 unter:
https://community.upc.ch/d/4397-diagnos ... e-probl/27
dringend empfohlen!
Für das "Traffic Shaping" wird der Gigabit-Ethernet-Netzwerkanschluss vom Raspberry Pi 4 Modell B eingesetzt. Dieser Gigabit-Ethernet-Netzwerkanschluss wird von der internen, integrierten Netzwerkkarte im Raspberry Pi 4 als eth0 bereit gestellt.
Der als "Traffic shaper" fungierende Linux-Rechner kann als einzige, eigene Hardware-Firewall-/Router des Internetanschlusses betrieben werden (Standalone-Betrieb). Im Standalone-Betrieb muss der Linux-Rechner an einem VLAN-fähigen Switch betrieben werden. Die Trennung von WAN- und LAN-Seite (Heimnetzwerk/Firmennetzwerk) erfolgt per VLAN. Als Einstieg in das Thema VLAN siehe auch:
https://www.heise.de/ct/artikel/VLAN-Vi ... 21621.html
fragen-zur-lancom-systems-routern-und-g ... tml#p90529
fragen-zum-thema-firewall-f15/portfreig ... tml#p99671
Alternativ kann der Linux-Rechner parallel zu einem LANCOM-Router an einem Internetanschluss betrieben werden (Parrallelbetrieb). Beim Parallelbetrieb muss auf dem LANCOM-Router eine oder mehrere LAN-Bridges korrekt konfiguriert werden.
- LCOS-Menübaum > Setup > LAN-Bridge > Isolierter-Modus:=nein
- LCOS-Menübaum > Setup > LAN-Bridge > Port-Daten
Die Trennung von WAN- und LAN-Seite (Heimnetzwerk/Firmennetzwerk) erfolgt beim Parallelbetrieb ebenfalls per VLAN. Beim Parallelbetrieb muss der LANCOM-Router (DHCP-Server) und alle LAN-seitigen Netzwerkkomponenten und Netzwerkteilnehmern so konfiguriert werden, dass als Gateway der Linux-Rechner (IP: 192.168.7.55) verwendet wird und somit jeglicher Datenverkehr von und zum Internet über den Linux-Rechner abgewickelt wird.
In dieser Anleitung wird folgendes Beispiel realisiert:
Code: Alles auswählen
eth0.14 VLAN-ID 14 auf eth0 Internetanschluss (WAN)
eth0.7 VLAN-ID 7 auf eth0 Anschluss eines Windows-PC im Heimnetzwerk/Firmennetzwerk (LAN)
Für die Grundlagen zu Hardware und Software des Linux-Rechners sowie dessen Grundkonfiguration siehe:
aktuelle-lancom-router-serie-f41/vdsl-u ... ml#p101750
fragen-zum-thema-vpn-f14/vpn-mit-16-kle ... ml#p106335
Diese Anleitung basiert auf diesen Grundlagen!
Die Netzwerkkarte des Linux-Rechners (eth0) für den VLAN-Betrieb konfigurieren. Siehe dazu auch:
https://wiki.archlinux.org/title/VLAN
# man systemd-networkd
# man systemd.network
# man systemd.netdev
# man systemd.link
/etc/systemd/network/eth0.network
Code: Alles auswählen
[Match]
Name=eth0
[Network]
IPv6PrivacyExtensions=yes
VLAN=eth0.14
VLAN=eth0.7
/etc/systemd/network/eth0.14.network
Code: Alles auswählen
[Match]
Name=eth0.14
[Network]
Address=192.168.14.55/24
IPv6PrivacyExtensions=yes
[Route]
Gateway=192.168.14.1
Table=14
[Route]
Destination=192.168.14.0/24
PreferredSource=192.168.14.55
Scope=link
Table=14
Protocol=kernel
[RoutingPolicyRule]
From=192.168.14.0/24
Table=14
/etc/systemd/network/eth0.7.network
Code: Alles auswählen
[Match]
Name=eth0.7
[Network]
Address=192.168.7.55/24
IPv6PrivacyExtensions=yes
[Route]
Destination=192.168.7.0/24
PreferredSource=192.168.7.55
Scope=link
Table=14
Protocol=kernel
[RoutingPolicyRule]
From=192.168.7.0/24
Table=14
/etc/systemd/network/eth0.14.netdev
/etc/systemd/network/eth0.7.netdev
Neue Netzwerkeinstellungen übernehmen:
Code: Alles auswählen
systemctl restart systemd-networkd.service
systemctl status systemd-networkd.service
Danach die Einträge in den Routingtabellen kontrollieren. Es wird im Beispiel "Policy Routing" eingesetzt. Siehe dazu auch:
https://blog.scottlowe.org/2013/05/29/a ... y-routing/
# man ip route
# man ip rule
https://de.wikipedia.org/wiki/Routingtabelle
Code: Alles auswählen
# ip rule list
0: from all lookup local
0: from 192.168.7.0/24 lookup 14
0: from 192.168.14.0/24 lookup 14
32766: from all lookup main
32767: from all lookup default
Code: Alles auswählen
# ip route list
192.168.7.0/24 dev eth0.7 proto kernel scope link src 192.168.7.55
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.55
Code: Alles auswählen
# ip route list table 14
default via 192.168.14.1 dev eth0.14 proto static
192.168.7.0/24 dev eth0.7 proto kernel scope link src 192.168.7.55
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.55
Wer kein "Policy Routing" benötigt, kann die Konfiguration der Routingtabellen entsprechend anpassen respektive vereinfachen.
Sysctl für den Betrieb als Router konfigurieren. Siehe dazu auch:
https://www.kernel.org/doc/html/latest/ ... ysctl.html
https://en.wikipedia.org/wiki/Sysctl
Ausgangslage und Grundlage für die Sysctl-Konfiguration sind die Firewall-relevanten Sysctl-Konfigurationen unter:
https://forums.suse.com/discussion/comment/59615
/etc/sysctl.conf
Code: Alles auswählen
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.tcp_syncookies=0
net.ipv6.conf.all.forwarding=0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.lo.accept_redirects = 0
net.ipv6.conf.eth0.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.lo.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# Ethernet-Sendewarteschlange CAKE aktivieren
net.core.default_qdisc = cake
# Unterstützung von ECN aktivieren
net.ipv4.tcp_ecn = 1
# ICMP Echo (Ping) deaktivieren
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv6.icmp.echo_ignore_all = 1
net.ipv6.icmp.echo_ignore_anycast = 1
net.ipv6.icmp.echo_ignore_multicast = 1
Vor der dauerhaften Einschaltung der Unterstützung von ECN sollte kontrolliert werden, ob der ISP und somit der Internetanschluss auch einwandfrei ECN unterstützt. Siehe dazu:
https://community.upc.ch/d/15398-ecn-fi ... pc-sunrise
Für die Übernahme der neuen Sysctl-Konfiguration den Linux-Rechner neustarten:
Die AQM/SQM-Konfiguration sollte über Systemd erfolgen. Siehe dazu:
# man systemd.network
Nicht alle AQM/SQM-Konfigurationen können über Systemd erfolgen. Hier eine entsprechende Lösung für die individuelle AQM/SQM-Konfiguration. Siehe dazu auch:
https://wiki.archlinux.org/title/Systemd
# man systemd.unit
# man systemd.special
/etc/systemd/netzwerkStart.service
Code: Alles auswählen
[Unit]
Description=netzwerkStart
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/netzwerkStart.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
/usr/local/sbin/netzwerkStart.sh
Code: Alles auswählen
#!/bin/bash
########################################################
# /usr/local/sbin/netzwerkStart.sh #
# #
# AQM/SQM konfigurieren #
# #
########################################################
echo "AQM/SQM konfigurieren..."
# AQM/SQM konfigurieren (CAKE)
# eth0 ohne Limitierung im Upstream
echo "eth0 ohne Limitierung im Upstream..."
/usr/sbin/tc qdisc replace dev eth0 root cake diffserv4 ethernet
# eth0.14 mit 10.5 MBit/s im Upstream (VLAN-ID: 14)
echo "eth0.14 mit 10.5 MBit/s im Upstream (VLAN-ID: 14)..."
/usr/sbin/tc qdisc replace dev eth0.14 root cake diffserv4 ethernet bandwidth 10.5Mbit
# eth0.14 mit 80 MBit/s im Downstream (VLAN-ID: 14)
echo "eth0.14 mit 80 MBit/s im Downstream (VLAN-ID: 14)..."
/usr/sbin/ip link add name ifb14eth0 type ifb
/usr/sbin/tc qdisc del dev eth0.14 ingress
/usr/sbin/tc qdisc add dev eth0.14 handle ffff: ingress
/usr/sbin/tc qdisc del dev ifb14eth0 root
/usr/sbin/tc qdisc add dev ifb14eth0 root cake diffserv4 ethernet bandwidth 80Mbit
/usr/sbin/ip link set ifb14eth0 up txqueuelen 1000
/usr/sbin/tc filter add dev eth0.14 parent ffff: matchall action ctinfo dscp 0x0000003f pipe mirred egress redirect dev ifb14eth0
# eth0.7 ohne Limitierung im Upstream (VLAN-ID: 7)
echo "eth0.7 ohne Limitierung im Upstream (VLAN-ID: 7)..."
/usr/sbin/tc qdisc replace dev eth0.7 root cake diffserv4 ethernet
# Überflüssige IFB-Links löschen
echo "Überflüssige IFB-Links löschen..."
/usr/sbin/ip link del ifb0
/usr/sbin/ip link del ifb1
Die Anwendung der Option "diffserv4" ist empfehlenswert. Siehe dazu auch:
# man tc-cake
https://www.bufferbloat.net/projects/codel/wiki/Cake/
Per "tc action ctinfo" werden alle über CONNMARK-Firewallregeln bekannten DSCP-Markierungen an den über den WAN-Port (eth0.14) empfangenen IP-Datenpakete angebracht. Für mehr Informationen zu diesem Schritt siehe:
# man tc-ctinfo
# man tc
Schliesslich werden alle über den WAN-Port (eth0.14) empfangene Datenpakete per "tc action mirred" gespiegelt und durch ifb14eth0 an dessen Traffic Shaper (CAKE) gesendet. Für mehr Informationen zu diesem Schritt siehe:
# man tc-mirred
# man tc-matchall
Die korrekte Funktion der oben genannten "tc actions" kann mit dem Befehl:
# tc -s filter show dev eth0.14 ingress
kontrolliert werden.
Neuer Systemd-Dienst aktivieren:
Code: Alles auswählen
# chmod u=rwx,g=,o= /usr/local/sbin/netzwerkStart.sh
# chmod u=rw,g=r,o=r /etc/systemd/system/netzwerkStart.service
# systemctl enable netzwerkStart.service
# systemctl start netzwerkStart.service
# systemctl status netzwerkStart.service
Die einwandfreie Funktion vom AQM/SQM (CAKE) regelmässig mit dem Befehl:
Code: Alles auswählen
# tc -s qdisc show dev eth0.14
# tc -s qdisc show dev ifb14eth0
überprüfen. Wenn die Sendewarteschlange zu lang wird, werden vom AQM/SQM (CAKE) einzelne IP-Datenpakete entweder verworfen (DROP) oder bei TCP-Verbindungen mit ECN-Unterstützung mit “Congestion experienced” (CE) markiert. Dieses Verhalten ist an den Zeilen "drops" (DROP) respektive "marks" (CE -> ECN) ersichtlich.
Die Zeilen pk_delay, av_delay und sp_delay geben Auskunft über die gemessene Verzögerungszeit beim Pakettransport durch Sendewarteschlangenstau. Pk_delay entspricht der grössten gemessenen Verzögerungszeit, av_delay der durchschnittlichen Verzögerungszeit und sp_delay der kleinsten gemessenen Verzögerungszeit.
Firewall-Regeln für den Router-Betrieb umkonfigurieren. Als Ausgangslage und Grundlage für die Firewallkonfiguration respektive Firewall-Regeln gelten die Angaben unter:
https://forums.rancher.com/t/having-net ... sues/34807
Siehe dazu auch:
# man iptables-extensions
https://home.regit.org/netfilter-en/netfilter-connmark/
https://commons.wikimedia.org/wiki/File ... t-flow.svg
Kurz zusammengefasst:
/usr/local/sbin/firewallStart.sh
Code: Alles auswählen
#!/bin/bash
########################################################
# /usr/local/sbin/firewallStart.sh #
# #
# Firewall starten #
# #
########################################################
echo "Alle vorhandenen Firewall-Regeln löschen..."
# Alle vorhandenen Firewall-Regeln löschen (IPv4)
/usr/sbin/iptables -w 20 -t filter -F
/usr/sbin/iptables -w 20 -t filter -X
/usr/sbin/iptables -w 20 -t nat -F
/usr/sbin/iptables -w 20 -t nat -X
/usr/sbin/iptables -w 20 -t mangle -F
/usr/sbin/iptables -w 20 -t mangle -X
/usr/sbin/iptables -w 20 -t raw -F
/usr/sbin/iptables -w 20 -t raw -X
/usr/sbin/iptables -w 20 -t security -F
/usr/sbin/iptables -w 20 -t security -X
# Alle vorhandenen Firewall-Regeln löschen (IPv6)
/usr/sbin/ip6tables -w 20 -t filter -F
/usr/sbin/ip6tables -w 20 -t filter -X
/usr/sbin/ip6tables -w 20 -t nat -F
/usr/sbin/ip6tables -w 20 -t nat -X
/usr/sbin/ip6tables -w 20 -t mangle -F
/usr/sbin/ip6tables -w 20 -t mangle -X
/usr/sbin/ip6tables -w 20 -t raw -F
/usr/sbin/ip6tables -w 20 -t raw -X
/usr/sbin/ip6tables -w 20 -t security -F
/usr/sbin/ip6tables -w 20 -t security -X
# Policies der Default-Chains von IPv4 anpassen
/usr/sbin/iptables -w 20 -t filter --policy INPUT DROP
/usr/sbin/iptables -w 20 -t filter --policy OUTPUT DROP
/usr/sbin/iptables -w 20 -t filter --policy FORWARD DROP
# Policies der Default-Chains von IPv6 anpassen
/usr/sbin/ip6tables -w 20 -t filter --policy INPUT DROP
/usr/sbin/ip6tables -w 20 -t filter --policy OUTPUT DROP
/usr/sbin/ip6tables -w 20 -t filter --policy FORWARD DROP
echo "Strikte Paketkontrollen in der SPI-Firewall aktivieren..."
# Strikte Paketkontrollen in der SPI-Firewall aktivieren
/usr/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
echo "Neue Firewall-Regeln einlesen und setzen..."
# Firewall-Regeln einlesen und setzen (IPv4)
/usr/sbin/iptables-restore -w 20 /etc/firewall/firewall_rules_ipv4.txt
# Firewall-Regeln einlesen und setzen (IPv6)
/usr/sbin/ip6tables-restore -w 20 /etc/firewall/firewall_rules_ipv6.txt
echo "Routingtabelle anpassen..."
# Routingtabelle anpassen
/usr/sbin/ip route add unreachable 10.0.0.0/8
/usr/sbin/ip route add unreachable 172.16.0.0/12
/usr/sbin/ip route add unreachable 192.168.0.0/16
/usr/sbin/ip route add unreachable 169.254.0.0/16
echo "Forwarding für IPv4 aktivieren..."
# Forwarding für IPv4 aktivieren
/usr/sbin/sysctl -w net.ipv4.ip_forward=1
/etc/systemd/system/firewallStart.service
Code: Alles auswählen
[Unit]
Description=firewallStart
Before=network-pre.target
Wants=network-pre.target
Conflicts=iptables.service ip6tables.service firewalld.service ufw.service
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/firewallStart.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
/etc/firewall/firewall_rules_ipv4.txt
Code: Alles auswählen
#-------------------------------------------------------------------------------
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.7.0/24 -o eth0.14 -j MASQUERADE --random
COMMIT
#-------------------------------------------------------------------------------
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A FORWARD -i eth0.7 -p udp -m udp --dport 3479 -j DSCP --set-dscp-class EF
-A FORWARD -i eth0.7 -p udp -m udp --dport 3480 -j DSCP --set-dscp-class CS5
-A POSTROUTING -o eth0.14 -j CONNMARK --restore-mark
-A POSTROUTING -o eth0.14 -m connmark ! --mark 0 -j ACCEPT
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS1 -j CONNMARK --set-mark 8
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS2 -j CONNMARK --set-mark 16
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS3 -j CONNMARK --set-mark 24
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS4 -j CONNMARK --set-mark 32
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS5 -j CONNMARK --set-mark 40
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS6 -j CONNMARK --set-mark 40
-A POSTROUTING -o eth0.14 -m dscp --dscp-class CS7 -j CONNMARK --set-mark 40
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF11 -j CONNMARK --set-mark 10
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF12 -j CONNMARK --set-mark 12
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF13 -j CONNMARK --set-mark 14
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF21 -j CONNMARK --set-mark 18
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF22 -j CONNMARK --set-mark 20
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF23 -j CONNMARK --set-mark 22
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF31 -j CONNMARK --set-mark 26
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF32 -j CONNMARK --set-mark 28
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF33 -j CONNMARK --set-mark 30
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF41 -j CONNMARK --set-mark 34
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF42 -j CONNMARK --set-mark 36
-A POSTROUTING -o eth0.14 -m dscp --dscp-class AF43 -j CONNMARK --set-mark 38
-A POSTROUTING -o eth0.14 -m dscp --dscp 44 -j CONNMARK --set-mark 44
-A POSTROUTING -o eth0.14 -m dscp --dscp-class EF -j CONNMARK --set-mark 46
COMMIT
#-------------------------------------------------------------------------------
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -m rpfilter --invert -j DROP
COMMIT
#-------------------------------------------------------------------------------
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
#-------------------------------------------------------------------------------
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -p udp -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -d 192.168.13.55 -i eth0.7 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -d 192.168.13.55 -i eth0.7 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -d 192.168.13.55 -i eth0.7 -p udp -m udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p udp -m udp --dport 3478 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p udp -m udp --dport 3479 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p udp -m udp --dport 3480 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0.7 -s 192.168.7.0/24 -p udp -m udp --dport 3481 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -o lo -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -o lo -p udp -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p udp -m udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o eth0.14 -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
COMMIT
#-------------------------------------------------------------------------------
Neuer Systemd-Dienst aktivieren:
!!! Vor der Aktivierung des neuen Systemd-Dienstes müssen alle ähnlich arbeitenden Firewalldienste wie Firewalld und UFW deaktiviert oder noch besser deinstalliert werden !!!
Code: Alles auswählen
# chmod u=rwx,g=,o= /usr/local/sbin/firewallStart.sh
# chmod u=rw,g=r,o=r /etc/firewall/firewall_rules_ipv4.txt
# chmod u=rw,g=r,o=r /etc/systemd/system/firewallStart.service
# systemctl enable firewallStart.service
# systemctl start firewallStart.service
# systemctl status firewallStart.service
# journalctl -b -u firewallStart.service
Alle bevorzugt zu behandelnden Datenpakete sollten auf Layer 3 (IP) mit Diffserv (DSCP) entsprechend markiert werden. Die Diffserv-Markierung (DSCP) hat grundsätzlich durch die Anwendung zu erfolgen (zum Beispiel: MS Teams).
Als Notlösung kann die Markierung auch vom Linux-Rechner auf allen erforderlichen Datenpakete in Senderichtung erfolgen (WAN+LAN), welche vorgängig über keine DSCP-Markierung verfügten.
https://linuxreviews.org/Type_of_Servic ... SCP_Values
Die im abgebildeten Beispiel vorgesehene Markierung von IP-Datenpakete mit Serverport (Destionation port -> --dport) UDP 3479 und UDP 3480 ist nicht zwingend erforderlich, da diese DSCP-Markierung bereits auf dem Windows-Rechner durch die Anwendung MS Teams erfolgt. Diese DSCP-Markierung dient nur zu Anschauungs- und Lernzwecke!
Neue Firewallregeln übernehmen:
Code: Alles auswählen
# systemctl restart firewallStart.service
# systemctl status firewallStart.service
# iptables -t nat -L -n -v
# iptables -t mangle -L -n -v
# iptables -t filter -L -n -v|more
Mit Wireshark kontrollieren, ob die Datenpakete vom Linux-Rechner mit der korrekten Diffserv (DSCP)-Markierung versehen wurden.
fragen-zur-lancom-systems-routern-und-g ... tml#p98835
https://community.upc.ch/d/8569-gigacon ... ssetzer/25
viewtopic.php?f=14&t=17510&p=99340#p99340
https://lancom-forum.de/alles-zum-lanco ... tml#p99943