ostp/ostp-server/src
ospab 245e79215c feat(server): multi-address egress — global source IP plus per-rule send_from
A server with two IPs (one burned by Google, one fresh) needs to control which
address traffic leaves from, per destination — direct from the clean IP to a
picky site, via the proxy from the other for everything else.

- Receive: already selectable via the listen addresses.
- Send (global): server config `bind_ip` binds every outbound socket to a chosen
  source address (threaded through run_server → Router → the direct/proxy/UDP
  connect paths, which already supported a bind_ip).
- Send (per rule): outbound rules gain `send_from` — a source IP that overrides
  the global bind_ip when that rule matches. select_outbound_action now returns
  the matched rule's source alongside its action, and both the direct and proxy
  connect paths (TCP and the SOCKS5 UDP path) bind to rule.send_from, falling
  back to the global bind_ip. So "direct from 1.2.3.4 to youtube, proxy from
  5.6.7.8 otherwise" is expressible.

New fields default (send_from: None), so existing configs are unaffected and the
migrator backfills them into canonical form. Fixed two pre-existing test call
sites that predated the bind_ip parameter.
2026-08-25 02:23:24 +03:00
..
transport fix(server): UoT — set TCP_NODELAY + tear down half-open connections 2026-07-12 01:25:34 +03:00
api.rs feat(server): multi-address egress — global source IP plus per-rule send_from 2026-08-25 02:23:24 +03:00
dispatcher.rs feat(congestion): actually pace sends instead of releasing whole windows 2026-07-31 19:18:42 +03:00
dns.rs fix(server): rate-limit the (currently unwired) open UDP DNS listener 2026-07-18 17:42:49 +03:00
fallback.rs Remove stealth_port entirely and integrate fallback into UoT HTTP handler 2026-06-10 02:26:13 +03:00
lib.rs feat(server): multi-address egress — global source IP plus per-rule send_from 2026-08-25 02:23:24 +03:00
outbound.rs feat(server): multi-address egress — global source IP plus per-rule send_from 2026-08-25 02:23:24 +03:00
relay.rs feat(server): multi-address egress — global source IP plus per-rule send_from 2026-08-25 02:23:24 +03:00
relay_node.rs refactor(relay)!: forward transparently instead of re-authenticating clients 2026-08-03 18:49:57 +03:00
router.rs feat(server): multi-address egress — global source IP plus per-rule send_from 2026-08-25 02:23:24 +03:00
signal.rs
tui.rs