VPN 캡처: tun0의 내부 패킷, eth0의 외곽 봉투
터널 인터페이스는 평문 패킷을, 물리 어댑터는 암호화된 봉투를 보여 줍니다. 캡처를 메타데이터 유출이라고 부르기 전에 둘 다 읽으십시오.
VPN 호스트에서 캡처한다고 해서 한 가지만 기록되는 것은 아니다. 커널은 패킷을 두 번 노출하는데, 물리 어댑터에서는 감싸인 채로, 터널 장치에서는 풀린 채로 나타난다. 인터페이스를 고르는 것은 두 이야기 중 어느 것을 읽을지 고르는 일이다. 캡처가 무엇을 증명하는가에 대한 대부분의 논쟁은 사실 어느 이야기가 수집되었는가에 대한 논쟁이다.
캡슐화는 두 가지 시점을 만든다
터널은 애플리케이션이 만든 패킷을 가져다 목적지가 VPN 서버인 새 패킷 안에 넣는다. 내부 형태는 tun0, wg0 또는 클라이언트가 만든 어떤 장치에서든 나타난다. 외부 형태는 그것을 네트워크로 운반하는 어댑터에 나타난다. 두 형태 모두 정당하며 서로 다른 질문에 답한다. 둘은 헤더도 읽는 사람도 다르므로 각각 따로 수집해야 한다.
sudo tcpdump -i tun0 -n -s 0
sudo tcpdump -i eth0 -n host 198.51.100.20 and udp port 51820
이 비교에는 의사 인터페이스 any이 좋지 않은 선택이다. 전달된 패킷은 두 번 기록될 수 있고, 로컬에서 생성된 패킷은 두 형태 모두에 나타나므로 집계가 부풀려진다. 숫자가 불가능해 보이면 터널을 탓하기 전에 인터페이스를 확인하라.
터널 안에서 패킷은 평범하다
터널 장치에서 보이는 것은 애플리케이션이 커널에 보내 달라고 요청한 것이다. 목적지 주소, 포트, DNS 이름, TLS 서버 이름, 크기와 타이밍이 모두 있다. TLS 페이로드는 애플리케이션 자체 세션으로 암호화된 채 남으므로 캡처가 페이지 내용을 드러내지는 않는다. 평문 DNS 쿼리는 운반자가 암호화되어 있어도 애초에 보호된 적이 없으므로 여기에서 보인다.
암호화된 DNS는 그 보이는 필드 하나를 없앤다. 목적지 주소, 바이트 수, 리듬은 쿼리가 아니라 흐름의 속성이므로 숨기지 않는다.
바깥에서는 봉투와 그 형태뿐
물리 어댑터는 여러분의 주소, 서버 주소, 포트, 패킷 크기와 타이밍을 보여 준다. 내부에서 운반되는 목적지는 없지만 그 형태로 여전히 추론을 뒷받침할 수 있다. 크기와 주기는 어느 것도 이름 붙이지 않고 영상 스트림, 대량 전송, 채팅 세션을 시사할 수 있다. 가까운 관찰자는 대략 같은 모습을 보며, 이것이 터널이 자신의 존재를 광고하면서도 사이트를 숨길 수 있는 이유를 설명한다.
그 주장은 라우팅에 달려 있다. 더 좁은 경로, 터널로 들어가지 않는 IPv6 기본값, 또는 물리 인터페이스에 묶인 프로세스는 트래픽을 봉투 밖에 두게 된다. 캡처에서 결론을 내리기 전에 실제 경로를 읽으라.
피어 주소와 캡처 위생
TCP 모드의 OpenVPN은 설정된 소켓을 유지하므로 소켓 표가 피어를 지목할 수 있다. UDP 모드의 OpenVPN은 소켓을 연결되지 않은 채로 두는 경우가 많고, ss는 로컬 쪽만 보여 줄 수 있다. 대신 프로필의 remote, 자세한 클라이언트 로그, 또는 엔드포인트까지의 경로를 읽으라. WireGuard는 자신의 엔드포인트와 마지막 핸드셰이크를 직접 보고한다.
wg show
ss -tunp | grep 51820
캡처 파일은 그것을 만든 세션보다 오래 살아남는다. 복사할 수 있고, 로컬 접근 권한이 있는 누구든 읽을 수 있다. 조사에 필요한 것만 보관하고 권한을 제한하며, 작업이 끝나면 삭제하라.
공유 가능한 캡처는 어떤 인터페이스가 언제 만들었는지 밝혀야 한다. 그 메모가 없으면 다음 독자는 어느 계층을 보고 있는지 추측해야 한다.