나는 다음과 같은 설정을 가지고 있습니다 :
- 데이터 소스(IP
192.168.178.1
)는 UDP 패킷을 서버로 보냅니다. - 서버(Debian)는 UDP 데이터(IP
192.168.178.10
, 포트4000
) 를 수집하고 처리합니다. - PC(Windows 10)는 UDP 데이터(IP
192.168.178.22
, 포트4000
) 를 모니터링해야 합니다.
아이디어는 UDP 데이터를 복사하여 사용하는 것입니다 iptabels
. 규칙은 Debian 서버(IP 192.168.178.10
)에 설정됩니다.
iptables -t mangle -A PREROUTING -p udp --dport 4000 -j TEE --gateway 192.168.178.22
효과는 다음과 같습니다:
- 서버는 여전히 UDP 데이터를 수신하고 처리합니다(정상).
- PC에서도 데이터를 수신하지만잘못된대상 IP. 따라서 모니터링 소프트웨어는 이 데이터를 처리하지 않습니다.
PC에서 Wireshark는 대상 주소가 PC의 IP(.22)가 아니라 서버의 IP(.10)임을 보여줍니다.
Internet Protocol Version 4, Src: 192.168.178.1, Dst: 192.168.178.10
이제 두 가지, 어쩌면 세 가지 질문이 있습니다.
- 전달된 UDP 패킷의 대상 IP 주소가 일치하지 않기 때문에 PC가 전달된 UDP 패킷을 수신하는 이유는 무엇입니까?
- iptables 규칙의 IP 주소를 PC의 IP 주소로 변경하는 방법은 무엇입니까? 어쩌면 POSTROUTING에 대한 규칙을 추가해야 할까요?
- 체크섬을 업데이트해야 합니까?
답변1
이 문제에 대해 다음과 같은 해결책을 찾았습니다.
대상이 아닌 소스에서 UDP 패킷을 복사합니다. 이 규칙은 PC(.22)에서 나가는 모든 UDP 패킷을 복사하여 서버(.10)로 보냅니다.
sudo iptables -t mangle -A OUTPUT -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10
서버에서 대상 주소는 여전히 PC의 주소이므로 서버의 IP 주소로 변경해야 합니다.
sudo iptables -t nat -A PREROUTING -p udp --dport 4000 -j NETMAP --to 192.168.178.10
이제 서버와 PC 모두 올바른 대상 주소가 포함된 UDP 패킷을 수신하므로 소프트웨어는 데이터를 수락합니다.