로컬에서 생성된 UDP 트래픽을 전달/복제/미러링하는 iptables

로컬에서 생성된 UDP 트래픽을 전달/복제/미러링하는 iptables

저는 센서에서 데이터를 읽고 해당 데이터를 UDP를 통해 서버로 보내는 프로그램을 Raspberry Pi에서 실행하고 있습니다. 이 데이터를 디버깅하고 모니터링하기 위해 Raspberry Pi에서 iptables를 사용하여 이 UDP 데이터를 내 PC로 리디렉션했습니다.

sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000

사용된 IP 주소는
192.168.178.10 - 서버
192.168.178.22 - 디버깅에 사용된 PC입니다.

이것은 잘 작동합니다. 그러나 데이터는 PC에만 도달하고 더 이상 서버에는 도달하지 않습니다.

그래서 다음과 같은 방법을 사용하여 UDP 데이터를 PC와 서버 모두에 복사하고 전달하려고 했습니다.

sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.10 --dport 4000 -j TEE --gateway 192.168.178.22

나는 mangle/nat, POSTROUTING/OUTPUT/PREROUTING 등과 같은 다양한 매개변수 조합을 사용했습니다.

지금까지 두 대상 모두에 데이터를 보내지 못했습니다. 데이터가 로컬에서 생성되므로 -A OUTPUT이 작동해야 한다고 가정했습니다. 하지만 분명히 뭔가 빠졌습니다 ...

또한 다음을 사용하여 iptables 규칙을 지울 수 있습니다.

sudo iptables -F
sudo iptables -X

하지만 규칙은 여전히 ​​실행되며 처음부터 시작하려면 Raspberry Pi를 재부팅해야 합니다.

따라서 두 가지 질문이 있습니다.

로컬에서 생성된 데이터의 복제 및 전달은 어떻게 작동합니까?
규칙은 어떻게 효과적으로 삭제됩니까?

지금까지 찾은 예는 모두 들어오고 나가는 트래픽에 적용되지만 로컬에서 생성된 데이터에는 적용되지 않습니다.

답변1

이제 우연히 해결책을 찾았습니다.

sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000

sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10

이것은 잘 작동하지만 단일 규칙으로 이것이 가능할 것이라고 예상했기 때문에 불필요하게 복잡한 것 같습니다.

어쩌면 누군가 이것을 단순화하는 방법에 대한 아이디어를 가지고 있을 수도 있습니다.

관련 정보