내부 웹 서버로 포트 포워딩을 하고 싶습니다.

eminency의 이미지

현재 외부에 물려 있는 윈도 서버와 리눅스 서버가 있습니다. 게이트웨이는 윈도 서버(192.168.0.1)를 이용하고 리눅스 서버는 내외부에 모두 고정 ip로 연결되어 있습니다(내부 : 192.168.0.102, 외부 : 1.1.1.1(가정)).

사내용 웹서버는 192.168.0.18인데 이를 리눅스 서버를 통해 외부에서도 볼 수 있게 하고 싶습니다(외부에 파견나가 있는 인원들 때문에).

검색해 본 바로는 다음과 같이 iptables 룰을 추가하면 되는 것 같던데...(/etc/sysconfig/iptables)

(...생략...)
*nat
-A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 192.168.0.18:80
COMMIT

실제로 1.1.1.1로 접속해보면 오랫동안 브라우저가 응답을 기다리다가 서버를 찾지 못한다고 나옵니다.
접속하자마자 에러가 뜨지 않는 걸로 보아 무언가 패킷은 처리가 되고 있는 듯 하긴 합니다만...;

제 생각엔 위의 룰은 들어오는 패킷에 대해서만 처리하는 것 같은데 웹 서버가 응답해 주는 패킷에 대해서도 따로 정의를 해 주어야 하는게 아닌지요?

리눅스 서버는 레드햇 9이며 커널 2.4.20 입니다.
도움을 부탁드립니다.

송효진의 이미지

sysctl.conf
net.ipv4.ip_forward = 1

혹시 이게 문제일까요?
현재 커널에 적용하는건 /proc/ 밑에 같은 경로에 있습니다.

emerge money

wariua의 이미지

송효진님의 얘기 대로 ip_forward 시스템 변수(proc 파일 시스템에선 /proc/sys/net/ipv4/ip_forward 가상 파일)의 값도 확인을 해주셔야 하고, 추가로 한 가지 더 신경을 써주셔야 할 겁니다.

외부의 어느 클라이언트(IP 주소: 2.2.2.2)가 1.1.1.1:80으로 TCP 연결을 시도한다고 해보겠습니다. 그러면 현재 구성에서 일어나는 일은...


  • {2.2.2.2=>1.1.1.1} 패킷이 리눅스 장비에 도착

  • DNAT 규칙에 따라 패킷 주소가 {2.2.2.2=>192.168.0.18}로 변경

  • {2.2.2.2=>192.168.0.18} 패킷이 웹서버 장비에 도착

  • 웹 서버가 {192.168.0.18=>2.2.2.2}의 응답 패킷을 만들어서,

  • 기본 게이트웨이인 192.168.0.1로 전송

  • 윈도 장비는 그 패킷이 뭘까 잠시 고민한 후, 패킷을 버리거나 2.2.2.2로 전송

  • (윈도 장비가 패킷을 전송해 줬다고 하더라도) 2.2.2.2는 출발지 주소가 윈도 장비 주소로 되어 있는 패킷을 받게 되고, 따라서 패킷을 버림


언급하셨던 대로, 웹 서버가 응답 패킷을 윈도 서버가 아닌 리눅스 서버로 보내도록 할 수 있는 방법이 필요합니다. 가장 간단한 방법은 리눅스 서버를 거쳐서 웹 서버로 들어가는 패킷의 출발지 주소를 리눅스 서버의 LAN측 주소로 바꿔버리는 것입니다. 그러면 웹 서버는 당연히 리눅스 서버로 응답 패킷을 보낼 것이고, 리눅스 서버는 다시 주소를 원복시킨 후, 2.2.2.2로 패킷을 보내주게 됩니다. 인즉, nat 테이블에
-A POSTROUTING -d 192.168.0.18 -p tcp --dport 80 -j MASQUERADE

정도의 추가 규칙이 필요합니다.
----
$PWD `date`

$PWD `date`

eminency의 이미지

설명에 빠뜨렸습니다만 sysctl 설정은 이미 해 두었었구요

wariua님 말씀대로 룰을 추가하니까 바로 되네요.
예측이 맞아서 기분은 좋지만 아직도 공부할게 많군요, 좀 더 네트웍에 대해 봐야 겠습니다 ^^;;

답변해 주신 두 분 모두 감사드립니다.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

댓글 달기

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