한 방향에서는 끝까지 완료되고 다른 방향에서는 별표 행을 찍는 traceroute 출력은 비대칭 포워딩처럼 보이지만, 대개 그렇지 않습니다. 표시되는 각 홉은 프로브가 도착하고, 라우터가 응답을 결정하고, 응답이 돌아와 프로브와 짝지어져야 합니다. 이 고리 중 하나라도 끊기면 터널이 계속 데이터를 나르는 동안 그 행은 별표가 됩니다.

추적은 전송에 관한 증거이기 전에 진단에 관한 증거입니다. 물어볼 가치가 있는 질문은 세 고리 중 어느 것이 실패했는가이며, 그 답은 출력의 모양이 아니라 패킷에서 나옵니다.

별표는 빠진 응답이지 빠진 홉이 아니다

traceroute는 라운드마다 TTL이 한 라우터 더 멀리서 만료되는 프로브를 보내 바깥으로 나아갑니다. 만료된 프로브를 버리는 라우터는 자신을 지목하는 ICMP Time Exceeded 메시지를 돌려보내야 하고, 도구는 그 이름을 찍습니다. 도구가 실제로 기다리는 것은 그 메시지가 제한 시간 안에 도착하는 것입니다. 라우터가 다른 출발지 주소에서 응답하거나, 오류 생성 빈도를 제한하거나, 아무 말 없이 프로브를 버리면 그 라운드는 찍을 것을 만들어 내지 못합니다.

이 결과 중 어느 것도 앞쪽 경로가 끊겼다고 말하지 않습니다. 별표는 답장 없는 우편에 대한 보고이지 빈 길에 대한 것이 아닙니다.

프로브 방식이 어떤 필터를 만나는지 결정한다

Linux의 기본 방식은 보통 번호가 높은 UDP 목적지 포트이고, Windows의 tracert는 ICMP 에코를 보내며, Linux에는 대신 ICMP나 TCP를 쓰라고 지시할 수 있습니다. 각각은 상태 저장 방화벽이나 클라우드 보안 그룹에 다른 종류의 트래픽으로 보입니다. 한쪽의 UDP 추적과 다른 쪽의 ICMP 추적을 비교하는 것은 서로 다른 두 실험을 비교하는 것입니다. 결과를 차이라고 부르기 전에 방식, 주소 체계, 출발지 주소, 제한 시간을 고정하세요.

공정한 비교를 위해서는 실제로 트래픽을 나르는 호스트에서 추적을 실행하고, 그들을 대신해 전달하는 게이트웨이에서 실행하지 마세요. 라우터가 생성한 추적은 라우터 자신의 출발지 주소와 출력 정책을 사용하며, 이는 클라이언트가 보는 무엇보다 엄격할 수 있습니다. 정확한 명령을 기록해 다음 사람이 반복할 수 있게 하세요.

제한 시간 값은 실험의 나머지 절반이며, 메모에서 빠지기 쉽습니다. 혼잡한 경로에서 두 초를 기다리면 별표를 보고하고 다섯 초를 기다리면 같은 지점에서 홉을 보고합니다. 모든 실행에서 값을 같게 유지해 비교가 네트워크에 관한 것이 되게 하세요.

돌아오는 경로는 그 자체의 경로다

ICMP 오류는 자체 출발지와 목적지를 가진 평범한 패킷이며, 추적기로 돌아갈 경로가 필요합니다. 터널 정책이 LAN 접두사를 나르지만 오류를 만든 라우터 주소를 나르지 않으면, 메시지는 당신에게 닿을 수 없는 경로로 나갑니다. 경로가 있어도 패킷이 예상치 못한 인터페이스의 예상치 못한 주소에서 오기 때문에 응답 필터링이 이를 버릴 수 있습니다. 이것은 응용 프로그램 장애가 아니라 진단 평면의 불일치입니다.

추적이 끝날 때까지 모든 선택자를 넓히면 그림은 예뻐지고 정책은 나빠집니다. 특정 진단 주소를 고치거나, 별표를 받아들이고 응용 프로그램을 다른 방식으로 시험하세요.

실제 요청으로 터널을 확인한다

서비스 자체 포트에서의 TCP 핸드셰이크는 중요한 방향에서 포워딩, 돌아오는 라우팅, 필터링을 시험합니다. 아래 명령은 양쪽 끝에서 실행되어 각 쪽이 무엇을 열 수 있는지 비교합니다. 서비스 포트와 터널 인터페이스 이름은 자신의 구성에서 가져와 바꾸세요.

traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established

먼저 두 traceroute 실행을 읽으세요: ICMP 실행이 홉을 보여 주고 TCP 실행이 보여 주지 않으면 차이는 방식이지 경로가 아닙니다. 합리적인 상태 코드와 함께 교환이 완료되었다면 앞쪽과 돌아오는 경로가 모두 실제 트래픽에 대해 동작한다는 뜻이므로, 그다음 curl 결과를 응용 프로그램 수준의 답으로 받아들이세요. 소켓 목록은 연결이 아예 성립했는지를 보여 주며, 어떤 추적도 그것을 알려 줄 수 없습니다.

양방향으로 대화형 세션을 나르면서 한 traceroute가 별표를 찍는 터널은 건강하며 단지 사진발이 좋지 않을 뿐입니다. 양쪽의 명령 출력을 기록으로 남기고, 빠진 홉은 VPN에 대한 판결이 아니라 진단에 관한 열린 질문으로 다루세요.

관련 글