mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-15 10:25:40 +00:00
8f862997eb
* feat: support allocating public IPv6 addresses from a provider Add a provider/leaser architecture for public IPv6 address allocation between nodes in the same network: - A node with `--ipv6-public-addr-provider` advertises a delegable public IPv6 prefix (auto-detected from kernel routes or manually configured via `--ipv6-public-addr-prefix`). - Other nodes with `--ipv6-public-addr-auto` request a /128 lease from the selected provider via a new RPC service (PublicIpv6AddrRpc). - Leases have a 30s TTL, renewed every 10s by the client routine. - The provider allocates addresses deterministically from its prefix using instance-UUID-based hashing to prefer stable assignments. - Routes to peer leases are installed on the TUN device, and each client's own /128 is assigned as its IPv6 address. Also includes netlink IPv6 route table inspection, integration tests, and event-driven route/address reconciliation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
88 lines
1.9 KiB
Protocol Buffer
88 lines
1.9 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
import "common.proto";
|
|
import "acl.proto";
|
|
import "api_instance.proto";
|
|
import "api_manage.proto";
|
|
|
|
package api.config;
|
|
|
|
enum ConfigPatchAction {
|
|
ADD = 0;
|
|
REMOVE = 1;
|
|
CLEAR = 2;
|
|
}
|
|
|
|
message InstanceConfigPatch {
|
|
optional string hostname = 1;
|
|
optional common.Ipv4Inet ipv4 = 2;
|
|
optional common.Ipv6Inet ipv6 = 3;
|
|
repeated PortForwardPatch port_forwards = 4;
|
|
optional AclPatch acl = 5;
|
|
repeated ProxyNetworkPatch proxy_networks = 6;
|
|
repeated RoutePatch routes = 7;
|
|
repeated ExitNodePatch exit_nodes = 8;
|
|
repeated UrlPatch mapped_listeners = 9;
|
|
repeated UrlPatch connectors = 10;
|
|
optional bool ipv6_public_addr_provider = 11;
|
|
optional bool ipv6_public_addr_auto = 12;
|
|
optional string ipv6_public_addr_prefix = 13;
|
|
}
|
|
|
|
message PortForwardPatch {
|
|
ConfigPatchAction action = 1;
|
|
common.PortForwardConfigPb cfg = 2;
|
|
}
|
|
|
|
message StringPatch {
|
|
ConfigPatchAction action = 1;
|
|
string value = 2;
|
|
}
|
|
|
|
message UrlPatch {
|
|
ConfigPatchAction action = 1;
|
|
common.Url url = 2;
|
|
}
|
|
|
|
message AclPatch {
|
|
optional acl.Acl acl = 1;
|
|
repeated StringPatch tcp_whitelist = 2;
|
|
repeated StringPatch udp_whitelist = 3;
|
|
}
|
|
|
|
message ProxyNetworkPatch {
|
|
ConfigPatchAction action = 1;
|
|
common.Ipv4Inet cidr = 2;
|
|
optional common.Ipv4Inet mapped_cidr = 3;
|
|
}
|
|
|
|
message RoutePatch {
|
|
ConfigPatchAction action = 1;
|
|
common.Ipv4Inet cidr = 2;
|
|
}
|
|
|
|
message ExitNodePatch {
|
|
ConfigPatchAction action = 1;
|
|
common.IpAddr node = 2;
|
|
}
|
|
|
|
message PatchConfigRequest {
|
|
InstanceConfigPatch patch = 1;
|
|
api.instance.InstanceIdentifier instance = 2;
|
|
}
|
|
|
|
message PatchConfigResponse {}
|
|
|
|
message GetConfigRequest {
|
|
api.instance.InstanceIdentifier instance = 1;
|
|
}
|
|
|
|
message GetConfigResponse {
|
|
api.manage.NetworkConfig config = 1;
|
|
}
|
|
|
|
service ConfigRpc {
|
|
rpc PatchConfig(PatchConfigRequest) returns (PatchConfigResponse);
|
|
rpc GetConfig(GetConfigRequest) returns (GetConfigResponse);
|
|
}
|