Libertine이 Ubuntu Touch에 기기 전체 VPN을 제공할까?
컨테이너 안의 데스크톱 패키지는 기기 전체 터널과는 다른 질문에 답한다. 네트워크, 식별, 실패 정책이 어디에 있는지 추적한다.
Ubuntu Touch에서는 두 질문이 하나처럼 제기된다. 이 데스크톱 패키지가 실행될 것인가, 그리고 기기가 VPN을 얻을 것인가. 컨테이너는 첫 번째에 답한다. 그 안의 무엇도 두 번째에 답하지 않는다. 컨테이너는 파일 시스템에 대한 자체 관점을 가지는 반면, 네트워크 스택과 그 정책은 기기에 속하기 때문이다. 워크플로를 약속하기 전에 각 조각이 어디에 있는지 추적하라.
하나처럼 보이는 두 질문
컨테이너 안에서 데스크톱 애플리케이션을 실행하는 것은 패키징의 성과다. 기기의 연결 관리자가 터널을 세우고, 일시 중단을 넘겨 유지하며, 끊겼을 때 무슨 일이 일어날지 결정하게 하는 것은 플랫폼의 일이다. 컨테이너 안에서 끝나는 설치 프로그램은 의존성이 그곳에서 해결되었다는 것만 증명한다. 기기에 승인된 VPN 플러그인이 있는지, 터널이 재부팅을 견디는지, 어떤 애플리케이션이 그것을 쓰는지는 말해 주지 않는다.
어떤 평가에서든 둘을 별개의 문장으로 두어라. 둘을 합치는 것이 실험실 시연을 아무도 지킬 수 없는 지원 약속으로 바꾸는 길이다.
컨테이너 경계가 실제로 제공하는 것
Libertine 컨테이너는 기본 시스템이 읽기 전용인 기기 위에 층으로 얹힌 쓰기 가능한 환경이다. 그래서 그곳에 패키지를 설치하는 일이 아예 동작하고, 그래서 기본 시스템에서 같은 설치가 동작하지 않는다. 또한 애플리케이션을 전면에서, 기기 화면과 통합해 실행하며, 서버 소프트웨어를 실행하거나 프로세스를 배경에서 살려 두는 수단이 아님을 분명히 한다. 이런 제약은 계속 켜져 있어야 하는 VPN 클라이언트에 중요하다.
libertine-container-manager list
libertine-container-manager info -i <container-id>
libertine-launch -i <container-id> bash
목록은 어떤 컨테이너가 있는지 보여 주고, info 명령은 배포판과 설치 상태를 보고한다. launch 명령은 내부 셸을 주며, 패키지가 실제로 무엇을 설치했는지 살피기에 알맞은 곳이다. 주지 않는 것은 기기 네트워크에 대한 권한이다. 터널을 만들려는 컨테이너 내부의 바이너리는 특권 인터페이스가 필요하고, 그 인터페이스는 플랫폼에 속하지 컨테이너에 속하지 않는다.
기기의 네트워크 상태가 있는 곳
이름, 경로, 연결 프로필은 어떤 컨테이너의 바깥에서 기기의 네트워크 서비스가 관리한다. 터널 항목은 플랫폼이 그 VPN 유형을 지원하고 운영자가 해당 플러그인을 설치했을 때만 거기에 나타난다.
nmcli connection show
ip route get 10.42.0.10
ip -br addr show
이 기기에 VPN 프로필이 있는지에 대한 권위 있는 답은 연결 목록이다. 터널이 그 목록에 없다면 컨테이너 안에서 아무리 작업해도 나타나지 않는다. 경로 조회는 더 좁은 질문에 답한다. 이 기기가 한 목적지에 어떤 인터페이스를 쓸 것인가. 변경이 있을 때마다 반복해야 할 점검은 이것이다. 프로필은 존재해도 특정 애플리케이션이 가는 길이 아닐 수 있다.
워크플로 하나를 처음부터 끝까지 읽어라
실제 작업을 고르라. 예컨대 데스크톱 클라이언트로 사설 데이터베이스에 닿는 일이다. 그다음 흐름을 따라가라. 애플리케이션이 컨테이너에서 시작하고, 기기가 쓰는 리졸버로 호스트 이름을 해석하고, 소켓을 열고, 기기의 라우팅이 어느 인터페이스로 보낼지 결정한다. 각 단계에는 주인이 있다. 컨테이너가 애플리케이션을, 플랫폼이 리졸버와 라우팅을, VPN 종단이 인증을 가진다. 어느 단계의 실패도 그 단계의 실패이지 전체 발상의 실패가 아니다.
사설 호스트 이름과 사설 주소를 따로 시험하라. 공인 주소로 해석되는 이름과 터널로 라우팅되는 주소는 다른 관찰이며, 둘을 혼동하면 재현할 수 없는 보고서가 나온다.
답이 아니오일 때 기록할 것
때로는 이 기기가 이 릴리스에서 그 워크플로를 감당할 수 없다는 것이 정직한 결론이다. 증거와 함께 적어라. 플랫폼이 어떤 연결 유형을 제공하는지, 어떤 클라이언트를 시험했는지, 어느 단계에서 실패했는지.
그다음 받아들인 대안을 밝혀라. 다른 기기든, 다른 접근 방식이든, 사설 네트워크를 건드리지 않고 컨테이너 안에 머무는 더 좁은 작업이든.
옛 조리법을 재현하려고 기본 시스템을 다시 마운트하거나 설명 없는 권한을 주려는 유혹을 물리쳐라. 부팅되는 기기는 반년 뒤에도 그 네트워크 정책을 따져 볼 수 있는 기기와 같지 않다.