Skip to content

docs: add blog post on nf_conntrack overflow with Docker UDP tracker#193

Merged
josecelano merged 1 commit intodevelopfrom
docs/nf-conntrack-overflow-blog-post
Apr 27, 2026
Merged

docs: add blog post on nf_conntrack overflow with Docker UDP tracker#193
josecelano merged 1 commit intodevelopfrom
docs/nf-conntrack-overflow-blog-post

Conversation

@josecelano
Copy link
Copy Markdown
Member

Summary

Adds a new blog post documenting the nf_conntrack table exhaustion problem that caused UDP tracker downtime on both the DigitalOcean and Hetzner Torrust demos.

What the post covers

  • Mechanism — how Docker bridge DNAT forces connection tracking for UDP flows, and why the table fills under tracker load
  • Symptom — UDP availability drops while HTTP stays healthy, self-recovering outages, application log completely silent
  • Diagnosisdmesg, /proc/sys/net/netfilter/nf_conntrack_count, conntrack -S
  • Our experience — three incidents across two demos (DigitalOcean × 2, Hetzner × 1); post-fix UDP uptime confirmed at 99.9%
  • The fix — three-parameter sysctl config (nf_conntrack_max, udp_timeout, udp_timeout_stream) + module pre-load for reboot persistence
  • Hash table sizingnf_conntrack_buckets / hashsize to avoid O(n) lookup degradation after raising the ceiling
  • Reboot persistence trap — why sysctl settings silently vanish after reboot without modules-load.d
  • Alternative approaches — host networking (--network=host), NOTRACK rules (with real-world failure story from Fix nf_conntrack table overflow causing UDP packet drops torrust-demo#72), and macvlan
  • Monitoringconntrack -S early_drop counter, 80% fill-level alerting rule
  • Independent documentation — links to the Aquatic tracker Docker guide that covers the same problem

Related issues

Documents the mechanism, diagnosis, fix, and alternatives for the
nf_conntrack table exhaustion problem that caused UDP tracker downtime
on both the DigitalOcean and Hetzner demos.

Covers:
- How Docker bridge DNAT forces connection tracking for UDP
- The three-parameter sysctl fix (nf_conntrack_max, udp_timeout,
  udp_timeout_stream) and module pre-load for reboot persistence
- Hash table sizing (nf_conntrack_buckets / hashsize)
- Alternative approaches: host networking, NOTRACK, macvlan
- Real-world NOTRACK failure on torrust/torrust-demo#72
- Monitoring commands (conntrack -S, early_drop, 80% alert)
- Links to independent documentation (Aquatic tracker guide)

Fixes confirmed: post-fix UDP uptime 99.9% on Hetzner demo.
@josecelano
Copy link
Copy Markdown
Member Author

ACK 2762210

@josecelano josecelano merged commit fc7de5a into develop Apr 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New article: nf_conntrack overflow causes intermittent UDP tracker downtime with Docker

1 participant