IPsec에서 큰 패킷은 사라지고 작은 ping은 계속 동작한다
작은 탐침은 응답하는데 파일 복사가 멈춘다. 암호화 전에 내린 크기 결정의 특징이다. 어느 쪽이 패킷을 나누는지, 그 이유를 찾아낸다.
원격 셸은 계속 응답하고 작은 탐침도 답하는데, 그러다 파일 복사가 기어가다 누구도 지목할 수 없는 오류 없이 멈춘다. 더 큰 페이로드로 ping을 보내면 즉시 재현되고, 같은 전송이 로컬 네트워크에서는 동작한다. 암호화에서 느린 부분은 없으며 특정 패킷이 도착하지 않을 뿐이다. 서로 다른 두 가지 분할이 같은 특징을 만들 수 있고, 남기는 증거도 다르다.
패킷을 나눌 수 있는 두 지점
암호화 전에는 라우터가 너무 큰 내부 패킷을 나누고 조각마다 따로 보호할 수 있다. 암호화 후에는 완성된 외부 패킷이 나뉘고, 먼 쪽은 무언가를 복호화하기 전에 그것을 다시 조립해야 한다. 증상은 같지만 수신 측의 일과 여러분이 만질 손잡이는 다르다.
이 구분이 중요한 이유는 잘못된 쪽을 겨냥한 수정이 장애를 옮기지 않은 채 숫자만 바꾸기 때문이다. 인터페이스에서 거부된 패킷은 외부 패킷이 되지 않으므로 외부 쪽 설정으로는 결코 구할 수 없다.
크기 결정은 실제로 어디서 내려지는가
터널 인터페이스는 IP MTU를 지니고, 그 값은 IPsec 단계가 보기 훨씬 전에 너무 큰 내부 패킷을 거부할 수 있다. 외부 헤더에 비트를 설정해도 그 이전 결정은 다시 검토되지 않는다. 패킷은 이미 거부되었기 때문이다. 그래서 내부 MTU를 올리면 나아지기는커녕 더 나빠질 때가 있다. 둘 중 무엇을 바꾸기 전에 인터페이스 값과 외부 동작을 읽어야 한다. 더 싼 수정이 대개 증상을 설명하는 쪽이기 때문이다.
먼저 인터페이스 값을 확인하고, 그다음 외부 동작을 본다. 두 숫자, 두 단계이며 보통 둘 중 하나만 책임이 있다.
외부 예산은 내부 예산이 아니다
모든 캡슐화는 헤더에 바이트를 쓰고, 그 양은 전송 방식과 주소 체계, NAT 트래버설 여부에 달려 있다. 로컬 링크에 들어가는 내부 패킷도 그 너머 경로에 들어가지 않는 외부 패킷을 만들 수 있다. 오버헤드는 가정하지 말고 측정해야 한다. 선택적 헤더는 모두 청구서에 더해지기 때문이다. NAT 트래버설이 있는 터널은 맨 터널보다 더 지불하고, 그 차이는 어제까지 동작하던 전송을 깨뜨리기에 충분하다.
외부 패킷이 단편화 금지 비트를 지닐 때, 전달할 수 없는 홉은 그것을 버리고 ICMP 메시지를 돌려보내야 한다. 그 메시지가 어딘가에서 필터링되면 송신자는 계속 재시도하고 사용자는 설명 없는 멈춤을 본다. 이 조용한 폐기가 크기 문제가 속도 문제로 보고되는 흔한 이유다.
IPv6는 선택지 하나를 없앤다
IPv6 라우터는 전송 중에 단편화하지 않으므로 외부 패킷은 들어가거나, Packet Too Big 메시지와 함께 사라진다. 그 메시지가 유일한 피드백 통로가 되고, 그것을 막으면 뒤따르는 모든 큰 전송에서 경로 탐색이 깨진다. IPv4 라우터는 비트가 꺼져 있으면 큰 패킷을 단편화할 수 있고, 그러면 다른 무언가가 그 비트를 켤 때까지 결함이 숨는다.
혼합 스택에서는 같은 터널이 두 체계에 다르게 동작할 수 있어, IPv4에서의 시험 하나로 IPv6 불만이 정리되지 않는다. 한 체계만 시험하는 점검은 답의 절반을 재지 않고 남긴다.
TCP 세그먼트 정책은 일반적인 답이 아니다
최대 세그먼트 크기를 제한하는 것은 TCP 흐름에 도움이 되고, 문제가 그들에 국한될 때는 정당한 제어다. UDP에는 아무 효과가 없는데, DNS와 일부 음성 프로토콜, 그리고 늘어나는 웹 트래픽의 상당 부분이 UDP로 간다.
적용한 다음, 실패했던 워크로드를 시험한다. UDP 사례가 여전히 실패한다면 세그먼트 정책은 답이 아니었고 인터페이스 예산에 여전히 주의가 필요하다. 먼저 실패한 워크로드의 프로토콜을 확인하고, 그다음 그것에 맞는 제어를 고른다.
작업 순서
살아남는 가장 큰 페이로드를 기록하고, 다음으로 인터페이스 MTU, 다음으로 외부 패킷이 단편화 금지 비트를 지니는지, 마지막으로 ICMP 피드백이 송신자에게 닿는지를 기록한다. 그 순서면 추측 없이 결함을 좁힐 수 있다. 관측은 모두 시각과 종단점을 붙여 남긴다. 경로가 바뀌면 네 숫자가 모두 움직이기 때문이다.
값 하나를 바꾸고 원래 전송을 다시 시험한 뒤 결과를 남긴다. 큰 탐침은 통과하지만 애플리케이션에서 여전히 멈추는 터널은 다른 문제로 넘어간 것이고, 그것은 적어 둘 만한 진전이다. 다음 사람은 결론보다 숫자를 원한다.