
저는 센서에서 데이터를 읽고 해당 데이터를 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
이것은 잘 작동하지만 단일 규칙으로 이것이 가능할 것이라고 예상했기 때문에 불필요하게 복잡한 것 같습니다.
어쩌면 누군가 이것을 단순화하는 방법에 대한 아이디어를 가지고 있을 수도 있습니다.