Een klein programma dat een bestaande VPN verbindt, heeft een controller nodig, geen nieuwe VPN-implementatie. De ondersteunde engine moet de onderhandeling en het tunnelverkeer afhandelen; je programma moet het verzoek van de gebruiker uitdrukken en het resultaat eerlijk uitleggen. Op Linux geeft de NetworkManager D-Bus-interface die controller een concreet model om te volgen.

Vier controles weerhouden de controller ervan een opgeslagen profiel, een activeringsverzoek en een werkende sessie door elkaar te halen.

Controle één: welke identiteit wordt gekozen

Houd de UUID van het profiel als de blijvende identiteit, en los die op via de beheerder wanneer je het objectpad nodig hebt. Een weergavenaam kan door twee profielen worden gedeeld, en een buspad tijdens runtime is geen verstandige gebruikersvoorkeur om op te slaan. Schrijf de keuze op in je eigen configuratie, niet in een commentaar over welk item het tweede in de lijst was.

Controleer wat de beheerder teruggeeft voordat je het een overeenkomst noemt. Een UUID die niet meer bestaat levert een opzoekfout op, en dat is een ander codepad dan een profiel dat bestaat en weigert te activeren.

Controle twee: wat de activeringsaanroep teruggeeft

De gedocumenteerde activeringsaanroep neemt een objectpad van een bestaande verbinding, een apparaatpad en een specifiek object. Hij geeft een pad van een actieve verbinding terug, en dat antwoord is een handvat, geen resultaat over gereedheid. Zet de gereed-vlag van je toepassing niet op basis van de retourwaarde; abonneer je in plaats daarvan op de toestand en de reden van de actieve verbinding.

Voor een VPN kiest het specifieke object de actieve basisverbinding. Wie het wortelpad doorgeeft, laat de keuze van het apparaat aan NetworkManager, dat degene kiest die op dat moment standaard is. Dat is een beslissing over de routeringscontext en geen wachtwoordveld, en het verandert op welk apparaat de tunnel wordt gelegd.

Neem geen algemeen voorbeeld van toevoegen-en-activeren over en verwacht dat het een VPN-profiel maakt. De gedocumenteerde helper sluit VPN-verbindingen uit, dus het inrichten of importeren van het profiel is een aparte, beoordeelde stap. Dat is belangrijk omdat inrichting autorisatie en beoordeling vereist die een verbindingsknop niet biedt. Behandel import als een administratieve handeling met een eigen logregel en een eigen goedkeurder.

Controle drie: hoe de toestand wordt voorgesteld

Een actieve verbinding gaat door activeren, actief, deactiveren en gedeactiveerd, en het redenveld zegt waarom. Al dat in een Booleaanse waarde met de naam loggedIn persen verliest de informatie die de gebruiker nodig heeft en die de ondersteuning zal vragen. Toon ten minste of de verbinding in behandeling, tot stand gebracht of verdwenen is, en bewaar de redenreeks voor het foutgeval.

Koppel asynchrone antwoorden aan het verzoek dat ze heeft veroorzaakt. Een late voltooiing van een ouder poging mag een nieuwere gebruikersactie niet overschrijven, en een dubbele druk op Connect moet ofwel worden genegeerd ofwel worden behandeld als annuleren en opnieuw proberen met een zichtbaar beleid.

Controle vier: wat er na een herstart gebeurt

Wanneer de beheerder opnieuw start of je controller opnieuw verbinding maakt met de bus, bouw de waargenomen toestand dan opnieuw op vanuit de eigenaar. Blijf een gecachte sessie niet als actief tonen omdat een oud objectpad nog in het geheugen staat. De toestandswijzigingssignalen bestaan juist zodat een controller opnieuw kan synchroniseren in plaats van te gissen.

Kies wat het sluiten van de controller betekent. Een bestaande verbinding in eigendom van de machine laten staan kan juist zijn, en een bewust kortstondige sessie afbreken kan dat ook zijn. Een bestaande verbinding in eigendom van de machine laten staan kan juist zijn; een bewust kortstondige sessie afbreken kan dat ook zijn. Schrijf dat eigendomscontract in de interface in plaats van aan te nemen dat het beëindigen van het proces de netwerkactie uitvoert. Gebruikers zouden niet hoeven te gissen of het sluiten van het venster hun tunnel laat vallen. Zet het antwoord in de interfacetekst, niet alleen in een codecommentaar.

Houd bevoegdheid en geheimen bij hun eigenaren

Machtigingen komen terug als ja, auth of nee, en de interface moet het verschil weerspiegelen tussen toegestaan, toegestaan na verificatie en geweigerd. De controller als root laten draaien implementeert geen machtigingsbeleid; het haalt de vraag weg.

Inloggegevens horen bij de ondersteunde geheimagent of clientintegratie voor de geconfigureerde verificatiemethode. Een wachtwoord in broncode, in een argument of in een log is een bevinding, en lokale administratieve autorisatie is niet dezelfde gebeurtenis als verificatie bij de gateway.

Rapporteer ten slotte de verbindingstoestand apart van de taak die de gebruiker wil uitvoeren. Een tunnel kan actief zijn terwijl een privénaam of een toepassing niet beschikbaar blijft, en die tweede fout verdient zijn eigen bericht en zijn eigen status. Een controller die precies zegt welke laag is mislukt, is nuttiger dan een die zegt dat de VPN eruit ligt.

Gerelateerde artikelen