Podłączanie małego kontrolera do VPN w NetworkManagerze
Aktywacja zwraca uchwyt, nie gotową sesję. Trzymaj profil, żądanie i aktywne połączenie osobno, a po restarcie odtwórz stan.
Mały program, który łączy istniejący VPN, potrzebuje kontrolera, a nie nowej implementacji VPN. Obsługiwany silnik powinien zajmować się negocjacją i ruchem tunelu; twój program powinien wyrażać żądanie użytkownika i uczciwie wyjaśniać wynik. W Linuksie interfejs NetworkManager D-Bus daje temu kontrolerowi konkretny model do naśladowania.
Cztery kontrole powstrzymują kontroler przed pomyleniem zapisanego profilu, żądania aktywacji i działającej sesji.
Kontrola pierwsza: która tożsamość jest wybierana
Trzymaj UUID profilu jako trwałą tożsamość i rozwiązuj go przez menedżera, gdy potrzebujesz ścieżki obiektu. Nazwę wyświetlaną mogą dzielić dwa profile, a ścieżka magistrali w czasie działania nie jest rozsądną preferencją użytkownika do zapisania. Zapisz wybór we własnej konfiguracji, a nie w komentarzu o tym, który wpis był drugi na liście.
Sprawdź, co zwraca menedżer, zanim nazwiesz to dopasowaniem. UUID, który już nie istnieje, daje błąd wyszukiwania, a to inna ścieżka kodu niż profil, który istnieje i odmawia aktywacji.
Kontrola druga: co zwraca wywołanie aktywacji
Udokumentowane wywołanie aktywacji przyjmuje ścieżkę obiektu istniejącego połączenia, ścieżkę urządzenia i konkretny obiekt. Zwraca ścieżkę aktywnego połączenia, a ta odpowiedź jest uchwytem, a nie wynikiem gotowości. Nie ustawiaj flagi gotowości aplikacji na podstawie zwróconej wartości; zamiast tego subskrybuj stan i powód aktywnego połączenia.
Dla VPN konkretny obiekt wybiera aktywne połączenie bazowe. Przekazanie ścieżki głównej zostawia wybór urządzenia NetworkManagerowi, który wybiera to, co jest aktualnie domyślne. To decyzja o kontekście routingu, a nie pole hasła, i zmienia, na którym urządzeniu kładziony jest tunel.
Nie bierz ogólnego przykładu dodawania i aktywacji i nie oczekuj, że utworzy profil VPN. Udokumentowany pomocnik wyklucza połączenia VPN, więc przygotowanie lub import profilu to osobny, sprawdzony krok. Ma to znaczenie, bo przygotowanie wymaga autoryzacji i przeglądu, których przycisk połączenia nie daje. Traktuj import jako działanie administracyjne z własnym wierszem dziennika i własnym zatwierdzającym.
Kontrola trzecia: jak przedstawiany jest stan
Aktywne połączenie przechodzi przez aktywację, aktywne, dezaktywację i dezaktywowane, a pole powodu mówi dlaczego. Wciśnięcie tego wszystkiego w wartość logiczną o nazwie loggedIn traci informacje, których potrzebuje użytkownik i o które zapyta wsparcie. Pokazuj przynajmniej, czy połączenie oczekuje, jest nawiązane czy zniknęło, i zachowaj ciąg powodu dla przypadku awarii.
Wiąż asynchroniczne odpowiedzi z żądaniem, które je wytworzyło. Późne zakończenie starszej próby nie może nadpisać nowszej czynności użytkownika, a podwójne naciśnięcie Connect powinno być ignorowane albo traktowane jako anulowanie i ponowna próba z widoczną polityką.
Kontrola czwarta: co dzieje się po restarcie
Gdy menedżer się restartuje albo twój kontroler ponownie łączy się z magistralą, odtwórz obserwowany stan od właściciela. Nie pokazuj dalej zbuforowanej sesji jako aktywnej tylko dlatego, że stara ścieżka obiektu wciąż jest w pamięci. Sygnały zmiany stanu istnieją właśnie po to, by kontroler mógł się zresynchronizować zamiast zgadywać.
Wybierz, co oznacza zamknięcie kontrolera. Pozostawienie istniejącego połączenia należącego do maszyny może być słuszne, a rozebranie celowo krótkotrwałej sesji również może być słuszne. Pozostawienie istniejącego połączenia należącego do maszyny może być słuszne; rozebranie celowo krótkotrwałej sesji również może być słuszne. Zapisz tę umowę własności w interfejsie, zamiast zakładać, że wyjście procesu wykonuje akcję sieciową. Użytkownicy nie powinni zgadywać, czy zamknięcie okna zerwie ich tunel. Umieść odpowiedź w tekście interfejsu, a nie tylko w komentarzu w kodzie.
Zatrzymaj uprawnienia i sekrety u ich właścicieli
Uprawnienia wracają jako tak, auth lub nie, a interfejs powinien odzwierciedlać różnicę między dozwolonym, dozwolonym po uwierzytelnieniu i odmówionym. Uruchamianie kontrolera jako root nie wdraża polityki uprawnień; usuwa pytanie.
Dane logowania należą do obsługiwanego agenta sekretów lub integracji klienta dla skonfigurowanej metody uwierzytelniania. Hasło w kodzie źródłowym, w argumencie lub w dzienniku jest ustaleniem, a lokalna autoryzacja administracyjna nie jest tym samym zdarzeniem co uwierzytelnienie na bramie.
Na koniec raportuj stan połączenia osobno od zadania, które użytkownik chce wykonać. Tunel może być aktywny, podczas gdy prywatna nazwa lub aplikacja pozostają niedostępne, a ta druga awaria zasługuje na własny komunikat i własny status. Kontroler, który dokładnie mówi, która warstwa zawiodła, jest użyteczniejszy niż ten, który mówi, że VPN leży.