VPN 컨테이너의 네트워크 네임스페이스를 공유하는 애플리케이션 컨테이너에는 자체 인터페이스가 없으므로 터널이 죽었을 때 아무것도 보낼 수 없다고 생각하기 쉽습니다. 그 가정은 정말 중요한 장애 모드에서 틀렸습니다. VPN 프로세스가 죽어도 네임스페이스가 남아 있으면 애플리케이션은 소켓을, 네임스페이스는 경로를 그대로 유지하며 트래픽은 아직 설치된 경로로 계속 흐릅니다. 진짜 킬 스위치는 명시적인 필터링 정책과 런타임 수명 주기 테스트이며, 시작 의존성이 아닙니다.

네임스페이스 공유가 킬 스위치가 아닌 이유

네임스페이스를 공유한다는 것은 애플리케이션이 VPN 컨테이너의 인터페이스와 주소, 라우팅 테이블을 쓴다는 뜻입니다. 공유 네임스페이스가 온전한 동안 애플리케이션의 독립적인 네트워크 경로를 없애 주지만, 터널이 사라질 때 그 네임스페이스가 무엇을 할지는 말해 주지 않습니다.

Compose 의존 조건은 의존 대상이 건강해질 때까지 애플리케이션 시작을 미룰 수 있습니다. 그것은 한 시점만 덮을 뿐 이후의 장애는 덮지 않으므로 이것은 시작 순서를 위한 도구이고 지속적인 출구 방화벽이 아닙니다.

컨테이너가 종료될 때 실제로 무슨 일이 일어나는가

세 가지 사건을 구분하십시오. 컨테이너 안의 VPN 프로세스는 컨테이너가 계속 실행되는 동안 죽을 수 있습니다. 컨테이너가 중지되거나 삭제되면 네임스페이스가 사라집니다. 컨테이너가 다시 만들어지면 새 네임스페이스와 새 규칙이 생깁니다.

첫 번째 경우 네임스페이스는 남고 기본 경로는 여전히 물리 인터페이스를 가리킬 수 있으며 애플리케이션은 직접 보내기를 계속합니다. 두 번째 경우 의존하는 애플리케이션은 보통 그 네임스페이스가 사라졌기 때문에 연결을 완전히 잃습니다. 세 번째 경우 애플리케이션은 터널이 준비되기 전에 새 네임스페이스에 다시 연결될 수 있습니다. 각 경우에는 다른 테스트가 필요하고, 정상적인 단절만 덮는 설계는 가장 덜 흥미로운 경우를 덮습니다.

명시적인 출구 정책을 세우십시오

정책을 공유 네임스페이스 안에 작성해 애플리케이션의 패킷에 적용되게 하십시오. 형태는 좁은 예외를 둔 기본 드롭으로, loopback, 터널 인터페이스, 그리고 터널 전송에 필요한 특정 엔드포인트 주소와 포트입니다.

엔드포인트 예외는 터널이 올라오기 전에 마련되어야 하며, 그렇지 않으면 VPN 클라이언트가 자기 서버에 닿을 수 없습니다. 규칙 집합이 물리 인터페이스를 일반적으로 허용하는 대신 바깥 전송을 명시적으로 허용하는 이유가 여기 있습니다. 네임스페이스에 IPv6 연결이 있으면 IPv4만 다루는 정책이 다른 주소 체계를 열어 두기 때문에 IPv6 규칙도 추가하십시오.

DNS도 정책의 일부입니다. 애플리케이션이 터널 안에서만 닿을 수 있는 리졸버로 이름을 풀면, 터널이 내려가 있을 때 드롭 규칙이 이름 해석을 끊는데, 그것이 킬 스위치에 맞는 동작입니다. 그것이 원하는 바인지 의식적으로 결정하십시오.

수명 주기를 시험하십시오. 단절만이 아니라

터널이 건강할 때 새롭고 무해한 요청을 보내고, 그다음 VPN 프로세스를 죽인 뒤 하나 더 보내십시오. 컨테이너 중지 후, 재시작 후, 다시 만든 뒤에도 반복하십시오. 새 요청이 중요한 이유는 기존 연결이 새 연결을 막는 규칙 변경을 견딜 수 있기 때문입니다.

차단 수단으로 상태 확인이나 출구 IP 조회에 기대지 마십시오. 확인은 상태를 관찰해 보고하고, 정책은 트래픽을 제어합니다. 둘은 같은 배포에 속하며 서로를 대신하지 못합니다.

업데이트 뒤에도 테스트가 살아남도록 규칙을 기록하십시오

각 장애 경우의 예상 결과를 그것을 구현하는 규칙과 함께 배포 문서에 적으십시오. 그 기록이 있으면 네임스페이스 동작이나 기본 경로가 누군가 compose 파일을 고치지 않아도 바뀔 수 있으므로 이미지 업데이트나 런타임 업그레이드 뒤에도 같은 테스트를 돌릴 수 있습니다.

VPN 엔드포인트에 필요한 바깥 경로를 제한 없는 애플리케이션 출구와 분리해 두고, DNS와 IPv6를 의도한 범위 안에 두십시오. 정책이 편의를 위해 물리 인터페이스 전체를 허용한다면 킬 스위치는 없는 것입니다. Docker 네트워크 문서는 정책이 기대는 공유 네임스페이스 구성 방식을 설명하며, 런타임 동작에 의문이 들 때 확인해야 할 참고 자료가 바로 그것입니다.

관련 글