MASQUERADE 및 SNAT/DNAT에 대한 몇 가지 질문

MASQUERADE 및 SNAT/DNAT에 대한 몇 가지 질문

나는 SNAT와 DNAT가 무엇을 의미하는지 알고 있습니다. 인터넷 서비스를 열도록 로컬 웹 서버를 구성하려면 다음을 사용해야 한다는 것을 알고 있습니다.

  • SNAT는 로컬 네트워크 서버에서 라우터 주소로 들어오는 패킷을 변경하는 데 도움이 됩니다.
  • DNAT는 인터넷에서 서버의 로컬 네트워크 IP로 들어오는 패킷을 변경하는 데 도움을 줍니다.

그러나 MASQUERADE 공유 네트워크를 사용할 때는 인터넷에서 오는 이러한 패킷에 대해 DNAT를 구성할 필요가 없습니다. 일부 기사에서는 MASQUERADE가 라우터의 외부 IP를 자동으로 조회한다는 점을 제외하면 SNAT와 동일하다고 말합니다. 그런데 왜 MASQUERADE에 DNAT 구성이 필요하지 않습니까? MASUQERADE가 이러한 작업을 수행할 수 있다고 가정하면 DNAT를 설정할 때 iptables가 자동으로 SNAT를 설정하지 않는 이유는 무엇입니까?

편집하다

새로운 질문이 있습니다. 로컬 네트워크의 두 사용자가 동일한 웹 페이지를 탐색하고 있고 그들이 여는 클라이언트 포트가 동일하다고 가정합니다. 웹 서버가 라우터에 대한 데이터 패킷으로 응답할 때 라우터는 이러한 데이터 패킷이 어떤 사용자에게 속하는지 어떻게 알 수 있습니까?

답변1

conntrackSNAT와 DNAT는 모두 커널의 연결 추적( ) 기능을 사용하여 들어오고 나가는 패킷에 대한 주소 변환을 수행합니다. 따라서 커널이 역방향 패킷이 NAT 연결에 속해 있음을 감지하면 특별한 규칙 없이 자동으로 역변환을 수행합니다.

그렇기 때문에 예를 들어 단일 SNAT 규칙이면 충분합니다(다른 방향의 DNAT 규칙이 있어도 문제가 되지는 않지만).

예, MASQUERADE는 기본적으로 인터페이스에서 가져온 주소를 가진 SNAT입니다. 인용하자면 man iptables-extensions:

매스커레이딩은 패킷이 시작된 인터페이스의 IP 주소에 대한 매핑을 지정하는 것과 동일하지만 인터페이스가 다운되면 연결을 잊어버릴 수도 있습니다.

그런데 SNAT = 소스 NAT(패킷의 소스 주소 변경) 및 DNAT = 대상 NAT(패킷의 대상 주소 변경)를 기억하는 것이 더 쉽다는 것을 알았습니다.

편집하다

(일반적으로 새로운 질문은 별도의 질문으로 질문해야 합니다.)

netstat로컬 컴퓨터에서 실행 중인 애플리케이션과 다른 호스트 간의 연결만 표시됩니다. 커널 연결 추적은 표시되지 않습니다. 이에 대한 정보는 /proc(예: ) 및 패키지의 기타 유틸리티에서 찾을 수 있습니다./proc/net/nf_conntrackconntrack

네트워크 계층은 "사용자"에 대해 아무것도 모릅니다. 연결은 소스 주소, 소스 포트, 대상 주소 및 대상 포트로 구성됩니다. 이것이 네트워크 계층이 아는 전부입니다. 포트가 이미 사용 중인 경우 소스/대상 주소와 대상/소스(즉, 로컬) 포트 번호를 다른 번호로 대체하여 NAT(Network Address Translation)를 수행합니다.

따라서 서로 다른 호스트에서 동일한 포트(자신의 컴퓨터)를 가지고 있지만 NAT가 적용되지 않은 두 명의 사용자는 NAT가 적용된 호스트에서 서로 다른 포트를 갖게 됩니다. 동일한 시스템에 있는 두 명의 사용자는 처음에는 항상 다른 로컬 포트를 사용하므로 이는 문제가 되지 않습니다. 사용자가 동시에 두 개의 연결을 여는 경우에도 마찬가지입니다.

관련 정보