Declare dans opnsense.yml du site, rendu par le contrat (ip_publique), valide (une par locataire, jamais celle du site), compare aux alias du WAN par frontiere-plan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Le pool d'adresses publiques du site : une par locataire, jamais celle du site.
|
|
|
|
POURQUOI (2026-09-29). C'est le SITE qui attribue a chaque locataire son adresse publique,
|
|
tiree d'un pool declare dans `opnsense.yml` ; le locataire la recoit par le contrat du site.
|
|
Avant, une seule adresse (`ip_publique_site`) etait recopiee a la main chez les deux
|
|
locataires. Une attribution fautive ne se verrait qu'au jour de l'exposition : deux
|
|
locataires sur la meme adresse, ou un web frontal sur l'adresse de la frontiere.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
from site_intrants import ip_publique_de, valider_pool # noqa: E402
|
|
|
|
WAN = "69.70.26.10"
|
|
LOCATAIRES = ["OPS-A", "OPS-B"]
|
|
|
|
|
|
def main() -> int:
|
|
echecs = 0
|
|
sain = {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-B", "69.70.26.13": "libre"}
|
|
if valider_pool(sain, WAN, LOCATAIRES):
|
|
print(f"ECHEC pool sain refuse : {valider_pool(sain, WAN, LOCATAIRES)}")
|
|
echecs += 1
|
|
if ip_publique_de("OPS-B", sain) != "69.70.26.12" or ip_publique_de("OPS-C", sain) != "":
|
|
print("ECHEC ip_publique_de ne rend pas l'attribution du pool")
|
|
echecs += 1
|
|
cas = {
|
|
"deux adresses pour un locataire": {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-A"},
|
|
"adresse du site attribuee": {WAN: "OPS-A"},
|
|
"locataire inconnu du site": {"69.70.26.11": "OPS-Z"},
|
|
"adresse privee": {"10.0.0.5": "OPS-A"},
|
|
"adresse invalide": {"pas-une-ip": "OPS-A"},
|
|
}
|
|
for nom, pool in cas.items():
|
|
if not valider_pool(pool, WAN, LOCATAIRES):
|
|
print(f"ECHEC « {nom} » accepte")
|
|
echecs += 1
|
|
if echecs:
|
|
return 1
|
|
print(f"OK — pool sain accepte ; {len(cas)} fautes refusees ; attribution lue par locataire.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|