문제
iptables를 사용하여 UDP 패킷의 대상 포트를 변경할 수 있습니까?
SNMP 에이전트가 162 대신 1620에 트랩을 보내도록하려고 노력하고 있습니다. 불행히도 지금까지는 소스 포트 만 변경했습니다.
iptables -t nat -a postrouting -p udp --dport 162 -j snat- -to : 1620
해결책
이 사용법은 분명히 지원되지 않습니다. 가져 왔습니다 http://www.netfilter.org/documentation/howto/nat-howto.txt:
6.3.7. 로컬로 생성 된 연결 대상 변경
NAT 코드를 사용하면 출력 체인에 DNAT 규칙을 삽입 할 수 있지만
이것은 2.4에서 완전히 지원되지 않습니다 (가능하지만 새로운 것이 필요합니다.
구성 옵션, 약간의 테스트 및 코딩이 공정한 코딩이므로 누군가 Rusty가 작성하여 작성하지 않으면 곧 기대하지 않을 것입니다).현재 제한 사항은 대상 만 변경할 수 있다는 것입니다.
로컬 머신 (예 :`j dnat -to 127.0.0.1 ')은 다른 기계가 아닌 경우 답변이 올바르게 번역되지 않습니다.
다른 팁
어떤 기계를 보내는 지 알고 있다고 가정합니다.
iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
162 ~ 1620을 리디렉션 할 수 있습니다
iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620
@piedpiper가 옳았습니다. DNAT를 사용하면 IP 주소를 지정해야하지만 포트 리디렉션 만 수행하려면이 경우 -j 리디렉션이 작동 할 수 있습니다.
보다 http://www.netfilter.org/documentation/howto//nat-howto-6.html#ss6.2
Snat을 만드는 대신 DNAT를 사용해보십시오. SNAT는 Sourcenat를 의미하기 때문에 소스 포트가 변경되므로 DNAT는 귀하에게 작동합니다.
전환 규칙을 설정 한 다음 수정 된 포트로 패킷을 다시 주입 할 수 있습니다.
나는 Mac OS X에서 잠시 되돌아 왔지만 Linux에서도 같은 원칙입니다.http://blog.dv8.ro/2006/08/using-divert-sockets-on-mac-os-x.html
기본적으로 매우 간단한 투명 프록시를 만들어야합니다.