dnat를 수행할 때 iptables의 대상 인터페이스를 언급할 수 있습니까?

dnat를 수행할 때 iptables의 대상 인터페이스를 언급할 수 있습니까?

아래와 같이 dnat에 iptables를 사용하려고 합니다.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 10.0.0.1:9000

output interfaceiptables나 라우팅 테이블을 사용하는 것이 유일한 방법이라고 말할 수 있습니까 ?

답변1

Can't use -o with PREROUTING이는 다음과 같은 이유로 명령이 지시()하기 때문에 불가능합니다 .

  • DNAT는 이름에서 알 수 있듯이 nat/PREROUTING에서 발생합니다.앞으로라우팅 결정.
  • 라우팅 결정 전에 라우팅 스택은 결정에 사용되지 않았습니다.무엇출력 인터페이스가 됩니다(호스트 자체가 아닌 경우 iptables의 필터에는 출력 인터페이스가 전혀 없습니다). 따라서 이 정보는 nat/PREROUTING에 사용할 수 없으며, 이것이 출력 인터페이스 지정이 허용되지 않는 이유입니다. 보유하지 않은 (메타)데이터를 일치시킬 수 없습니다.

이것은개략도작동 방식을 설명하세요.

일반 네트워크의 Netfilter 및 패킷 흐름

라우팅 결정은 결코 다음에 의해 이루어지지 않습니다.웹 필터또는iptables, 그러나 라우팅 스택을 통해. 따라서 특정 라우팅을 위해서는 ip route라우팅 스택(...)을 사용해야 합니다.때때로iptables 없이 이 작업을 수행할 수 없는 경우 iptables를 사용하여 패킷에 표시를 설정함으로써 라우팅 스택을 올바른 방향으로 푸시할 수 있습니다. 그러나 라우팅 부분이 까다로울 수 있습니다.

특정 요구 사항이 있는 경우 질문에 이러한 사항을 질문해야 합니다. 질문은 또한 설명해야 합니다.뿐만 아니라어떻게당신은 이것을 피하기 위해 이것을하고 싶습니다XY 문제.

답변2

넌 할 수 없을 것 같아

 iptables -t nat -A PREROUTING -i eth0 -o eth0 -p tcp --dport 9000 -j DNAT --to-destination 10.0.0.1:9000
 iptables v1.8.4 (nf_tables): Can't use -o with PREROUTING

관련 정보