IPTABLES: 로컬에서 패킷을 처리하고 복사본을 다른 호스트로 보냅니다.

IPTABLES: 로컬에서 패킷을 처리하고 복사본을 다른 호스트로 보냅니다.

이 작업을 수행하기 위해 iptables를 구성하는 데 문제가 있습니다. 일부 클라이언트는 서버에 메시지를 보냅니다. 호스트 서버가 메시지를 로컬(일반적으로 호스트 A)로 처리하기를 원하지만 추가적으로 각 메시지(tcp 패킷)에 대해 패킷 복사본을 다른 호스트(수정된 버전의 서버를 실행하는 호스트 B)로 보내고 두 서버를 비교할 수 있도록 동일한 메시지가 어떻게 작동하는지 확인하고 싶습니다.) 이 작업은 iptables를 사용하여 수행해야 합니다. 다음 명령을 시도했습니다. 이들은 B로 패킷을 보내지만 호스트 A는 메시지를 처리하지 않습니다(두 번째 명령으로 수행해야 합니까?).

iptables -t nat -A PREROUTING -p tcp --dport 31090 -j DNAT --to-destination IP_HOST_B:32090
iptables -t nat -A POSTROUTING -p tcp --dport 32090 -j SNAT --to-source IP_HOST_A:31090

내 목표를 달성하기 위해 내 구성에서 누락된 것은 무엇입니까?

감사해요.

답변1

몇 가지 참고사항:

  • SNAT는 설명에 설명된 방식으로 작동하지 않습니다. SNAT는 소스 IP를 교체하지만 대상 IP는 변경하지 않습니다. 패킷이 2가지 규칙을 통과한 후에는 다음과 같은 결과가 발생합니다.
    • 소스: IP_HOST_A:31090
    • 목적지: IP_HOST_B:32090
  • DNAT나 SNAT 대상 모두 패킷을 복사할 수 없습니다.

패킷을 복사하려면 TEE 대상을 사용할 수 있습니다. cf man iptables-extensions:

   The TEE target will clone a packet and redirect this clone
   to another machine on the local network segment. In  other
   words, the nexthop must be the target, or you will have to
   configure the nexthop to forward it further if so desired.

   --gateway ipaddr
          Send the cloned packet to the host reachable at the
          given  IP  address.  Use of 0.0.0.0 (for IPv4 pack‐
          ets) or :: (IPv6) is invalid.

귀하의 경우에는 다음이 제공됩니다.

iptables -t mangle -A POSTROUTING -p tcp --dport 31900 -j TEE --gateway IP_HOST_B

그러나 TCP가 사용되기 때문에 이 패킷 복제가 귀하의 경우에 적합한지 의심됩니다. TCP는 클라이언트와 서버 간의 연결을 설정하도록 설계되었습니다. 여기서는 하나의 클라이언트와 2개의 서버의 상황이 있습니다. 문제가 있을 것입니다.

관련 정보