libipq를 사용한 패킷 변환 관련..

darkkim7의 이미지

시스템은 아래와 같이 구성되어 있고 웹 리다이렉션 기능을 구현하려고 합니다.
 
--내부 네트워크(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 장치와 같은 것에서 인증 되지 않은 단말의 웹 요청시 지정한 웹으로 리다이렉션 시키는
방법이 위와 같은 방법 말고 다른 것이 있으면 개략적이라도 설명 부탁드립니다.
mithrandir의 이미지

위에 드신 예에서
원본패킷과 변환된패킷의 목적지 주소가 명확하지 않습니다. 또 nat가 일어나는 상황인지, 아니면 포트만 바뀌는건지도 궁금하네요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

visualplus의 이미지

외부망에서 내부망으로 들어오는 패킷
(위에 드신 예에서 구글에서 wan port(192.168.3.102)로 들어오는 패킷은
FORWARD체인이 아닌 INPUT체인으로 들어오지 않나요?

제 생각으로는 PREROUTING쪽에서 패킷을 컨트롤 하는게 어떨까 싶습니다.
mangle의 PREROUTING쪽이나 nat의 PREROUTING쪽은 어떠신지요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.