VPN 포트를 스캔했는데 응답이 없으면 서비스가 중단되었거나 방화벽이 닫혀 있다고 결론짓기 쉽습니다. WireGuard와 자체 인증을 지닌 OpenVPN 제어 채널에서는 그 결론이 성립하지 않습니다. 유효한 인증 자료가 없는 데이터그램은 응답 없이 폐기되므로, 침묵이야말로 건강한 서비스가 외부에서 보이는 모습입니다. 터널보다 먼저 그 검사가 틀렸다.

침묵은 프로토콜이며 고장이 아니다

UDP에는 연결 설정이 없으므로 스캐너가 열린 포트와 필터된 포트를 구분하게 해 줄 SYN도, 확인 응답도 없습니다. 검사는 고립된 데이터그램으로 도착하고, 서비스는 그것이 기대하는 프로토콜과 일치하는지 확인합니다. 일치하지 않으면 패킷은 폐기되며, 폐기는 오작동이 아니라 문서화된 동작입니다.

WireGuard는 핸드셰이크 메시지를 암호학적으로 검증하고 실패한 것은 모두 무시합니다. OpenVPN tls-auth 또는 tls-crypt를 사용할 때 제어 채널에 대해서도 같은 일을 합니다. 두 경우 모두 임의의 페이로드가 사용자에게 닿는 단계까지 이르지 않으므로 응답할 것도, 돌려줄 오류도 없습니다.

TCP였다면 닫힌 포트에서 리셋을 받았을 것입니다. UDP는 모호함을 남기고, 스캐너는 추측하는 대신 open 또는 filtered라고 출력해 그것을 해소합니다.

스캐너가 결론지을 수 있는 것과 없는 것

스캔 결과는 보낸 페이로드만큼만 정보를 담습니다. 가능한 관측을 각각이 실제로 무엇을 뒷받침하는지에 따라 정렬해 보십시오:

ProbeObserved resultWhat it supports
Empty datagramNo replyNothing beyond the fact that UDP was used
Random payloadNo replyConsistent with an authenticated service
Valid handshake from a real clientA protocol replyThe service is alive and reachable
ICMP port unreachableUnreachable messageThe host answered, usually because nothing listens

목록에서 유일한 긍정 검사는 세 번째 줄입니다. 실제 프로필, 실제 키, 올바른 엔드포인트가 필요하며, 일반 스캐너에게는 바로 그것이 없습니다.

경로의 양 끝을 보라

직접 관리하는 서버라면 어떤 결론을 내리기 전에 인터페이스에서 캡처하고, 그다음 서비스에 무엇을 보았는지 물어보십시오. 두 명령 모두 게이트웨이에서 root가 필요합니다:

tcpdump -ni any udp port 51820
tcpdump -ni any udp port 1194
wg show

인터페이스에 패킷이 나타나지 않으면 서비스가 무엇을 보기도 전에 경로가 그것을 버린 것이며, 다음 확인 지점은 라우팅과 필터링입니다. 패킷은 도착하지만 핸드셰이크가 완료되지 않으면 서비스에는 닿았고 불일치는 키, 엔드포인트 설정, 프로토콜 버전 중 하나에 있습니다. 그 비교가 스캐너가 답하지 못한 질문에 답합니다. 실제 클라이언트가 연결을 시도하는 동안 실행하고, 스캐너가 같은 일을 반복하는 동안 실행하지 마십시오.

바꿀 것은 검사이지 보호가 아니다

유혹적인 지름길은 진단이 응답을 받도록 제어 채널 보호를 끄는 것입니다. 그것은 실제 보안 속성을 더 보기 좋은 스캔 결과와 맞바꾸는 것이며 방향이 틀렸습니다. 대신 승인된 네트워크의 유효한 프로필을 사용하고, 비교를 반복할 수 있도록 엔드포인트와 시각을 기록하십시오.

가장 유용한 검사는 차등 검사로, 같은 프로필을 통하는 경로와 통하지 않는 경로에서 시험합니다. 통하는 경로에서 핸드셰이크가 생기고 통하지 않는 경로에서 인터페이스에 아무것도 생기지 않는다면, 아무것도 약화하지 않고 끊긴 지점을 찾은 것입니다.

따라서 응답 없는 UDP 패킷은 서버가 오프라인이라는 것도, 안전하다는 것도 증명하지 않습니다. 그것은 이 검사가, 이 경로에서, 이 순간 받아들여지지 않았다는 것만 증명합니다.

관련 글