누군가 VPN에 머신이 몇 대 있는지 묻고, 증거로 상태 파일을 내민다. 이 파일은 더 좁은 질문에 답한다. 이 스냅숏에 세션이 몇 개 있으며 서버가 어떤 가상 주소를 라우팅하는가. 두 질문 사이의 간극이 대부분의 보고 실수가 사는 곳이며, 그 간극을 메우는 일은 파일 자체의 헤더를 읽는 데서 시작된다.

스냅숏에 실제로 들어 있는 것

이 파일은 해당 서버 인스턴스에 상태 출력이 구성되었을 때 일정 간격으로 기록되므로, 실시간 피드가 아니라 주기적인 그림이다. 각 섹션은 세션과 내부 라우팅 상태를 따로 나열하고, 형식 버전이 열 배치를 결정한다.

status /run/openvpn/office.status 30
status-version 3

버전 3은 헤더 행이 있는 탭 구분 필드를 쓰고, 오래된 형식은 다르며 이후 버전은 필드를 추가할 수 있다. 열 번호를 하드코딩하는 대신 헤더를 읽어라. 위치를 가정한 스크립트는 다음 업그레이드에서 조용히 깨진다.

RecordWhat it describesWhat it cannot tell you
Client listA session in this snapshotHow many people or machines that session represents
Real addressThe outer peer address and portWhich device is behind it
Routing rowsVirtual addresses and route ownershipWhich downstream hosts are alive

세션을 세라, 사람이나 머신이 아니라

사이트 연결 하나가 그 뒤의 여러 승인된 머신의 트래픽을 실어 나를 수 있다. 한 사람도 노트북과 휴대폰에서 동시에 둘 이상의 세션을 가질 수 있다. 어느 패턴도 개수에는 드러나지 않으므로, 연결된 사용자는 단위를 정의한 뒤에야 의미가 있다. 누군가 세기 시작하기 전에 보고서에 어떤 단위가 필요한지 물어라.

그 숫자가 라이선스나 용량에 중요하다면 보고서와 같은 문서에서 단위를 정의하라. 세션, 신원, 장치 중 무엇을 세는지 밝히지 않은 보고서는 독자가 기대한 단위로 읽힌다.

바깥 주소는 식별자가 아니다

실제 주소 필드는 서버가 보는 피어 주소와 포트다. 번역된 공인 주소 하나 뒤의 여러 클라이언트가 그 주소를 공유하므로, 그것으로 묶으면 무관한 세션이 합쳐진다. 포트도 연결마다 바뀌기에 이 쌍은 안정적인 키로 쓸 수 없다. 그렇게 묶은 보고서는 정밀해 보이지만 틀렸다.

묶을 때는 실효 클라이언트 신원을 쓰고, 주소는 전송 세부 정보로 다뤄라. 두 행이 같은 신원을 공유하면 보통 중복 레코드가 아니라 동시 세션을 뜻한다.

라우팅 행은 호스트 목록이 아니다

라우팅 항목은 한 피어가 책임지는 서브넷을 지목할 수 있고, 서브넷은 그 호스트의 목록이 아니다. 서버는 그 범위를 특정 세션으로 보내야 한다는 것은 알지만, 그 머신 중 어느 것이 켜져 있고 애플리케이션에 인증되었으며 누군가에게 쓸모 있는지는 전혀 모른다. 라우팅 표는 도달 가능성을 설명하지, 점유를 설명하지 않는다. 이 차이가 VPN이 자산 목록 질문에 답할 수 없는 이유 전부다.

여러 행이 같은 피어를 가리킬 수도 있다. 사이트가 둘 이상의 범위를 광고할 수 있기 때문이다. 행을 세고 그 결과를 장치 수라고 부르면 배포 규모를 임의의 배수로 부풀린다.

요구가 정말 자산 목록이라면 그 네트워크를 소유한 목록 프로세스를 써라. VPN은 어느 피어가 경로를 나르는지 식별할 수 있고, 그것은 그 뒤에 어떤 호스트가 있는지와는 다른 사실이다.

나이, 권한, 실시간 보기

모든 답변에 파일의 수정 시각을 함께 붙여라. 몇 시간 전에 멈춘 서버는 마지막 스냅숏을 그대로 남기며, 최신인 척하는 낡은 파일은 보고서가 없는 것보다 나쁘다.

디렉터리는 존재해야 하고 서비스가 실제로 실행되는 계정으로 쓸 수 있어야 한다. 보안 강화 작업 뒤에 잊기 쉽다. 파일에는 보통 이름과 주소가 들어 있으므로 웹 서버가 제공할 수 있는 아무 곳이 아니라 관리용 위치에 두어라. 권한은 당신의 셸이 아니라 서비스 계정에서 확인하라. 조용히 갱신을 멈춘 스냅숏은 조용한 네트워크와 똑같이 보인다.

이벤트 기반 요구에는 더 빠른 폴링 대신 지원되는 관리 인터페이스를 써라. 그 인터페이스를 메트릭이 아니라 제어로 다루고, 세션을 세기 위해서만 인터넷에 노출하지 마라.

관련 글