snat와 dnat

coolpac7의 이미지

보통 마스커레이드 설정은

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

이렇게 이루어 지는데요
그럼 패킷이 로컬네트워크에서 나가는 것은 잘 알겠는데
외부의 서버에서 응답이 돌아올때
NAT 서버에 돌아와서 DEMASQUERADE 는 따로 설정 해주지 않아도
자동으로 처리되는 건가요?

마스커레이딩 뿐 아니라 SNAT 처리가 된 모든 패킷도 외부에 나갔다가
응답이 돌아오면 다시 수신자 조정이 일어나는건지 궁금합니다.

제 생각으로는 애당초 SNAT처리를 해줄때 원래의 발신자 주소를 완전히 지우는 것이
아니라 패킷의 IP 해더에 덧붙이는 처리를 해주는것이 아닌가 생각이 들기는
합니다만.. 정확히는 잘 모르고 하우투 문서에도 언급이 없길래 질문드립니다.

정리하면
1. SNAT 또는 DNAT 처리를 할 때 구체적으로 패킷 레벨에서 어떤 처리를 하는가?
수신지, 또는 발신지의 주소를 완전히 삭제하고 바꾸는가 아니면 다른 방법을 사용하는가?
2. 외부 서버의 응답이 NAT 서버에 돌아왔을 때 이 응답이 내부 내트워크의 특정 호스트
로 향해야 한다는 사실을 어떻게 아는가?
3. 덧붙여서 IP_FORWARD 설정은 무엇을 의미하는가?

알려주시면 감사하겠습니다. ^^

사랑천사의 이미지


제가 겪었던 것인데... 답변 달아 주신 분들의 글을 잘 보시면 정답이 있습니다. 어떻게 패킷이 오고 가는걸 중간에서알아서 처리 해 주는지를...

http://kldp.org/node/73253

흐흠.
----
Lee Yeosong(이여송 사도요한)
E-Mail: yeosong@gmail.com
MSN: ysnglee2000@hotmail.com
----
웃음... 행복... 평화... (진정한...) 희망... 사랑... 이 세상 모든것이 그렇다면 얼마나 좋을까...(꿈 속의 바램일 뿐인가...)

사람천사

coolpac7의 이미지

말씀하신 자료를 보았습니다.
그렇지만 완전히 풀리지는 않더군요..

말씀하신 자료에 이런 문구가 있는데요

10.0.37.97 머신은 NAT 테이블에서 찾아낸 원래 출발지 주소 정보를 이용해 목적지 주소를 192.168.1.4 로 바꾸어 전달합니다.

제 질문의 핵심은 외부에서 응답을 해서 날라온 패킷이 nat 서버에서
nat서버 자체가 요청한 것에 대한 응답인지 아니면 nat서버에 연결된
로컬에서 요청한 응답인지에 대한 구분을 어떻게 하느냐 입니다.
만약 nat서버에서 특정 웹 싸이트에 대한 요청 패킷을 보내고
nat서버의 로컬 호스트에서도 같은 싸이트에 요청 패킷을 보내면
이 둘에 대한 응답이 우선 nat에 올텐데 이 둘을 구분하여
nat것은 nat가 상위 계층으로 넘기고 호스트 것은 호스트에 전달 해주어야
할텐데요..

또한 만약 어떠한 방법을 통해서 nat서버의 호스트가 받아야 할 패킷임을 알았다 하더라도
사용자는 nat서버에 prerouting 설정(dnat)을 따로 해준 적이 없는데 그것이 자동으로
잘 이루어 지는가에 대한 문제입니다.

혹시 이 내용과 관련된 문서나 책이라도 있다면 알려 주시면 감사하겠습니다.

bus710의 이미지

좀 오래된 책인데 '리눅스 네트워크 관리자 가이드'는 어떨까요?

akudoku.net

life is only one time

bushi의 이미지

기술적인 내용은 소스를 보시면 되겠지요.
2.6 커널에선 net/ipv4/netfilter/*_nat_*.[ch] 를 보시면 되겠습니다.

manip_pkt 라는 prefix 또는 suffix 를 가지는 함수들이 ip manipulation 을 담당합니다.
nat_core 에서 각 프로토콜의 콜백을 호출하는 구조로 되어 있습니다.
프로토콜 단까지 가실 필요까지는 없다고 생각되고... nat_core 만 보셔도 되겠습니다.

coolpac7의 이미지

감사합니다.
제가 리눅스에 입문한지 얼마 되지 않았고
유닉스 기반 프로그래밍도 이제 막 시작하는 단계라
아직 무리가 있겠군요
더 공부하고 열어 봐야 겠습니다.

사랑천사의 이미지

이미 밑으로 내려 가 버린 글타래지만.. 굳이 다변을 달자면...

제가 유심히 봐 주시길 바란 부분은 NAT되는 장비에 NAT에 관련된 테이블이 있고 거기에 SNAT로 주소 변경해서 보낸 패킷에 대한 정보가 보관 된다고 하는 부분이 잇습니다. 그걸 말 한 겁니다.

그리고, 그럼 패킷을 받은 곳에서 돌려 보낼 때는 뭐냐.. 그건 TCP/IP 아래 단에서 일어 나는 것일 태니 전 잘 모르겠습니다. 전 OSI7계층도 모르고 뭐도 모르는 TCP/IP도 아주 조금밖에 모르는 얼치기 관리자라고... 도 할 수 없는 사람입니다. 그러니 뭐 더 도움이 되 드릴 수는 없을 거 같습니다. 몇일 동안 책 보고 뭐 하고 하고 오니 이 글이 밑으로 깔려 버렷네요 흐흠.
----
Lee Yeosong(이여송 사도요한)
E-Mail: yeosong@gmail.com
MSN: ysnglee2000@hotmail.com
----
웃음... 행복... 평화... (진정한...) 희망... 사랑... 이 세상 모든것이 그렇다면 얼마나 좋을까...(꿈 속의 바램일 뿐인가...)

사람천사

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.