libipq를 사용한 패킷 변환 관련..
글쓴이: darkkim7 / 작성시간: 목, 2010/07/01 - 4:38오후
시스템은 아래와 같이 구성되어 있고 웹 리다이렉션 기능을 구현하려고 합니다. --내부 네트워크(192.168.10.x)-- ---------게이트웨이----------------- -----외부망------ | | | lan port wan port | | | | PC(192.168.10.100) |---|(192.168.10.1) (192.168.3.102)|---| | ----------------------------- ----------------------------------- ----------------- PC(192.168.10.100)에서 웹 브라우저를 실행하여 HTTP 패킷을 보내면 게이트웨이에서는 Destination Port가 80번인 TCP 패킷을 검출하여 IP 헤더의 Destination Addr를 임의의 주소( 예로 구글(66.249.89.104) 주소)로 바꿔서 외부로 보내는 프로그램을 작성하여 실행시켰습니다. 그런데, tcpdump로 확인해보니 게이트웨이에 의해서 목적지 주소가 변경된 syn 패킷이 wan 포트를 통해 외부로 정상적으로 나가고(체크섬 조작 정상), 구글(66.248.89.104)에서 wan port(192.168.3.102)로 ack 패킷이 들어오는 것은 확인하였으나, wan port에서 lan port로 패킷이 pass가 되질 않습니다. 왜 이런 현상이 발생할까요? 게이트웨이는 아래와 같이 NAT를 위해 iptables를 구성하였고, == iptables -t nat -L == Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 192.168.10.0/24 anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination 아래와 같이 'iptables -A FORWARD -p tcp --dport 80 -j QUEUE' 명령을 써서 제가 작성한 libipq를 이용하여 패킷을 변환하는 프로그램에 패킷이 전달되게 하였습니다. Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere DROP tcp -- anywhere anywhere tcp dpt:80 Chain FORWARD (policy ACCEPT) target prot opt source destination TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU QUEUE tcp -- anywhere anywhere tcp dpt:80 Chain OUTPUT (policy ACCEPT) target prot opt source destination 중간에 syn 패킷의 Dest Addr를 바꿔버려서 받으려 했던 ack 패킷의 Source Addr이 달라져 게이트웨이가 NAT 기능을 하지 못하는 것일까요? 고수 분들의 도움 부탁드립니다. 그리고, 혹시 무선 AP 장치와 같은 것에서 인증 되지 않은 단말의 웹 요청시 지정한 웹으로 리다이렉션 시키는 방법이 위와 같은 방법 말고 다른 것이 있으면 개략적이라도 설명 부탁드립니다.
Forums:
위에 드신 예에서
위에 드신 예에서
원본패킷과 변환된패킷의 목적지 주소가 명확하지 않습니다. 또 nat가 일어나는 상황인지, 아니면 포트만 바뀌는건지도 궁금하네요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
외부망에서
외부망에서 내부망으로 들어오는 패킷
(위에 드신 예에서 구글에서 wan port(192.168.3.102)로 들어오는 패킷은
FORWARD체인이 아닌 INPUT체인으로 들어오지 않나요?
제 생각으로는 PREROUTING쪽에서 패킷을 컨트롤 하는게 어떨까 싶습니다.
mangle의 PREROUTING쪽이나 nat의 PREROUTING쪽은 어떠신지요?
댓글 달기