ip 없이 nat(MASQUERADE) 를 구현하려고 합니다.

salbang2의 이미지

안녕하세요? 병아리 개발자입니다. 개발자 에게는 해당 목표가

나왔을 때 구현이 가능하다 안하다는 명확한 판단을 할 수 있는 능력이 중

요하다고 생각합니다. 현재 IP 없이 NAT 를 구현하려고 합니다. 아직은

능력 부족으로 이게 구현 가능하다 안 하다라는 판단이 얼른 서지는

않습니다만, 일단은 구현 가능하다는게 제 생각입니다.

다음은 그에 다른 몇가지 질문인데요,

시스템에 IP 를 주지 않고 NAT 를 구현하려고 할 경우

커널의 NETFILTER 를 보면, NAT 관련 부분에서 routing table 을 참조하

여 gateway 를 바꿔주는 것으로 알고 있습니다.

IP 가 없게 되면, routing table 이 없게 되고, 그렇게 되면, 일반적으로는

Destination Unrechable 신호가 전송 될 것입니다만, interface 가

promisc 모드로 돌아 가고, NAT 시에 routing table 을 참조하지 않고,

직접 관리자로 부터 입력 받는 방법을 이용하면 될 것 같습니다만, 물론

이렇게 할려면, IP LAYER 중간중간에 routing decision 하는 곳, routing

table 을 참조하는 부분을 건너 뛰도록 한다는 전제 하에서입니다.

이에 대한 여러분들의 의견을 들어 보고 싶습니다. NETFILTER 관련하여

개발을 해 보신분이나, 특히 주의해야할 부분이나, 그건 불가능하다라는

등등의 경험 많은 분들의 의견을 들어 보고 싶은 겁니다. 특히 주의해야할

부분이나 꼭 신경 써야지 되는 부분등에 대해서도 많은 조언 해주셨으면

좋겠습니다.

그럼, 좋은 하루들 되십시오.

kyong의 이미지

NAT는 IP 위에 세워진 개념입니다.
첨엔 IP 고갈과 같은 문제를 해결하기 위해서요.
혹시 IP layer가 아닌 다른 레이어에서 조작하겠단 말씀인지?
IP없이 NAT box를 어떻게 접근할 수 있겠습니까.

salbang2의 이미지

제가 정확한 상황 설명을 못 드린 것 같군요.

일단은 datalink 에서 ip layer 에서 올라올 때 패킷이 버려질 수 있는

모든 부분을 module 을 등록해서 통과 시켰다는 전제하에서입니다.

kyong의 이미지

salbang2 wrote:
제가 정확한 상황 설명을 못 드린 것 같군요.

일단은 datalink 에서 ip layer 에서 올라올 때 패킷이 버려질 수 있는

모든 부분을 module 을 등록해서 통과 시켰다는 전제하에서입니다.

제 말은 여전히 유효합니다.
kernel module로 모든 프로토콜 데이터를 처리한다고 해서 될 문제가
아닙니다.
ip가 없는 network card를 promisc mode로 돌리고 패킷을 켭쳐 해
보세요. 어떤 패킷이 주로 오는지?
결국 그렇게 구성했다고 하죠.
routing에 필요한 device 정보도 직접넣어주고, 소위 주소변환을 잘한다고
하죠. 근데 promisc mode 돌아 가는 NAT box가 성능을 제대로 내면서 역할
을 하리라고 생각하지는 않습니다.

salbang2의 이미지

성능이 문제 될 거라는 말씀이신거죠?
제 생각은 조금 다릅니다.
하단의 client(사설아이피를 가진) 수에 따라 다르겠지만, 제 생각에는 NAT BOX 에 그다지 큰 overhead 가 갈 것 같지는 않습니다. bridge 와 비교해 보면(bridge 역시 promisc mode로 돌아 가기 때문에) 단지 여기에 주소 변환 하면서 드는 overhead 만이 더 소용 될 것으로 보입니다.

kyong의 이미지

salbang2 wrote:
성능이 문제 될 거라는 말씀이신거죠?
제 생각은 조금 다릅니다.
하단의 client(사설아이피를 가진) 수에 따라 다르겠지만, 제 생각에는 NAT BOX 에 그다지 큰 overhead 가 갈 것 같지는 않습니다. bridge 와 비교해 보면(bridge 역시 promisc mode로 돌아 가기 때문에) 단지 여기에 주소 변환 하면서 드는 overhead 만이 더 소용 될 것으로 보입니다.

bridge 디바이스가 ip가 없다면 브리지로 묶인 디바이스가 ip를 갖을 것
이고 그러므로 promisc mode로 돌더라도 정상적인 트래픽을 받는 것입니다.
salbang2님께서 시스템에 ip가 없다고 말한 것은 이더넷을 들자면 이더넷
디바이스에 ip가 없다고 얘기 하신 것이지요.
내부망에 묶인 디바이스는 늘 broadcasting을 해야할 상황이란 것이죠.

IP NAT란 의미로 알아듣고 첨에 얘기 했는데, Frame NAT 를 구현하고 싶어
한다고 얘기하는 것이 맞을 것 같네요. 검색 해 보세요. 참고할 사이트가 많을
껍니다.

댓글 달기

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