docs: [#407] submit UDP1 tracker to newTrackon — complete#408
Merged
josecelano merged 14 commits intomainfrom Mar 6, 2026
Merged
docs: [#407] submit UDP1 tracker to newTrackon — complete#408josecelano merged 14 commits intomainfrom
josecelano merged 14 commits intomainfrom
Conversation
- Add issue spec docs/issues/407-submit-udp1-tracker-to-newtrackon.md explaining why UDP1 submission failed (BEP 34 + one-IP-per-tracker policy) and the full implementation plan with documentation tasks distributed across each phase. - Add docs/deployments/hetzner-demo-tracker/post-provision/newtrackon-prerequisites.md with step-by-step instructions: BEP 34 TXT records, new floating IP provisioning, netplan configuration, DNS update, and retry submission. - Update tracker-registry.md to document what was actually submitted (HTTP1 accepted, UDP1 pending), state the newTrackon prerequisites explicitly, and replace the single-tracker section with a full submission history table. - Update deployment README.md and post-provision README.md to reference the new document. - Add 'newtrackon' to project-words.txt.
…o http1-ipv{4,6}
The original names were too generic. Renamed in Hetzner Console to
'http1-ipv4' and 'http1-ipv6' to clearly distinguish them from the
upcoming UDP1 floating IPs that will be provisioned in Phase 2.
- Update prerequisites.md table and checklist with the new names
- Add note explaining the rename and linking to issue #407
- Add screenshot of the renamed IPs in the Hetzner Console
…uisites New floating IPs provisioned in Hetzner (region nbg1) and assigned to the demo server: udp1-ipv4: 116.202.177.184 udp1-ipv6: 2a01:4f8:1c0c:828e::1 - Fill in real IPs in newtrackon-prerequisites.md (Step 2 and Step 3 netplan stanza) - Mark Step 2 as done (✅) with date - Update status table (provisioned + assigned rows now done) - Add screenshot of all four floating IPs in the Hetzner Console - Mark Phase 2 tasks (2.1–2.4) and Goal as completed in issue spec
Add a 'DNS State Before Changes' section to newtrackon-prerequisites.md capturing the baseline before modifying DNS records: - Screenshot of the Hetzner DNS panel (before) - dig output showing all six subdomains → same two shared IPs - Confirmation that no TXT records exist yet - Expected-state table showing what each subdomain should look like after the udp1 A/AAAA records are updated and BEP 34 TXT records added
Added directly in the Hetzner DNS panel (TTL 300): http1 TXT "BITTORRENT TCP:443" udp1 TXT "BITTORRENT UDP:6969" Verified with dig - both records resolve correctly. - Mark Step 1 as done (✅) in newtrackon-prerequisites.md with the actual dig verification output - Correct TTL from 3600 to 300 in the curl reference examples (Step 4) - Update status table (BEP 34 rows now done) - Mark Phase 1 tasks (1.1–1.5) and Goal as completed in issue spec
… Phase 3 completion
…stigation and fix
Member
Author
|
ACK 2fd3a23 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Resolves #407 — UDP1 tracker is now listed on newTrackon.
This PR documents the complete process: two newTrackon prerequisites that were missed, the
networking blockers discovered during submission, and the full investigation and fix for each.
What Was Done
Phase 1 ✅ — BEP 34 DNS TXT Records
newTrackon requires a
TXTrecord on the tracker domain announcing its protocol and port(BEP 34).
http1.torrust-tracker-demo.com TXT "BITTORRENT TCP:443"udp1.torrust-tracker-demo.com TXT "BITTORRENT UDP:6969"dig TXTPhase 2 ✅ — Provision New Floating IPs
newTrackon enforces one unique IP per tracker. The UDP1 subdomain was sharing IPs with HTTP1.
udp1-ipv4:116.202.177.184udp1-ipv6:2a01:4f8:1c0c:828e::1Phase 3 ✅ — Configure All Floating IPs via Netplan
All four floating IPs (existing HTTP1 + new UDP1) are now persistent in
/etc/netplan/60-floating-ip.yamlwithvalid_lft forever.Phase 4 ✅ — Update DNS A/AAAA for UDP1
udp1A record:116.202.176.169→116.202.177.184udp1AAAA record:2a01:4f8:1c0c:9aae::1→2a01:4f8:1c0c:828e::1dns-setup.mdto reflect the changePhase 5 ✅ — Submission Accepted (Attempt 3)
Three submission attempts were required. Both IPv4 always worked fine; the issue was
IPv6-specific.
Attempts 1 & 2 — Rejected (UDP timeout)
newTrackon probed via IPv6 (
2a01:4f8:1c0c:828e::1) and received no response.Attempt 3 — Accepted ✅
Root Causes Fixed
Root Cause 1 — ufw blocking IPv6 UDP 6969 (primary)
tcpdumpduring a probe showed packets arriving ateth0but no replies leaving — meaning thecontainer never processed them. Checking ufw revealed
6969/udpwas absent from the allow list.Docker bypasses the iptables
INPUTchain for IPv4 published ports via DNAT rules — which iswhy IPv4 always worked. But Docker does not manage
ip6tables, so ufw'sdefault: deny (incoming)silently dropped all IPv6 UDP 6969 packets.Fix:
The
ufwrule is persistent — stored in/etc/ufw/and survives reboot.Root Cause 2 — asymmetric routing (secondary)
Without policy-based routing, the kernel routes replies via the default route — packets leave
via the primary server IP, not the floating IP the probe arrived on. newTrackon discards replies
with a mismatched source.
Fix — two custom routing tables, one per floating IP:
These were initially applied at runtime, then persisted via netplan (see below).
Persisting Policy Routing via Netplan
The server has two netplan files:
50-cloud-init.yaml60-floating-ip.yamlThe
routing-policyand per-tableroutesstanzas were added to60-floating-ip.yaml:Applied with
sudo netplan apply. Rules verified active withip rule list/ip -6 rule list.Full investigation:
ipv6-udp-tracker-issue.mdFiles Changed
docs/deployments/hetzner-demo-tracker/post-provision/ipv6-udp-tracker-issue.mddocs/deployments/hetzner-demo-tracker/post-provision/newtrackon-prerequisites.mddocs/deployments/hetzner-demo-tracker/post-provision/dns-setup.mddocs/deployments/hetzner-demo-tracker/post-provision/README.mddocs/deployments/hetzner-demo-tracker/tracker-registry.mddocs/deployments/hetzner-demo-tracker/README.mddocs/deployments/hetzner-demo-tracker/prerequisites.mddocs/issues/407-submit-udp1-tracker-to-newtrackon.mddocs/deployments/hetzner-demo-tracker/media/newtrackon-submitted-udp1-accepted.pngdocs/deployments/hetzner-demo-tracker/media/newtrackon-home-three-trackers-listed.pngproject-words.txtnewtrackon,ulnp,UNCONN,tcpdump,flowlabel,hlim,DNAT,macaddressAcceptance Criteria Status
digudp1.torrust-tracker-demo.comresolves to new IPsudp://udp1.torrust-tracker-demo.com:6969/announcelisted on newTrackonnewtrackon-prerequisites.mddocuments prerequisites clearlytracker-registry.mdupdated with final submission status