POSTROUTING 체인에서 SNAT가 발생하고 PREROUTING 체인에서 DNAT가 발생하는 이유는 무엇입니까?

POSTROUTING 체인에서 SNAT가 발생하고 PREROUTING 체인에서 DNAT가 발생하는 이유는 무엇입니까?

SNAT(소스 IP 및/또는 포트 수정) nat테이블 체인 에서 POSTROUTING, 즉 라우팅 후에 발생합니까? 체인 DNAT에서 (대상 IP 또는 포트 수정)이 왜 발생합니까? PREROUTING나는 후자가 다른 개인 네트워크를 가진 PC에 여러 개의 NIC가 있을 수 있고 대상 IP 주소가 여전히 공개적으로 라우팅 가능한 주소인 경우 PC가 패킷을 라우팅하는 방법을 모르기 때문이라고 생각합니다. 그러나 SNAT이것이 일어날 수 없는 이유가 없기 때문입니다 PREROUTING.

답변1

PREROUTING나는 그림에 표시된 것처럼 로컬 컴퓨터에서 나오는 모든 것이 테이블을 통과하지 않을 것이라고 확신합니다.이 멋진 ASCII 숫자에서.

답변2

일반적으로 SNAT의 주요 기준은 "주어진 인터페이스 외부의 트래픽"(예: -o eth0)입니다. 패킷이 나갈 인터페이스는 라우팅에 따라 결정되므로 표준을 적용하려면 POSTROUTING컨텍스트에서 실행해야 합니다.

DNAT는 패킷의 대상 주소를 다시 씁니다. 이는 패킷의 대상에 영향을 미친다는 의미입니다. 예를 들어 게이트웨이로 향하는 것처럼 보이는 패킷이 결국 다시 쓰여져 네트워크의 컴퓨터로 향하게 될 수 있습니다. 패킷이 실제로 필요한 곳으로 이동하도록 결정을 내릴 때 경로가 다시 작성된 대상을 고려할 수 있기를 원하므로 DNAT는 컨텍스트에서 실행되어야 합니다 PREROUTING.

답변3

체인 이름에서 알 수 있듯이 PREROUTING패킷이 수신되면 먼저 완료되므로 패킷이 가는 곳(목적지)을 기준으로 라우팅됩니다. 다른 모든 라우팅 규칙이 적용된 후 POSTROUTING체인은 출처(원본)를 기준으로 어디로 가는지 결정합니다.

예를 들어, 내 서버에서 전달(NATed)될 수신 포트는 모두 체인에서 PREROUTING로 정의되어 DNAT있고 NATed 인터페이스의 모든 패킷은 체인을 통과 POSTROUTING하므로 SNAT(이 경우) 필터 FORWARD체인을 통과합니다.

답변4

Linux에서 패킷 작업을 수행할 때 체인 관점에서 일반적인 경로는 패킷 경로의 첫 번째 체인인 PREROUTING과 마지막 체인인 POSTROUTING입니다. 라우터에는 특정 흐름에 대한 IPsec VPN 터널 선택과 같은 일부 변환을 포함하여 많은 구성이 있는 경우가 많습니다. 일반적으로 SNAT의 목적은 공용 네트워크에 연결된 호스트가 연결할 수 있는 주소로 패킷을 보내는 것입니다. 이러한 변경은 IP 주소 혼합을 방지하기 위해 OUTPUT 이전의 POSTROUTING 수준에서 라우터를 떠나려고 할 때 패킷에 적용됩니다. 마찬가지로, 반대 방향에서 라우터가 가장 먼저 기대하는 것은 패킷이 스택을 통과할 때 구성을 기반으로 내린 결정을 적용하기 위해 실제 흐름을 확인하는 것입니다. 이는 가장 초기 단계, 즉 PREROUTING에서 DNAT를 수행하는 경우에만 달성할 수 있습니다.

관련 정보