ITADN

Directory ignores --serverpublicip for servers behind a UDP proxy or load balancer

#3694Closedstefan1000 创建于 2026-05-17
bug
S
stefan1000commented
**Describe the bug** `--serverpublicip` is ignored when a server registers through a UDP proxy or load balancer. The directory always advertises the backend's UDP source IP instead of the declared one, making the server unreachable for clients. Seems historically `--serverpublicip` was only added for the same network use case, but I think it should be a general option to register with a given public IP. **To Reproduce** 1. Put a Jamulus server behind a UDP proxy/LB 2. Register with a directory using `--serverpublicip <your-public-ip>` 3. Check what IP clients receive in the server list — it's the backend source IP, not the one you passed **Expected behavior** Clients get the IP from `--serverpublicip`. **Screenshots** N/A **Operating system** N/A — directory-side logic issue, OS independent **Version of Jamulus** 3.11 **Additional context** Root cause is in `CServerListManager::RetrieveAll`: the `wantHostAddr` condition always resolves to true for an external client + external server, so `LHostAddr` (where `--serverpublicip` ends up) is never consulted. `LHostAddr` should take precedence when it is set to a public IP, bypassing the normal routing logic. Something like an "hasExplicitPublicOverride" (serverlist.cpp): ``` bool hasExplicitPublicOverride = siCurListEntry.LHostAddr.InetAddr != CHostAddress().InetAddr && !NetworkUtil::IsPrivateNetworkIP ( siCurListEntry.LHostAddr.InetAddr ); bool wantHostAddr = !hasExplicitPublicOverride && ( clientIsInternal || ( !serverIsInternal && InetAddr.InetAddr != siCurListEntry.HostAddr.InetAddr ) );```
关闭于 2026-05-20 5 条评论