새 터널을 올리고 서브넷 하나를 옮기면, 나머지는 모두 완벽한데 그 서브넷만 간헐적으로 실패한다. 반쯤 이전된 VPN이 정확히 이렇게 실패하는 이유는 터널이 결코 어려운 부분이 아니었기 때문이다. 경로에는 어느 라우트가 이기는지, 어떤 선택자가 일치하는지, 접근 규칙이 무엇을 허용하는지, 응답이 어떻게 돌아오는지, 그리고 예전 설계가 적용하던 변환까지 포함된다. 터널만 옮기면 그중 아무것도 옮기지 않은 것이다.

터널은 경로의 쉬운 절반일 뿐이다

부분 이전 후의 간헐적 실패는 보통 두 경로가 모두 그럴듯하다는 뜻이다. 어떤 플로는 새 터널을 고르고 어떤 플로는 예전 것을 유지하며, 상태를 기억하는 장비는 요청이 한 번도 쓰지 않은 경로로 응답이 도착하는 것을 본다. 두 경로가 자동으로 하나보다 안전한 것은 아니며, 둘은 서로 어긋날 수 있는 두 가지다. 카운터는 내내 건강해 보일 것이므로 터널 카운터가 아니라 흔들림 보고를 보라.

유용한 첫 질문은 어느 터널이 더 나은가가 아니다. 오늘 어떤 플로가 어떤 경로를 고르는지, 그리고 요청과 응답이 같은 답을 얻는지다.

선호하기 전에 목적지를 만들어라

피어가 호환되고 새 터널이 의도한 주소 범위를 나르는지 확인한다. 아직 선호되지 않는 경로일 때 필요한 전달과 서비스 권한을 추가해 두어, 전환 자체는 선택만 바꾸고 다른 것은 바꾸지 않게 한다.

원격 사이트에 트래픽을 어떻게 돌려줄지 물어라. 응답이 여전히 예전 터널로 나간다면 새 로컬 라우트는 비대칭을 만들거나 상태를 기억하는 필터에서 걸린다. 변환도 같은 이유로 설계에 들어가는데, 바뀐 출발지 주소는 반환 경로도 바꾼다.

좁게 전환하고, 돌아오는 길을 알아 두라

정확한 서브넷과 그 새 라우트나 선택자를 선호하는 플랫폼 지원 메커니즘을 지목한다. 정책 기반 정의는 항상 라우트 메트릭처럼 동작하지 않으므로, 더 구체적인 일치가 이긴다고 가정하기 전에 구현의 중첩 정책 규칙을 읽어라.

사이트 하나가 아니라 서브넷 하나를 옮긴다. 관리 접근은 건드리지 않는 경로에 두고, 무엇이든 적용하기 전에 어느 라우트나 정책이 되돌아가는지, 누가 하는지, 하는 동안 어떻게 연결을 유지하는지를 적어 둔다.

비대칭과 낡은 상태

방화벽과 NAT 장비는 플로가 사용한 인터페이스를 기억한다. 요청과 응답이 서로 다른 터널을 타면, 각 경로가 따로 잘 동작하더라도 장비가 응답을 버릴 수 있다. 이미 맺어진 세션은 몇 시간씩 예전 경로를 계속 쓸 수 있으므로, 변경 후에 연 플로로 시험하라.

관측된 출발지 주소가 옮겨졌다면 예전 주소를 지목하는 모든 정책을 찾아라. 출발지를 조용히 바꾸는 이전은 아무도 VPN 설계의 일부로 분류하지 않은 규칙을 깨뜨린다.

두 답을 모두 입증한 뒤 예전 정책을 폐기하라

이전된 서브넷의 평범한 호스트에서 의도한 서비스에 닿고, 관측된 출발지와 응답 인터페이스를 확인한다. 그다음, 이전은 두 답이 모두 맞을 때에만 끝나므로 예전 터널에 남아야 하는 네트워크를 시험하라. 두 번째 시험이야말로 사람들이 건너뛰는 것이며, 의도보다 넓은 선택자를 잡아내는 것도 바로 그것이다.

남은 서브넷이 더 이상 의존하지 않을 때에만 낡은 정책을 폐기하고, 최종 라우트를 소유자와 함께 선택자 목록에 기록하라. 완료란 새 터널이 올라왔다고 보고하는 것이 아니라, 모든 네트워크가 의도한 경로를 따르는 것이다.

관련 글