내 컴퓨터를 (타사 서버 없이) 친구의 컴퓨터에 직접 연결하려고 합니다. 우리는 둘 다 ISP 라우터 뒤에 있으며 (도전으로!) 연결을 원합니다.라우터 구성을 수정할 필요가 없습니다..
제안을 따르세요여기그리고여기, 우리는 두 가지 유형의 TCP 홀 펀칭을 시도했습니다.
myself$ nc -p 7777 public-ip-friend 8888
friend$ nc -p 8888 public-ip-myself 7777
UDP로 구멍 뚫기:
myself$ nc -u -p 7777 public-ip-friend 8888
friend$ nc -u -p 8888 public-ip-myself 7777
그러나 그들 중 누구도 작동하지 않습니다.
이 문제를 어떻게 해결하나요?
참고: VPS(NAT 뒤에 있지 않음) <--> 내 집 컴퓨터(여전히 라우터 뒤에 있음)는 동일한 방법을 사용합니다.
답변1
질문에 제공된 명령이 작동하는 경우도 있지만 작동하지 않는 경우도 있습니다.
이유는 다음과 같습니다.
가정:
- 내 로컬 네트워크의 컴퓨터 IP: 192.168.1.10
- 내 공용 네트워크 IP: 203.0.113.10
- 내 친구의 공개 IP: 198.51.100.27
내 컴퓨터에서 이 작업을 수행할 때:
myself$ nc -u -p 7777 198.51.100.27 8888
NAT 변환 전에는 다음이 수행되었습니다.
srcip srcport destip destport
192.168.1.10 7777 198.51.100.27 8888
그러나 홈 라우터 NAT 변환 후에는 다음과 같은 결과가 나타납니다.
srcip srcport destip destport
203.0.113.10 55183(*) 198.51.100.27 8888
즉, 소스 IP가 NAT에 의해 다시 작성됩니다.소스 포트도 있습니다.
따라서 내 집 방화벽에 "구멍"이 생성되지만(내 친구의 198.51.100.27에서 오는 트래픽 허용) 포트 55183에 대한 것입니다.포트에는 적용되지 않음7777.
내 친구가 이 작업을 수행할 때 실패하는 이유는 다음과 같습니다.
friend$ nc -u -p 8888 203.0.113.10 7777
참고(*): 어떤 경우에는 라우터가 srcport=7777을 임의의 포트(예: 55183)에 다시 쓰는 대신 유지할 수 있습니다. 이 경우 질문에 제공된 솔루션이 작동할 수 있습니다. 그러나 이것은 무작위적인 행동입니다!