다음과 같은 상황에서 DNAT의 메커니즘을 이해하려고 하다가 혼란스럽습니다.
내 이해:
DNAT = 목적지 네트워크 주소 변환(Destination Network Address Translation): 들어오는 패킷의 목적지 주소를 목적지 x로 변환하는 기능.
DNAT 복구 경로를 이해하는 데 문제가 있습니다.
예: IP 주소 x1을 가진 컴퓨터(A)가 있고 이 컴퓨터(대상 y1)에 도착하는 모든 연결/패킷이 IP 주소 z1을 가진 다른 컴퓨터(B)로 다시 라우팅되기를 원합니다.
그래서 다음과 같은 새로운 NAT 규칙을 추가했습니다.
iptables -t nat -A PREROUTING -s x1 -d y1 -j DNAT --to-destination z1.
머신 A에서 테스트:ping -I x1 y1
머신 A에서 실행 하면 tcpdump -i eth6 icmp
z1 대신 IP y1에서 응답을 받게 됩니까? 아니면 서브넷 마스크를 기반으로 하는 NAT가 아닌 것인가요?
모니터링할 때 tcpdump -i eth6 host z1
들어오는 핑이나 패킷이 없습니다. 누군가 이 상황과 나의 이해를 명확히 할 수 있습니까?
또한 패킷이 로컬로 변환되는 경우 이 tcpdump를 만들 수 있습니까?
답변1
전달을 위해평평한요청할 때 다음과 같이 ICMP 프로토콜을 명시적으로 지정해야 합니다.
iptables -t nat -I PREROUTING -d <ip y1> -p icmp -j DNAT --to-destination <ip z1>
그러나 PREROUTING
머신 자체에서는 실행되지 않습니다. 작동하려면 머신 A가 핑하는 머신 B와 사용자 사이에 있어야 합니다.
YOU(ip x1) <---internet---> (ip y1) Machine A(ip z0) <---NATed LAN---> (ip z1)Machine B
이것은 매력처럼 작동합니다.
내 컴퓨터( )에서 y1을 ping할 때 IP 주소 y1( ) 및 z0( )을 사용하는 10.0.0.1
컴퓨터 A에서 나타나는 모습은 다음과 같습니다 . 머신 B(z1)의 IP 주소:10.10.0.73
10.0.0.32
10.10.0.1
16:23:54.181828 IP 10.0.0.32 > 10.0.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.181860 IP 10.10.0.73 > 10.10.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.182788 IP 10.10.0.1 > 10.10.0.73: ICMP echo reply, id 25492, seq 0, length 64
16:23:54.182806 IP 10.0.0.1 > 10.0.0.32: ICMP echo reply, id 25492, seq 0, length 64
답변2
당신의 실수는 그것을 의미있게 만들기 위해 세 가지 시스템이 필요하다는 것입니다.
A -----> B
로 교체해야합니다
A -----> B -----> C
이 경우 패킷이 외부에서 시스템으로 전달되므로 PREROUTING
체인을 열어야 합니다 .B
그러나 패킷이 생성된 동일한 시스템에서 사용하는 경우 해당 패킷은 로컬에서 생성된 패킷이므로 iptables
전혀 통과되지 않습니다. PREROUTING
두 시스템을 모두 사용하여 다음을 수행할 수 있습니다.
A -----> B
로 교체해야합니다
A -----> C
( C
테스트 DNAT에 응답이 필요하지 않은 경우에는 존재할 필요가 없습니다.)
이 경우 다음과 같은 규칙이 필요합니다.
iptables -t nat -A OUTPUT -d y1 -j DNAT --to-destination z1
하지만 목적지 주소를 자신의 주소로 변경하면 패킷이 eth6
전혀 도착하지 않습니다. 당신은 그것을 볼 필요가 있습니다 tcpdump -i lo -n
.