diff --git a/README.md b/README.md index 67543dd..293c34e 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,28 @@ Lain Uplink eXchange ______________ ______________ ``` -# Node +## Node Each node receives heartbeats from different hosts, registering their state, name, WAN IP and uptime over Exterior connections. Each host can request information about other host only over interior connection. The state must be kept same across all nodes, so fail-over can be configured. Node can also provide DNS server front-end for ease integration into DNS resolvers such as unbound, dnsmasq or systemd-resolved. -# Exterior and Interior +## Exterior and Interior Exterior connections are made over low-trust medium, such as WAN internet, therefore encryption layer must protect from replay attacks and ensure unique packets. Interior connections are made over high-trust medium, like VPN tunnels, such as OpenVPN or Tailscale. Only interior connection can be used to sync state between nodes. -# Host +## Host Each host "heartbeats" it's state - such as WAN IP, uptime, resource usage. Host can heartbeat over exterior and interior connections, but information request can only be made through interior, and state must be synced only over interior, since, at moment of request or sync, the exterior uplink information, such as WAN IP, may not be availble, thus, interior connection must be always available and low-cost. + +## State + +Host's state consists of: + - Hostname(+.lux) + - WAN IP + +Node's state is table of hosts' states + their last heartbeat time. +Node state must also include generation ID, which must be guaranteed to be unique in scope of last 128 generations. +A new generation should only happen when any of the hosts has new heartbeat.