지사에서 Azure로 가는 흐름은 양방향으로 올바르게 라우팅되고도 실패할 수 있다. 두 방향이 서로 다른 어플라이언스를 거치기 때문이다. 요청은 VPN을 통해 지사를 떠나 NVA A에 도착하고 워크로드에 닿는다. 응답은 워크로드를 떠나 NVA B를 가리키는 경로와 일치하고 그곳에서 죽는다. 그 그림의 모든 경로는 유효하지만 TCP 세션은 여전히 끊겨 있다.

Request: branch -> VPN gateway -> NVA A -> workload
Reply:   workload -> NVA B -> VPN gateway -> branch

이 간극이 여기서의 주제 전체다. 라우팅 수렴과 세션 상태 소유권은 다이어그램에서는 똑같아 보이는 서로 다른 문제다.

Route Server가 실제로 프로그래밍하는 것

Azure Route Server는 지원되는 BGP 스피커와 피어링하고 그 경로를 학습해 가상 네트워크의 유효 경로에 프로그래밍한다. 이것은 컨트롤 플레인 작업이다. 벤더 방화벽의 세션 테이블을 읽지 않고, 어떤 어플라이언스가 특정 연결을 허용했는지도 모른다. 동일 비용의 다음 홉 두 개는 이 패브릭에게 같은 접두사에 도달하는 두 가지 방법일 뿐이며 어느 쪽이든 사용한다.

따라서 경로를 학습하는 것은 도달 가능성을 증명한다. 반대편 장치가 이 흐름을 전에 보았는지에 대해서는 아무것도 증명하지 않는다.

설계하기 전에 양방향을 읽어라

의도한 스티어링이 아니라 각 방향에서 실제로 가진 스티어링을 적는 것부터 시작하라. 더 구체적인 BGP 경로, 사용자 정의 경로, 게이트웨이 동작이 모두 경쟁하며 승자는 세션 단위가 아니라 목적지 단위로 결정된다. NVA의 기본 경로가 모든 프라이빗 접두사가 그곳을 지나간다는 뜻은 아니다.

유용한 점검은 특정 워크로드 IP에 대해 각 방향이 어느 다음 홉으로 해석되는지 묻는 것이다. 답이 서로 다른 어플라이언스 두 개라면, 아직 드러나지 않았더라도 비대칭 문제가 있다.

상태가 사는 곳

상태 저장 방화벽은 연결을 허용하고 다섯-튜플을 키로 하는 테이블 항목을 유지한다. 응답은 그 항목을 가진 장치에 도달해야 하고, 그렇지 않으면 그 장치가 다른 방식으로 상태를 얻어야 한다. Azure 데이터 플레인은 어플라이언스 사이로 항목을 전달하지 않는다. 트래픽을 소유자에게 되돌리거나, 어플라이언스가 벤더 메커니즘으로 상태를 공유하거나, 아니면 설계가 작동하지 않는다.

그래서 건강한 NVA 두 개는 검사에 대한 상태 점검이 아니다. 상태는 도달 가능성에 관한 것이고, 검사는 어느 인스턴스가 세션을 보유하는지에 관한 것이다.

지원되는 HA 모델과 각각의 약속

Microsoft's guidance on Virtual WAN 라우팅 의도에 대한 Microsoft 지침은 이중 역할 연결과 방화벽 NVA에 대한 제한된 동작을 설명하며, 여기서 직접 라우팅이 허브의 정상적인 대칭 적용을 우회할 수 있다. 그 노트를 선택한 토폴로지에 대한 제약으로 읽고, 액티브-액티브 설계에 대한 금지로 읽지 말라. 상태를 동기화하거나 흐름 단위로 스티어링하는 벤더 쌍은 지원될 수 있다. 둘 다 하지 않는 동일 비용 쌍은 지원되지 않는다.

그다음 노드가 실패할 때 기존 세션에 무슨 일이 일어나는지 정의하라. 라우팅 수렴은 새 흐름의 도달 가능성을 몇 초 안에 복구하지만, 오래된 방화벽 상태는 그냥 사라진다. 클라이언트 재연결이 문서화된 결과일 수 있으며, 이는 사고가 발생한 뒤가 아니라 그 전에 내려야 할 결정이다.

신뢰하기 전에 무엇을 시험할까

Test with inspection enabled and 워크로드의 액세스 정책을 배치한 상태에서 시험하라. 둘 중 어느 것이든 비대칭을 숨길 수 있다. 새로 승인된 흐름을 양방향으로 보내고 같은 어플라이언스가 양쪽 절반을 보았는지 확인하라. 그런 다음 지속적인 트래픽을 돌리고 승인된 페일오버를 트리거해, 수립된 세션이 살아남는지 재연결하는지 관찰하라.

각 흐름을 처리한 어플라이언스와 연관지어라. 한쪽 NVA에서의 패킷 캡처는 응답이 그곳으로 돌아오지 않았다면 거의 아무것도 말해 주지 않는다.

마지막으로 계획을 세 개의 별도 줄로 써라. 경로 소유권, 트래픽 스티어링, 세션 상태 소유권이다. 처음 두 개가 해결되고 세 번째가 가정되면 설계는 무너진다.

관련 글