conntrack Tuning für Container Hosts: Table Size, Hash, Timeouts

Container-Hosts betreiben in der Regel zahlreiche TCP- und UDP-Verbindungen gleichzeitig. Jedes dieser Verbindungen wird in der Linux-Netzwerk-Stack über die conntrack-Tabelle nachverfolgt. Eine Standardkonfiguration kann bei hoher Containerdichte schnell an ihre Grenzen stoßen, was zu Paketverlusten, Timeouts oder Verbindungsabbrüchen führt. Dieses Tutorial erklärt, wie man die conntrack-Tabelle optimiert, um stabilen Netzwerkbetrieb für Container-Hosts sicherzustellen.

1. Grundlagen: conntrack und Netfilter

conntrack ist ein Bestandteil des Netfilter-Subsystems und verwaltet den Zustand von Netzwerkverbindungen. Für jedes Paket, das den Host passiert, prüft conntrack, ob eine bestehende Verbindung existiert oder eine neue aufgebaut werden muss.

Funktionsweise

  • TCP-Verbindungen: SYN/SYN-ACK/ACK werden getrackt
  • UDP: stateless, aber dennoch zeitlich begrenzt tracked
  • ICMP: Verbindungen nach Typ und ID getrackt

Die Tabelle speichert für jede Verbindung:

  • Source/Destination IP & Ports
  • Protokollinformationen
  • Status der Verbindung (ESTABLISHED, RELATED, NEW)
  • Timeouts für Inaktivität

2. conntrack Limits erkennen

Die conntrack-Tabelle ist begrenzt. Bei hoher Last kann sie voll laufen, wodurch neue Verbindungen abgelehnt werden. Typische Symptome:

  • „Connection refused“ oder TCP-RST
  • Verzögerungen bei neuen Verbindungen
  • Kernel-Log: nf_conntrack: table full, dropping packet

Aktuelle Nutzung prüfen:

sudo cat /proc/sys/net/netfilter/nf_conntrack_count
sudo cat /proc/sys/net/netfilter/nf_conntrack_max

Hash-Buckets prüfen

Die interne Hash-Tabelle beeinflusst die Lookup-Performance:

sudo cat /sys/module/nf_conntrack/parameters/hashsize

3. conntrack Table Size anpassen

Die Tabelle kann dynamisch erweitert werden:

# Temporär erhöhen
sudo sysctl -w net.netfilter.nf_conntrack_max=131072

Dauerhaft in /etc/sysctl.conf

net.netfilter.nf_conntrack_max=131072
sudo sysctl -p

Berechnung des Werts

Empfehlung: nf_conntrack_max ≈ Anzahl gleichzeitiger TCP-Sessions × 2. Für Hosts mit 1000 Containern und je 50 aktive Verbindungen:

text{nf_conntrack_max} = 1000 times 50 times 2 = 100,000

4. Hashsize und Performance

Die Hash-Tabelle beeinflusst, wie schnell conntrack Einträge findet. Bei hoher Last kann ein zu kleiner Wert zu Kollisionen und CPU-Last führen:

# Hashsize erhöhen
sudo sysctl -w net.netfilter.nf_conntrack_buckets=32768

Prüfen

cat /proc/sys/net/netfilter/nf_conntrack_buckets

Best Practice

Wählen Sie die Hashsize ca. 1/4 bis 1/8 von nf_conntrack_max, um Kollisionen zu minimieren und Lookup effizient zu halten.

5. Timeout-Werte optimieren

Standard-Timeouts sind oft konservativ:

  • TCP ESTABLISHED: 432000 s (~5 Tage)
  • TCP FIN_WAIT: 120 s
  • UDP: 30 s

Für Container-Hosts mit kurzen Verbindungszeiten sollten Timeouts reduziert werden:

# Temporär reduzieren
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=600
sudo sysctl -w net.netfilter.nf_conntrack_udp_timeout=30

Dauerhaft in /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_established=600
net.netfilter.nf_conntrack_udp_timeout=30

6. Monitoring der conntrack-Tabelle

Regelmäßige Kontrolle hilft Engpässe früh zu erkennen:

# aktuelle Nutzung
sudo watch -n 1 cat /proc/sys/net/netfilter/nf_conntrack_count

Liste aktiver Einträge

sudo conntrack -L

nur spezifisches Protokoll

sudo conntrack -L -p tcp

Alerting

  • Verwendung von Prometheus Node Exporter (nf_conntrack_count)
  • Alarm bei >80% Nutzung
  • Logging von Drops aktivieren

7. conntrack Tuning Best Practices

  • nf_conntrack_max großzügig dimensionieren für Containerdichte
  • Hashsize proportional zu max Einträgen setzen
  • Timeouts an Applikationsmuster anpassen
  • Monitoring einrichten, Alerts bei Drops konfigurieren
  • Automatisches Cleanup von alten Verbindungen prüfen (conntrack -F nur vorsichtig)

8. Beispiele für High-Load Container Hosts

Beispiel: Host mit 2000 Containern, je 100 TCP-Verbindungen:

nf_conntrack_max=500000
nf_conntrack_buckets=65536
nf_conntrack_tcp_timeout_established=600
nf_conntrack_udp_timeout=30

Dies verhindert table-full Fehler und hält Latenzen gering.

9. Fazit

conntrack ist ein kritischer Bestandteil der Container-Netzwerk-Architektur. Durch gezieltes Tuning von Table Size, Hash und Timeouts lässt sich die Stabilität von Docker Hosts unter hoher Last signifikant verbessern. Monitoring und Alerting sind essentiell, um Engpässe frühzeitig zu erkennen und PMTUD Blackholes, Paketverlust oder TCP-Retransmissions zu vermeiden.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles