두 번째 WAN 링크를 추가하면 터널은 올라오지만 한 경로가 흔들리면 파일 복사는 여전히 멈춥니다. 링크는 정상이고 VPN 프로세스도 돌고 있습니다. 빠진 것은 통신사와 터널 사이의 계약입니다. 여러 소켓은 자동으로 하나의 연결처럼 동작하지 않으며, 그 위의 애플리케이션은 전달이 끊기기 전까지 차이를 알 수 없습니다. 계약의 각 부분은 시험 가능한 장애에 대응하며, 그래서 계약이 유용합니다.

제품을 고르기 전에 그 계약을 쓰십시오. 네 부분이 있습니다. VPN이 받는 스트림, 통신사가 손실된 데이터를 복구하는 방식, 어떤 엔드포인트 ID가 경로 변경 후에도 유지되는지, 그리고 경로가 실패할 때 전체가 어떻게 동작하는지입니다.

증상: 링크는 올라와 있는데 세션은 끊긴다

두 링크가 모두 올라와 있음을 보여주는 모니터링 그래프는 각 경로가 트래픽을 실을 수 있다는 것만 증명합니다. VPN이 하나의 정렬된 스트림을 본다는 것, 한 경로에서 잃은 패킷이 다른 경로에서 복구된다는 것, 피어가 아직 어느 세션과 대화하는지 안다는 것은 증명하지 않습니다. 계약의 나머지 부분이 그 그래프가 보여주지 못하는 것을 다룹니다.

전송이 멈추면 통신사가 살아남은 경로에서 계속 전달했는지 확인하십시오. 두 번째 링크가 유휴 상태일 때 세션이 죽는다면 통신사는 그것을 쓴 적이 없습니다. 세션이 살아 있어도 데이터가 순서를 벗어나거나 중복되어 도착하면 통신사는 연결 수준 계약 없이 패킷을 옮기고 있습니다. 양쪽의 타임스탬프가 보통 이것을 분명히 합니다.

이 차이가 수정 방법을 결정합니다. 라우팅이나 정책 문제는 경로 선택 변경이 필요합니다. 정렬과 복구 계층이 빠졌다면 더 큰 버퍼가 아니라 다른 전송이 필요합니다.

첫 번째 보장: 연결 수준의 바이트 스트림

VPN에 신뢰할 수 있는 정렬된 스트림이 필요하면 통신사는 개별 경로 위에서 바이트 범위를 식별해야 합니다. 하위 TCP 연결은 자기 세그먼트만 번호를 매기므로 수신자는 그 번호만으로 경로 간 재정렬을 할 수 없습니다.

Multipath TCP가 표준적인 예입니다. 여러 TCP 서브플로를 조정하면서 하나의 신뢰할 수 있는 바이트 스트림을 제공하며, 데이터 수준의 시퀀스 매핑과 확인을 갖습니다. 애플리케이션은 스트림을 읽지, 우연히 조각을 먼저 전달한 서브플로를 읽지 않습니다.

Linux에서 MPTCP는 소켓별로 IPPROTO_MPTCP를 통해 옵트인합니다. 협상이 다중 경로 동작을 쓸 수 없을 때 문서화된 대체는 일반 TCP이며, 이는 애플리케이션이 두 번째 경로를 전혀 쓰지 않고 한 경로에서 계속 동작할 수 있음을 뜻합니다. 커널 설정이 적용됐다고 가정하지 말고 배포된 소켓이 실제로 무엇을 협상했는지 확인하십시오.

두 번째 보장: 정렬, 중복, 복구

지연과 손실률이 다른 경로는 통신사에 버퍼링, 재정렬, 재전송을 강요합니다. 계약은 허용되는 버퍼링, 애플리케이션이 보는 배압, 재전송을 어느 경로가 나르는지를 명시해야 합니다.

연결된 채로 전달을 멈추는 경로는 깔끔한 종료보다 어렵습니다. 통신사는 이를 감지하고 미완료 데이터를 옮기며 영원히 오지 않을 세그먼트를 기다리지 않아야 합니다. 단순히 두 링크가 올라와 있다는 점검은 이 상태를 다루지 못합니다.

중복에는 자체 규칙이 필요합니다. 같은 페이로드를 두 경로로 보내면 지연을 개선할 수 있지만 수신자는 사본이 VPN에 도달하기 전에 억제해야 합니다. IPsec 재전송 방지는 보안 연관별로 선택 사항이며 시퀀스 번호를 검사합니다. 패킷을 재정렬하거나 재생하는 중복 계층은 이를 작동시키거나 터널이 끊길 때까지 문제를 숨길 수 있습니다.

세 번째 보장: 엔드포인트 ID와 경로 결합

새 경로가 나타날 때 피어는 세션을 인식할 안정적인 방법이 필요합니다. 각 경로를 별도 터널로 인증하면 VPN은 하나가 아니라 두 세션을 볼 수 있습니다. 통신사가 경로를 하나의 세션 아래 결합한다면 새 경로를 어떻게 인증하고 기존 경로가 어떻게 되는지 정의해야 합니다.

어떤 주소와 식별자가 안정적으로 유지되는지 기록하십시오. 터널 엔드포인트, 통신사 세션 식별자, 그 사이의 프록시입니다. 프록시는 보호된 페이로드를 전혀 보지 않아도 가용성과 신뢰의 경계를 하나 더 추가합니다.

정책도 여기에 있습니다. 예상치 못한 네트워크에서 결합하는 경로는 기술적으로 유효해도 의도한 신뢰 모델을 위반할 수 있습니다. 새 경로를 자동으로 받아들일지, 인증을 요구할지, 거부할지 결정하십시오.

네 번째 보장: 장애 시 경계가 정해진 동작

느린 경로만이 아니라 경로의 완전한 실패를 시험하십시오. 살아남은 경로는 메모리가 무한히 늘지 않으면서 세션을 날라야 하고, 복구는 애플리케이션이 견딜 수 있는 것보다 긴 타이머에 의존해서는 안 됩니다. 실패한 경로가 돌아오면 통신사는 재분배할지 흐름을 그대로 둘지 결정해야 합니다.

버퍼링, 재전송, 경로 수에 상한을 두고 손실, 재정렬, 중복, 지연 불균형 아래에서 검증하십시오. 여기서 가장 덜 흥미로운 숫자는 총 대역폭입니다. 전달 연속성과 메모리 경계가 계약입니다.

통신사의 복구 상태를 VPN의 암호 상태와 분리하십시오. 기존 인증이나 암호화를 대체하는 자체 신뢰성 계층은 지름길이 아니며, 계층 사이에서 시퀀스 번호를 재사용하면 재전송 방지와 진단이 불신뢰해집니다.

시험 계획으로 통신사를 수용하십시오

네 가지 보장을 통과 또는 실패 점검으로 쓰십시오. 하나의 정렬된 스트림, 정의된 복구, 안정적인 세션 ID, 경계가 정해진 장애 동작입니다. 각 점검은 한 경로를 열화시킨 뒤 한 경로를 제거한 상태에서 수행하십시오.

경로 변경을 거친 한 번의 성공적인 파일 전송은 연속 동작을 증명하지 않습니다. 선호 경로를 바꾸면서 전송을 반복하고, 통신사의 시각과 VPN 자체 카운터를 모두 점검하십시오. 어느 경로가 데이터를 날랐는지에 대해 둘이 일치하지 않으면 계약은 아직 관측 가능하지 않습니다.

서명된 매트릭스를 배포와 함께 보관하십시오. 다음 엔지니어에게 무엇이 약속됐고, 어떤 경로 조합이 시험됐으며, 어떤 장애 모드가 아직 지원되지 않는지를 링크 상태등에서 다시 추측하지 않고 알려줍니다.

관련 글