나는 아직도 iptables 매뉴얼 페이지와 기타 문서를 읽고 질문과 답변을 파고들고 있습니다.
여기서 문제가 발생합니다. NAT를 설정할 때 다음과 같이 POSTROUTING 규칙을 사용합니다.
iptables -A POSTROUTING -t nat -j MASQUERADE -o eth0
패킷이 해당 체인에 도달하면 내부 호스트가 인터넷 연결을 초기화해야 하는 것 같습니다. 그렇죠? 들어오는 트래픽이 동일한 경로를 통해 라우팅되고 체인에 도달하지 않습니까? 나 맞아?
답변1
POSTROUTING 체인은 시스템을 떠나는 모든 패킷, 심지어 로컬에서 생성된 패킷까지 검사합니다(PREROUTING을 생략하고 대신 OUTPUT을 사용함).
이 규칙은 나가는 트래픽으로 제한됩니다 eth0
. "수신"은 라우팅되는 모든 트래픽을 나타냅니다(이를 POSTROUTING과 연관시키는 경우). 아마도 인터넷( eth0
)의 트래픽을 언급하고 있을 것입니다. 일반적으로 들어오는 트래픽은 eth0
시스템 외부로 전달되지 않습니다 eth0
.
POSTROUTING은 나가는 트래픽에만 영향을 미칩니다(그리고 연결의 첫 번째 패킷에만 영향을 줍니다). 응답이 도착하면 eth0
SNAT 연결의 일부로 인식되며 대상 주소(및 포트)는 자동으로 원래 값(대상이 덮어쓴 값 MASQUERADE
)으로 변환됩니다.
답변2
iptables에서는 연결의 첫 번째 패킷만 nat 테이블의 체인에 도달합니다(다른 테이블의 체인과 달리). 기존 연결과 관련된 패킷은 첫 번째 패킷을 처리할 때 설정된 매핑을 기반으로 자동으로 변환됩니다.
기존 연결과 일치하지 않고 NAT 테이블의 규칙과 일치하지 않는 수신 패킷이 도착하는 경우 NAT 없이 처리됩니다(여기에는 전달, 프로토콜 스택에 로컬로 전달 또는 폐기가 포함될 수 있음). 다른 테이블의 대상 IP 및 iptables 규칙).