기존 VPN을 연결하는 작은 프로그램에는 새 VPN 구현이 아니라 컨트롤러가 필요합니다. 지원되는 엔진이 협상과 터널 트래픽을 맡아야 하고, 여러분의 프로그램은 사용자의 요청을 표현하고 결과를 정직하게 설명해야 합니다. Linux에서는 NetworkManager D-Bus 인터페이스가 그 컨트롤러에 따를 수 있는 구체적인 모델을 제공합니다.

네 가지 점검이 컨트롤러가 저장된 프로필, 활성화 요청, 동작 중인 세션을 혼동하지 않게 막아 줍니다.

점검 하나: 어떤 식별자를 고르는가

프로필 UUID를 영구 식별자로 유지하고 객체 경로가 필요할 때 관리자를 통해 해석하십시오. 표시 이름은 두 프로필이 공유할 수 있고, 실행 시점의 버스 경로는 저장할 만한 합리적인 사용자 설정이 아닙니다. 선택은 여러분의 설정에 적고, 목록에서 어느 항목이 두 번째였는지에 대한 주석에 적지 마십시오.

일치라고 부르기 전에 관리자가 무엇을 돌려주는지 확인하십시오. 더 이상 존재하지 않는 UUID는 조회 실패를 만들고, 그것은 존재하지만 활성화를 거부하는 프로필과 다른 코드 경로입니다.

점검 둘: 활성화 호출이 돌려주는 것

문서화된 활성화 호출은 기존 연결의 객체 경로, 장치 경로, 특정 객체를 받습니다. 그것은 활성 연결 경로를 돌려주며, 그 응답은 준비 완료 결과가 아니라 핸들입니다. 반환값으로 응용 프로그램의 준비 플래그를 세우지 말고, 대신 활성 연결의 상태와 이유를 구독하십시오.

VPN에서는 특정 객체가 활성 기반 연결을 고릅니다. 루트 경로를 넘기면 장치 선택이 NetworkManager에 맡겨지고, 그것은 그 시점의 기본 장치를 고릅니다. 이는 비밀번호 필드가 아니라 라우팅 문맥의 결정이며, 터널이 어느 장치 위에 놓이는지를 바꿉니다.

일반적인 추가 후 활성화 예제를 가져다가 VPN 프로필이 만들어질 것이라 기대하지 마십시오. 문서화된 도우미는 VPN 연결을 제외하므로, 프로필을 준비하거나 가져오는 일은 별도의 검토된 단계입니다. 이는 준비 작업에 연결 버튼에는 없는 승인과 검토가 필요하기 때문에 중요합니다. 가져오기는 자체 로그 줄과 자체 승인자를 가진 관리 작업으로 다루십시오.

점검 셋: 상태를 어떻게 표현하는가

활성 연결은 활성화, 활성, 비활성화, 비활성 상태를 거치고, 이유 필드가 왜 그런지 말해 줍니다. 그 모두를 loggedIn이라는 불리언으로 눌러 담으면 사용자가 필요로 하고 지원 팀이 물을 정보가 사라집니다. 적어도 연결이 대기 중인지, 확립되었는지, 사라졌는지를 보여 주고 실패 사례를 위한 이유 문자열을 보관하십시오.

비동기 응답을 그것을 만든 요청과 연결하십시오. 이전 시도의 늦은 완료가 더 새로운 사용자 동작을 덮어써서는 안 되고, Connect를 두 번 누르는 것은 무시하거나 보이는 정책과 함께 취소 후 재시도로 다루어야 합니다.

점검 넷: 재시작 후에 무슨 일이 일어나는가

관리자가 재시작하거나 컨트롤러가 버스에 다시 연결되면, 관찰된 상태를 소유자로부터 다시 세우십시오. 오래된 객체 경로가 아직 메모리에 있다는 이유로 캐시된 세션을 활성으로 계속 보여 주지 마십시오. 상태 변경 신호는 컨트롤러가 추측 대신 다시 동기화할 수 있도록 존재합니다.

컨트롤러를 닫는 것이 무엇을 뜻하는지 고르십시오. 기계가 소유한 기존 연결을 그대로 두는 것이 옳을 수 있고, 의도적으로 짧게 유지한 세션을 정리하는 것도 옳을 수 있습니다. 기계가 소유한 기존 연결을 그대로 두는 것이 옳을 수 있고, 의도적으로 짧게 유지한 세션을 정리하는 것도 옳을 수 있습니다. 그 소유권 계약은 프로세스 종료가 네트워크 동작을 수행한다고 가정하지 말고 인터페이스에 적으십시오. 사용자가 창을 닫으면 터널이 끊기는지 추측하게 해서는 안 됩니다. 답은 코드 주석에만 두지 말고 인터페이스 문구에 두십시오.

권한과 비밀은 그 주인 곁에 두십시오

권한은 예, auth, 아니요로 돌아오고, 인터페이스는 허용됨, 인증 후 허용됨, 거부됨의 차이를 반영해야 합니다. 컨트롤러를 root로 실행하는 것은 권한 정책을 구현하는 것이 아니라 질문을 없애는 일입니다.

자격 증명은 설정된 인증 방법에 대한 지원되는 비밀 에이전트나 클라이언트 통합에 속합니다. 소스 코드나 인수, 로그에 있는 비밀번호는 지적 사항이며, 로컬 관리 승인은 게이트웨이 인증과 같은 사건이 아닙니다.

마지막으로, 연결 상태는 사용자가 하려는 작업과 별도로 보고하십시오. 사설 이름이나 응용 프로그램을 쓸 수 없는 동안 터널만 활성일 수 있고, 그 두 번째 실패에는 고유한 메시지와 고유한 상태가 필요합니다. 어느 계층이 실패했는지 정확히 말하는 컨트롤러가 VPN이 죽었다고만 말하는 것보다 유용합니다.

관련 글