사설 ip 에서 다른 망의 사설 ip 접속이 안되요

삽질토비의 이미지

질문을 하려고 글을 쓰긴 하는데 설명이 잘 될지 모르겠습니다.

리눅스에 랜카드 두개 꽂고, 하나는 WAN으로 다른 하나는 허브에 연결해서 iptables 의 masquerading 기법을 이용한 공유기 A와, 같은 방식으로 사용되는 공유기 B가 있습니다.

그림을 그리니까 이상하게 나오네요.
그냥 글로 하겠습니다.

A-0 : 공유기 기능을 하는 리눅스 시스템 (WAN : 100.100.100.100)
A-1 : A-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.0.10)
A-2 : A-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.0.20)
A-3 : A-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.0.30)

B-0 : 공유기 기능을 하는 리눅스 시스템 (WAN : 200.200.200.200)
B-1 : B-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.10.10)
B-2 : B-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.10.20)
B-3 : B-0 시스템과 허브로 연결된 내부 IP를 갖는 시스템 (LAN : 192.168.10.30)

A-0 과 B-0 이 각각 고정 IP 를 가지고 있고,
A-0 하위의 A-1~A-3의 시스템과 B-0 하위의 B-1~B3의 시스템 모두 인터넷을 사용하는데 문제는 없습니다.

그런데,
A-1에서 B-1로 ssh 접속을 하려고 하면, 안됩니다.
A-2에서 B-2로 ftp 접속을 하려고 하면 안됩니다.
A-0에서 B-2로 ftp 접속을 하면 잘 되는데,
결과적으로 공유기의 내부IP에서 다른 망에 있는 공유기의 내부 IP로 접속이 안된단 말입니다.

설명이 잘 됬는지 모르겠지만, 왜 그럴까요?

익명 사용자의 이미지

전 이걸 로미오와 줄리엣의 비극이라고 칭하죠... ㅋㅋ

기술적으로는 방화벽에 포트포워드를 사용해서
방화벽으로 요청되는 서비스를 해당 호스트로 직접연결하는
방법이 있구요...
(이럴 경우 외부에서는 방화벽이 마치 해당호스트 처럼 여겨집니다.)

다른 하나는 IP 대역대를 통일해서
VPN같은 솔루션을 이용하는 방법이 있습니다.

익명 사용자의 이미지

일단 NAT기반의 방화벽 내부에서 동작하는 호스트들은
TCP의 경우는 내부에서 시작해서 외부로 나가는 것만
성립될 수 있습니다.

특정한 설정없이 외부에서 방화벽 내부 호스트로는
TCP 커낵션(연결)이 성립되지 않는 구조입니다.

예를 들어볼께요...

로미오내 집에 전화가 안방에 한대라 온 집안 식구가 전화가지고
피터지게 싸웁니다. 줄리엣에게 전화가 걸려와도 혹은 전화를 걸려고 해도
안방에서는 염장질을 할 수 없어거든요...
그래서 로미오와 그 부모의 관계가 앙숙이 됬답니다.

그러던 어느날 이 전화를 저가형 교환기를 설치해서 사용하면서
로미오는 자기방에 편하게 전화를 할 수 있게 되었답니다.

그런데, 한가지 문제는 이 저가형 교환기는
외부에서 걸려오는 전화는 받을 수가 없는거에요...
자신의 전화는 자기만 받아야 하는데..
전화가 걸려와도 이 교환기가 어느 전화기에 교환을 해야하는지
모르기 때문이지요.

그런데... 이런 문제가 역시
줄리엣의 집안에도 있었던 거죠...
줄리엣이 그냥 전화가 하나 있었을 때는 로미오에게 전화가
걸려오면 받으면 되었는데..
줄리엣 부모들도 이 저가형 교환기를 사버린 겁니다

결국 로미오가 줄리엣에게 줄리엣이 로미오에게...
서로 전화를 걸 수 없게 되어 버린 겁니다.

둘은 전화로 더 이상 염장질을 할 수 없게 된것에
상심한 나머지...
독약을 먹고 함께... 죽었다는 슬픈이야기가... 있다고 ...

하여튼 이런 경우와 같은 경웁니다.

NAT로 구성된 방화벽뒤에 있는 호스트와 다른 NAT 뒤의 호스트간의
통신은 상당히 어려움이 많이 발생합니다.

일단은 포트포워드와 같은 것을 잘 이용하시구요...
A-2에서 B-2로 접속을 시도할려면
A-2에서 B-0으로 접속을 시도하고..
B-0이 포트포워드로 B-2에게 연결해서.
결과적으로는 A-2에서 B-2로 접속을 하게 하는 수 밖에는 없습니다.

ftp와 같은 것은 매우 까다롭기 때문에 고생좀 하실 듯하네요...

까나리의 이미지

공인 IP 가 아니면 서비스(http, ftp, telnet 등등)를 할 수 없습니다.

위분이 설명 잘 해주셨지만, 가장 간단하게 할 수 있는건 port forwarding 입니다. 공인 IP 에서 외부 Port 를 내부 PC 와 매칭시켜주는거죠~

익명 사용자의 이미지

두 망이 지역이 다르다면 몰라도,

A망과 B망 사이에 뭐가 있는 가에 따라 다릅니다.

A망과 B망 사이에 인터넷이 있다면 뭔가 다른, VPN같은, 서비스가 필요할 것이고,

A망과 B망이 1홉 거리 내지는 관리가능한 망에 있다면 A망과 B망 가는 길을 알려 주면 됩니다.

익명 사용자의 이미지

질문에서 거짓말을 하나 발견했습니다.

A-0에서 B-2로 접속이 된다는 것은 거짓입니다.

혹은 제가 위에 답변한 듯, A망 B망 사이에 누군가 ....

죠커의 이미지

둘다 다른 망에 있다면 중계 서버가 자료를 중계하는 Relaying이 정석이겠으나 두개의 사설 ip가 서로 접속하는 순간 중계할 서버가 있고 (이 경우엔 중계라 보다는 중매에 가깝겠습니다...) 하드웨어의 궁합이 맞다면 hole punching이 해답이 될 수 있습니다.

이 글을 Eric Raymond가 본다면 속도 hack이라고 분노하겠지만 MSN messenger도 hole punching이 가능하다면 hole punching을 이용하는 것으로 압니다. 그런데 p2p 형식의 프로그램 외에 server / client 형태에 hole punching이 적용된 형태가 있는지는 모르겠네요.

ixevexi의 이미지

Hole punching이 머에요? :oops:

구글에서 NAT Hole punching으로 검색하니
결과가 쭉 나오는데 -_-;;
대략 잘 모르겠네요..

C++, 그리고 C++....
죽어도 C++

댓글 달기

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