두 피어(라우터 뒤의 각 피어)를 연결하기 위한 UDP 또는 TCP 홀 펀칭

두 피어(라우터 뒤의 각 피어)를 연결하기 위한 UDP 또는 TCP 홀 펀칭

내 컴퓨터를 (타사 서버 없이) 친구의 컴퓨터에 직접 연결하려고 합니다. 우리는 둘 다 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)에 다시 쓰는 대신 유지할 수 있습니다. 이 경우 질문에 제공된 솔루션이 작동할 수 있습니다. 그러나 이것은 무작위적인 행동입니다!

관련 정보