iptables를 사용한 SNAT에 대해 몇 가지 질문이 있습니다. 내 LAN에 개인 IP를 할당하기 위해 DHCP 서버를 수행하는 라우터가 하나 있고 내 LAN의 호스트에 대한 NAT가 공용 인터넷에 액세스할 수 있다고 가정합니다.
라우터에는 두 개의 인터페이스가 있습니다. 하나는 동적 공용 IP가 있는 "eth0"이고 다른 하나는 개인 IP가 192.168.0.1이고 서브넷이 192.168.0.0/24인 "eth1"입니다. 해당 라우터에서 ipv4 패킷 전달이 활성화되어 있다고 가정합니다. 내 LAN에 있는 호스트에서 공용 인터넷으로 패킷의 소스 IP를 가장하기 위해 NAT 테이블에 하나의 규칙을 설정해야 한다는 것을 알고 있습니다. 이 규칙은 아래 규칙과 유사할 수 있습니다.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
내 LAN의 패킷에는 인터넷 라우팅을 위해 공용 IP가 필요하기 때문에 규칙이 필요한 이유를 이해합니다.
PREROUTING
그러나 대상 IP 주소를 수정하기 위해 응답 패킷에 대해 체인 에 다른 규칙을 설정할 필요가 없는 이유를 이해할 수 없습니다 .
해당 응답 패킷의 대상 주소 수정이 방금 설정한 MASQUERADE 규칙의 기본 동작입니까?
그리고 또 다른 질문은 iptable이 어떤 패킷을 수정해야 하는지 어떻게 알 수 있느냐는 것입니다.
감사합니다.
답변1
iptables NAT는 상태 저장입니다. 'nat' 테이블을 사용하면 자동으로 로드됩니다.콘트랙활성 연결 목록을 유지하고 어떤 패킷이 어떤 연결에 속하는지 인식하는 시스템입니다. conntrack 시스템은 iptables 규칙과 별도로 작동하는 내부 후크를 등록하고 인식하는 패킷을 자동으로 변환합니다.
conntrack -L
( /proc/self/net/nf_conntrack을 사용하거나 통해 conntrack 상태 테이블을 볼 수 있습니다 .)
이 시스템을 사용하면 'nat' 테이블의 규칙은 실제로 다음과 일치합니다.초기의모든 단일 패킷이 아닌 각 연결에 속하는 패킷입니다. 초기 패킷이 일치되면 해당 conntrack 항목은 NAT가 필요한지 여부로 표시되고 추가 패킷은 'nat' 테이블을 거치지 않고도 자동으로 변환됩니다.