Networking

Le cluster DNS/DHCP centralise la resolution de noms
et l'attribution d'adresses IP de la flotte. Il s'appuie sur
central-dnsdhcp pour le CRUD reseau et sur
CoreDNS pour la resolution locale.
Saturn agit comme orchestrateur: il recupere les donnees des nodes (inventaire, IP, hostname, MAC), puis appelle DNS/DHCP en gRPC pour convertir ces informations en enregistrements DNS et reservations DHCP.
Source metier: Saturn (etat et inventaire de flotte).
Source de verite reseau: central-dnsdhcp.
Resolution locale: CoreDNS recharge regulierement les donnees synchronisees.
Canaux de communication
leukOS combine des canaux complementaires entre UI, central et nodes: GraphQL, REST, gRPC et MQTT.
MQTT bus local node
Le broker Mosquitto ecoute sur 127.0.0.1:1883 et transporte la
telemetrie locale node.
| Topic | Sens | Contenu |
|---|---|---|
openautomation/<node_id>/status | node -> central | LWT online / offline (retenu). |
openautomation/<node_id>/state | node -> central | Etat JSON periodique (~2 s). |
openautomation/<node_id>/cmd/relay/<id> | central/local -> node | Commande relais (compatibilite / usage local). |
openautomation/<node_id>/cmd/valve/<id> | central/local -> node | Commande vanne (compatibilite / usage local). |
Dans le flux principal actuel, Saturn pilote les nodes via gRPC puis HTTP fallback. MQTT reste disponible pour la telemetrie et certains usages de compatibilite.
Resume des ports
| Service | Port | Protocole |
|---|---|---|
| API locale node | 8080 | HTTP/REST |
| Daemon node | 19080 / 9080 | gRPC |
| Mosquitto | 1883 | MQTT |
| Venus | 8135 | HTTP/GraphQL |
| Saturn | 8130 | HTTP/REST |
| Mercure | 8140 | HTTP/REST |
| central-dnsdhcp | 9150 | gRPC |
| PostgreSQL | 5432 | TCP |
| Elasticsearch | 9200 | HTTP |
Flux DNS/DHCP detaille
Sequence fonctionnelle:
- Saturn collecte/maintient les metadonnees node (id, hostname, ip, mac).
- Lors d'un upsert node ou d'un changement reseau, Saturn mappe ces donnees.
- Saturn appelle central-dnsdhcp en gRPC pour ecrire DNS et DHCP.
- La couche DNS est rechargee avec les nouveaux enregistrements.
Conversion des donnees node vers DNS/DHCP
Exemple de mapping metier applique dans Saturn:
type Node struct {
ID string
Hostname string
IP string
MAC string
}
func mapNodeToNetworkRecords(n Node) (dnsHost string, dnsIP string, dhcpMAC string, dhcpIP string) {
// Convention flotte: hostname.leukos.lan pour DNS local
dnsHost = n.Hostname + ".leukos.lan"
dnsIP = n.IP
dhcpMAC = n.MAC
dhcpIP = n.IP
return
}
Exemple d'appel gRPC Saturn -> DNSDHCP:
func syncNodeNetwork(ctx context.Context, c dnspb.DNSDHCPServiceClient, n Node) error {
dnsHost, dnsIP, dhcpMAC, dhcpIP := mapNodeToNetworkRecords(n)
if _, err := c.UpsertDnsRecord(ctx, &dnspb.UpsertDnsRecordRequest{
Hostname: dnsHost,
Ip: dnsIP,
Enabled: true,
}); err != nil {
return err
}
_, err := c.UpsertDhcpRecord(ctx, &dnspb.UpsertDhcpRecordRequest{
ClientId: n.ID,
Mac: dhcpMAC,
Ip: dhcpIP,
Hostname: n.Hostname,
Enabled: true,
})
return err
}
Exemple REST cote Saturn pour declencher une synchronisation DNS:
curl -X POST http://central:8130/api/dns/sync
API reseau exposees par Saturn
| Méthode | Chemin | Description |
|---|---|---|
GET | /api/dns/records | Liste les records DNS. |
POST | /api/dns/records/upsert | Cree/met a jour un record DNS. |
DELETE | /api/dns/records/{hostname} | Supprime un record DNS. |
POST | /api/dns/sync | Regenere le jeu DNS local. |
GET | /api/dhcp/records | Liste les baux DHCP. |
POST | /api/dhcp/records/upsert | Cree/met a jour un bail DHCP. |
DELETE | /api/dhcp/records/{client_id} | Supprime un bail DHCP. |
WireGuard (fusion)
WireGuard fait partie de la strategie networking de leukOS: tunnel VPN au boot, liaison securisee site vers central, et acces d'exploitation distant.
Ce qui est configure
BR2_PACKAGE_WIREGUARD_TOOLS=ydans les defconfigs Buildroot.BR2_PACKAGE_IPROUTE2=yetBR2_PACKAGE_BASH=y(requis pourwg-quick).- Script init SysV
S89wireguardexecute avant les services applicatifs. - Modele de conf:
/etc/wireguard/wg0.conf.example.
Activation rapide
cp /etc/wireguard/wg0.conf.example /etc/wireguard/wg0.conf
chmod 600 /etc/wireguard/wg0.conf
/etc/init.d/S89wireguard start
ip addr show wg0
wg show
Exemple minimal wg0.conf
[Interface]
Address = 10.66.0.2/24
PrivateKey = <node_private_key_base64>
ListenPort = 51820
[Peer]
PublicKey = <hub_public_key_base64>
PresharedKey = <preshared_key_base64>
AllowedIPs = 10.66.0.0/24
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
Depannage rapide
- interface absente: verifier
wg0.confet permissions600. - pas de handshake: verifier endpoint, port, NAT/firewall et cles.
wg-quick: not found: reconstruire une image avec les options Buildroot a jour.