Egress Path Selection

Usually there are many outgoing ip addresses on proxy machine, and we may provide one to one server port mapping to each of them.

In most cases, we may have one server port mapped to many outgoing ip addresses, and by default using a random selection policy. But sometimes, users may want to specify which outgoing IP address to use. Instead of setting up a lot of servers and escapers that are mapped together, we can use only a single pair of server and escaper with the help of egress path selection.

For path selection to work, the escapers used must support and enable it. Not all escapers support it, see the config documentation for each escaper for confirmation.

server support

custom http header

Only http proxy server can support this.

The supported method is number id.

See path_selection_header for more info.

socks extension

Only socks proxy server can support this.

No implementation for now.

username extension

All servers which support user auth with a username can support this.

The supported method is egress upstream.

See username_params for more info.

user support

User level egress path selection can be enabled via:

selection values

The egress path selection data structure contains many maps.

All of these maps have escaper name as their key, and each escaper will fetch it’s corresponded selection value.

The value types are:

number id

value: map

The value should be a usize value, which will be used as an index.

For escapers with multiple nodes (may be next escapers or ip addresses), the node with the specified index will be used. The value will be wrapped into range 1 - len(nodes). NOTE* the start value is 1, 0 is the same as len(nodes) - 1.

string id

value: map

The value should be a ID string value, and it’s meaning will be different on each type of escaper.

json value

value: map

The value should be a JSON MAP object (or a JSON MAP str in yaml config), and it’s meaning will be different on each type of escaper.

egress upstream

value: map

The value should be a map with the following keys:

  • addr

    value: upstream str

    It will override the upstream address used by the corresponding escaper.

  • resolve_sticky_key

    value: string

    Resolve the upstream domain by using jump consistent hash, and use this value as the hash key.