Windows 컴퓨터에서 2 개의 네트워크 인터페이스간에 NAT를 수행하는 응용 프로그램을 개발 중이며 진행 상황을 이해하는 데 약간의 문제가 있습니다.NAT 구현
시스템 2 네트워크 인터페이스가있다 :
- 물리적 네트워크 인터페이스 (00 : 0 C 29 : BC : 4C : 192.168.133.130 11)의 게이트웨이로서 0시 50분 56초 사용 eb : f5 : 15 - 192.168.133.2 (VMware에서 운영)
- 게이트웨이로 사용하는 응용 프로그램에서 사용하는 가상 TAP 네트워크 인터페이스 (00 : ff : 15 : 08 : ac : 26 192.168.200.100) : 03 : 03 : 03 : 03 - 192.168.200.1 (내 응용 프로그램에 의해 운영) 내 응용 프로그램이 무엇
:
개- 응답은
- 가 무엇을 보여주기 위해 탭 인터페이스와 실제 일 사이에 ICMP, UDP와 TCP에 대한
을 일대일 NAT를 수행 192.168.200.1 요청 (가상 게이트웨이) ARP하기 계속 나는 (그것은 또한 Wireshark로 열릴 수있다)에 의해 붙잡은 패킷과 함께 .cap file을 붙였다. 이 테스트는 google.com:80과 TCP 연결을 설정하는 것입니다. 먼저 인터넷 연결이 있음을 증명하기 위해 실제 인터페이스를 통해 직접 연결이 설정된 다음 TAP 인터페이스를 통해 연결이 설정되어 NAT를 테스트합니다. 위에서 아래
패킷 분석 :
- 1 - TCP SYN-ACK 물리적 경우 통해 google.com로부터 수신 - TCP SYN 직접
- 2 물리적 인터페이스를 통해 전송 google.com
- 3 - TCP ACK 물리적 경우 google.com 통해 전송
- 4 - 연결
좋습니다, 우리는 인터넷에 연결되어 있습니다. 지금은 가상 라우터 내 응용 프로그램 (192.168.200.1)가 운영하는 기본 게이트웨이를 변경
- 5 - Windows가 기본 게이트웨이는 192.168.200.1로 변경 통지 및
- 를 192.168.200.1하는 ARP 요청을 전송 6 - 내 앱이 192.168.200.1이 03 : 03 : 03 : 03 : 03 : 03
- 에 있다고 응답합니다. 7 - TCP SYN이 google.com으로 TAP 인터페이스 (192.168.200.100)를 통해 가상 라우터 (192.168. 200.1)
- 8 - 내 앱이 패킷에 NAT를 수행합니다 (원본 및 대상 MAC 주소가 그에 따라 변경되고 IP 원본 주소가 192.168.133.130으로 변경됨). cal 인터페이스를 00 : 50 : 56 : eb : f5 : 15 (192.168.133.2)
- 9 - 다시 무응답 - 내 앱 NAT 동일한 방식으로 수행하고, 물리
- 11 경우에 상기 패킷을 전송 - 응답이
- 10 그래서 만약 제 TCP의 SYN가 TAP에 전송되고 수신되지 그래서 제 시도
- 12 이루어진다 - 내 앱 동일한 방법으로 NAT를 수행
NAT 물리적 인터페이스를 통해 전송되는 패킷은, 첫 번째 테스트에서 송신되는 것과 거의 동일한되면 네트워크 토폴로지에서는 아무 것도 변경되지 않습니다. 두 번째 TCP 연결이 실패한 이유는 무엇입니까? 그것은 아무 의미가 없습니다.
프로그램에서 WinPcap을 사용하고 있습니다. 관심이 있다면 Here 코드입니다.
테스트 응용 프로그램은 Ws2_32 \ socket 및 Ws2_32 \ WinAPI 함수를 사용하여 TCP 연결을 설정합니다. 그 후 테스트 응용 프로그램이 닫히고 소켓은 죽고 Windows는 RST를 보냅니다. 그것은 문제가 아니지만 .. 물리적 인 if를 사용하여 2 회 연속 테스트를 실행할 수 있습니다. 이 포트는 일대일 NAT (현재는)이므로 포트가 변환되지 않으므로 IP 만 수정되고 TCP는 변경되지 않습니다. – Chris
안녕하세요! 문제는 TCP 체크섬을 다시 계산하지 않는다는 것입니다. 두 SYN 메시지 (프레임 7과 8)는 동일한 TCP 체크섬을가집니다. IP 주소가 변경되면 TCP 체크섬이 변경되어야합니다. 내 대답을 편집 할게. – rodolk
당신이 옳습니다! 나는 Wireshark에서 "TCP 체크섬 유효성 검사"를 사용했고 패킷 8에는 유효하지 않은 TCP 체크섬이 있습니다. 하지만 왜? TCP 패킷은 변경되지 않았으며 TCP 체크섬에는 TCP 헤더와 데이터 만 포함됩니다. TCP 체크섬에는 IP 헤더도 포함되어 있습니까? – Chris