수신 카운터가 영에 머무는 동안 전송 카운터만 올라간다는 것은 방향을 설명할 뿐 진단이 아닙니다. 같은 판독값은 피어가 핸드셰이크를 끝내지 못했을 때, 목적지가 잘못된 피어를 골랐을 때, 먼 쪽에 돌아갈 경로가 없을 때, 필터가 돌아오는 길에 응답을 버릴 때 나타납니다. 각 경우는 서로 다른 곳에서 고칩니다.

작업을 줄여 주는 비교는 터널을 떠나지 않은 요청과 돌아오지 않은 응답 사이에서 이루어집니다. 올바른 인터페이스에서 한 번 캡처하면 둘 중 어느 쪽인지 결정됩니다.

카운터는 양을 설명할 뿐 결함의 방향을 말하지 않는다

WireGuard의 카운터는 인터페이스가 피어에 넘긴 양과 피어에서 받은 양을 기록합니다. 어느 목적지, 어느 피어, 교환의 어느 절반이 실패했는지는 말해 주지 않습니다. 배경 트래픽이 있으면 일부 바이트가 연결 유지 메시지이거나 무관한 흐름일 수 있어 합계는 더욱 정보가 없어집니다. 인터페이스가 살아 있다는 지표로만 읽고, 그 이상 증거로 다루지는 마십시오.

먼저 유용한 사실은 핸드셰이크가 최신인지 여부입니다. 그것이 없으면 이 피어에 대해 암호화된 것은 없고 수신 카운터가 움직일 이유도 없습니다.

피어 선택인가 응답 경로인가: 두 가지 설명

첫 번째 설명은 경로가 다른 곳을 가리켰거나 피어의 허용 접두사가 목적지를 덮지 못해 패킷이 의도한 피어에 도달하지 못했다는 것입니다. 두 번째는 패킷은 도달했지만 응답이 돌아오지 못했다는 것이며, 이는 먼 쪽의 라우팅 문제입니다. 표는 각 지점에서 무엇을 관찰할지에 따라 둘을 구분합니다.

ObservationPoints to
No handshake while transmit climbsPeer selection or endpoint
Handshake current, request visible on the serverReply path or far-side route
Request never visible on the serverAllowed prefixes or local route
Both packets visible, nothing reaches the clientReturn filter or translation

표를 위에서부터 읽으십시오. 핸드셰이크가 없으면 아직 살펴볼 것이 없으므로 키와 엔드포인트, 바깥 경로로 향합니다. 핸드셰이크가 최신이고 요청이 서버에 보인다면 문제는 돌아오는 방향으로 옮겨 가며, 거기서는 목적지 자체의 라우팅 테이블이 결정합니다. 서버에 전혀 나타나지 않는 요청은 선택의 문제이며, 두 피어의 허용 접두사가 가장 먼저 비교할 대상입니다.

이 네 줄 가운데 두 줄은 클라이언트에서, 두 줄은 서버에서 고칩니다. 어느 짝에 속했는지 아는 것이 작업의 대부분입니다.

응답이 사라지는 곳

응답은 목적지를 떠나 서버의 터널 인터페이스에 도달하고, 허용 주소가 클라이언트의 내부 주소와 일치하는 피어를 위해 암호화됩니다. 그 일치가 실패하면 응답은 조용히 버려지며, 클라이언트 쪽에서는 정확히 네트워크 고장처럼 보입니다. 응답이 암호화되어 있고 클라이언트 자체 필터가 이를 거부한다면 증상은 다시 같습니다. 두 경우 모두 카운터가 아니라 캡처가 필요합니다.

이 실수의 가장 강한 형태는 클라이언트를 위해 패킷을 전달하면서도 클라이언트의 내부 범위로 돌아갈 경로가 없는 서버입니다. 그 서버는 요청을 받아들이고 응답을 기본 게이트웨이로 보내며, 터널은 그것을 보지 못합니다. 서버에 추가한 넓은 변환 규칙은 경로를 고치는 대신 그 결함을 가립니다.

목적지 하나를 끝에서 끝까지 시험한다

피어 범위 안에서 목적지 하나만 고르고, 핸드셰이크가 분명히 최신일 때 시험합니다. 아래 명령은 피어 상태, 선택된 경로, 교환의 양쪽을 읽습니다. 암호화된 패킷이 실제로 쓰는 인터페이스에서 캡처를 실행하십시오.

wg show wg0 latest-handshakes
wg show wg0 transfer
ip route get 10.60.9.5
sudo tcpdump -ni wg0 host 10.60.9.5

터널 인터페이스에서 요청은 보이는데 아무것도 돌아오지 않는 캡처는 서버 쪽 답이며, 다음으로 볼 곳은 목적지의 라우팅 테이블입니다. 아무것도 전혀 나타나지 않는다면 패킷이 다른 경로를 택한 것이므로 로컬 경로가 의심 대상입니다. 두 캡처 모두에 보이지만 애플리케이션에서 진전이 없는 교환은 질문을 패킷 크기나 인터페이스 통계에 드러나지 않는 필터로 옮깁니다. 시험에서는 두 번째 변수가 증거를 다시 인상으로 바꾸므로 목적지도 클라이언트도 하나로 유지하십시오.

허용된 주소는 동작하는데 이름이 실패한다면 답은 터널이 아니라 DNS에 있습니다. 큰 전송만 멈춘다면 패킷 크기를 따로 살펴보십시오.

관련 글