The subscription page leaked an inbound's server-side Listen IP into the
client-facing URLs when a bind address was set:
- Per-config links: resolveInboundAddress returned the bind Listen IP
(loopback/private/public alike) instead of the host the subscriber
reached the panel on. It now returns the node address for node-managed
inbounds, otherwise the subscriber host; the bind Listen is ignored
(External Proxy remains the way to advertise a specific endpoint).
- Subscription Copy URL (SUB/JSON/CLASH): BuildURLs composed the base
differently from the panel's Client Information page and never
normalized the request host, so a loopback/bind request leaked the raw
IP. The composition is extracted into the shared
SettingService.BuildSubURIBase, used by both the panel and the sub page
so they render identically, and fed the already-normalized subscriber
host.