ftp서버를 돌리려고 합니다.

dvvbstation의 이미지

리넷 3400PLUS 인터넷 공유기를 쓰고 있습니다.
192.168.10.100 서버 1
192.168.10.50 서버 2
로 내부 IP를 고정시켜 놓고 ftp서버를 돌리려고 합니다.
IP공유기 설정에서 가상서버설정에 각 IP를 할당시켰습니다.
192.168.10.100에는 21번 22번 80번 기본포트로 외부에서 접속이 가능하네요.
192.168.10.50으로 외부에서 8080포트로 아파치 서비스 되구요.
ftp 구성시에는 2121포트로 구성하려했는데 아래 메시지가 나와
인터넷 회선의 포트가 막혀있나 싶어 열려있는 8080포트로 설정을 변경하여 적용하였습니다.
---------------------------------------------------------
"서버가 라우트 불가능한 수동 응답을 보냈습니다. 수동 모드 실패함."
---------------------------------------------------------
8080으로 서비스해도 마찬가지네요.
ip공유기로의 서비스면 패시브 모드로한다는 말을 언뜻 들은것 같아
패시브 포트를 4000-5000으로 설정하여 기본포트를 8080으로 돌려도 안되네요.
단 내부 네트워크에서는 접속이 되네요.
문제는 무엇인지 조언 좀 구하고 싶습니다.

상태: Resolving address of xxx.xxxxxx.ne.kr
상태: Connecting to XXX.XXX.XXX.XXX:8080...
상태: 연결 완료. 환영 메시지를 기다리는 중...
응답: 220 ProFTPD 1.3.1 Server (ProFTPD Default Installation) [192.168.10.50]
명령: USER love
응답: 331 Password required for love
명령: PASS ****
응답: 230 User love logged in
명령: SYST
응답: 215 UNIX Type: L8
명령: FEAT
응답: 211-Features:
응답: MDTM
응답: REST STREAM
응답: SIZE
응답: 211 End
상태: 연결됨
상태: 디렉토리 목록 갱신 중...
명령: PWD
응답: 257 "/home/love" is the current directory
명령: TYPE I
응답: 200 Type set to I
명령: PASV
응답: 227 Entering Passive Mode (192,168,10,50,196,233).
상태: 서버가 라우트 불가능한 수동 응답을 보냈습니다. 수동 모드 실패함.
명령: PORT 192,168,10,75,8,141
응답: 500 Illegal PORT command
오류: 디렉토리 목록 갱신 실패
응답: 421 No transfer timeout (300 seconds): closing control connection
오류: Connection closed by server

검객의 이미지

패시브 모드일 경우 ftp 접속 과정을 보면 다음과 같습니다.
클라이언트가 서버로 접속합니다. 위의 로그를 보면 클라이언트가 서버의 8080포트로 접속을 했지요.

그 다음 파일 목록을 보거나 파일을 다운로드하는 용도로 사용할 새로운 연결을 시도 합니다.
이 연결의 경우 패시브 모드일 경우에는 클라이언트가 서버로 접속을 시도하고 패시브모드가 아닌경우에는
그 반대 입니다.

이때 클라이언트가 접속해야 하는 주소를 서버가 알려 주는데 특별한 설정이 없으면 자신의 아이피를 알려 줍니다.
위의 설정에서는 192,168,10,50 인것 같네요.

192,168,10,50는 아시다시피 공인 아이피가 아니므로 클라이언트는 접속을 할수 없습니다.
그래서
응답: 227 Entering Passive Mode (192,168,10,50,196,233).
상태: 서버가 라우트 불가능한 수동 응답을 보냈습니다. 수동 모드 실패함.
이런 메시지가 나옵니다.

ProFTP를 사용하시면 이런 문제를 해결해 주는 옵션이 있습니다.
MasqueradeAddress XXX.XXX.XXX.XXX

이 옵션을 주면 패시브 모드사용시 클라이언트가 접속해야 하는 주소를 XXX.XXX.XXX.XXX로 알려줘서
사설아이피에서도 정상 작동 합니다.

XXX.XXX.XXX.XXX 에는 위의 로그에서 x표 한 아이피 적어주면 됩니다.

우리 항시 웃고 살아요 ^^

dvvbstation의 이미지

답변해 주셔서 감사합니다.
말씀대로 하니 공인IP로의 접속이 가능합니다
다만 제가 셋팅에 있어서 잘못을 했는지 개념을 잘못 이해를 했는지 의문점이 있어
추가로 몇가지 질문 드립니다.

IP공유기로 사설 네트워크를 만들어서 쓸 경우에
PassivePorts와 MasqueradeAddress를 사용하여 정상적인 서비스가 가능하다는 말씀이시군요.
조금만 더 깊게 들어가고 싶습니다.
전 21번 포트만 열어서 서비스 하면 되는 줄 알았는데 데이터 전송에도 연결이 필요하다는 말씀은
즉슨 데이터 전송에 다른 포트를 사용한다는 것이군요.
그 포트가 활성모드일 경우에는 20번 포트이고 패시브모드일 경우에는 사용자가 지정한 범위의 패시브 포트를 말하는 것이 맞는지요.
패시브 포트를 서적에는 천 단위로 끊어서 주던데 그 포트 중 열려있는 포트로 전송이 된다는 것인지요?
활성모드일 때 서버에서 클라이언트로의 데이터 연결을 만들때 20번 포트를 사용하는데 20번 포트를 열어주지 않았는데도 외부에서 사용이 가능한 것도 궁금한 점입니다.

공유기설정부터 차근차근 서버 설정을 다시 한 번 건드려 보았습니다.
서버1 192.168.10.100:21 패시브 4000:5000
서버2 192.168.10.50:2121 패시브 5000:6000
클라이언트 192.168.10.75(윈도우,FileZilla)
로 쓸 것입니다.

한 번 봐주시면 좋겠습니다.
유동IP를 쓰고 ddns를 이용하고 있구요.
IP공유기 설정시 DMZ설정이라는 것을 해야 포트포워딩이 된다던데 개념도 모르는 초보라 공유기 셋팅이 쉽지 않더군요.
공유기 옵션에 두개의 사설IP로 DMZ설정시 WAN IP와 DMZ설정할 IP를 같이 넣게 되어있고
돌릴 서버는 2개인데 동일 WAN IP는 넣지 못하게 구성되어 있어 이 부분을 지나쳤습니다.
DMZ라는게 방화벽설정과 동일하다는 생각에서 가상서버 설정의 서비스 포트만 열어주었지요.
아파치도 이렇게 돌렸습니다.

가상서버셋팅 옵션에
IP를 192.168.10.100을 넣고 포트는 21번과 4000~5000열고
192.168.10.50을 넣고 2121과 5000~6000을 넣었습니다.
포트 중복되면 에러가 나더군요.

MasqueradeAddress를 공인IP로 준다는 것 ftp클라이언트 측에 내가 접속하는 주소가 공인 IP요
하고 말해줘서 공인IP와 공인IP로의 연결을 만든다는 뜻으로 이해를 하였습니다.
패시브 모드일 경우는 클라이언트의 IP가 공인 IP일 경우에 클라이언트와 공인 IP간의 연결이 이루어진다 하셨는데 이 부분에서 의문이 생깁니다.
패시브 모드로 변경 후 공인IP에서 사설IP로의 접속이 제한되고 있습니다.
즉 서버가 192.168.10.50일 때 마스커레이드된IP 121.XXX.XXX.XXX를 클라이언트인 192.168.10.75에 반환하므로 클라이언트는 공인IP가 되지요.
리눅스에서 gftp혹은 윈도우에서 filezilla를 사용해 사설192.168.10.50을 넣고 접속 시도시 연결이 되지 않습니다. 121.XXX.XXX.XXX를 넣고는 가능한데요.
혹시 공유기 셋팅에 문제가 있는지 짚고 넘어가 주시면 좋겠습니다.

한가지 의문점은 패시브 모드의
MasqueradeAddress에 유동 IP라 121.XXX.XXX.0으로 네트워크 주소를 써 주었는데
서버접속이 안되더군요. 121.XXX.XXX.0네트워크로 사설IP를 맵핑하므로
그 네트워크에서 찾아서 알아서 접속이 가능하겠지 생각했는데 아닌 것 같더군요.
쉘스크립트를 통해 proftpd의 MasqueradeAddress값을 자동으로 바꿔주면 좋겠지만
그게 가능한지도 모르겠고 이에 대한 방안으로는 어떤 것이 있을까도 궁금합니다.

proftpd실행시
192.168.10.50 은 127.0.0.1을 공인IP로 맵핑하고
192.168.10.100은 192.168.10.100을 공인 IP로 맵핑하고 있습니다.
192.168.10.50에 eth0과 lo인터페이스가 활성화 되어있어 그런가보다 싶어 ifdown lo후 proftpd재시작
192.168.10.50서버는 마스커레이드해도 공인IP로 접속이 불가능하더군요.

너무 주저리 주저리 죄송합니다.
읽어주셔서 감사합니다.
좋은 하루 되시길 빌겠습니다.

검객의 이미지

그 포트가 활성모드일 경우에는 20번 포트이고 패시브모드일 경우에는 사용자가 지정한 범위의 패시브 포트를 말하는 것이 맞는지요.
패시브 포트를 서적에는 천 단위로 끊어서 주던데 그 포트 중 열려있는 포트로 전송이 된다는 것인지요?
=>네 지정해준 패시브 포트를 사용하고 꼭 천 단위로 해줄 필요는 없습니다.

활성모드일 때 서버에서 클라이언트로의 데이터 연결을 만들때 20번 포트를 사용하는데 20번 포트를 열어주지 않았는데도 외부에서 사용이 가능한 것도 궁금한 점입니다.
=> 서버가 20번 포트로 나가는 패킷을 막거나 클라이언트가 20번 포트로 들어오는 패킷을 막지만 않으면 서버와 클라이언트의 연결이
성립됩니다. "열어주지 않았다"는 말씀이 위의 2가지중 하나를 설정 한 것인데도 정상적으로 서비스가 된다면
그 이유는 저도 알수가 없습니다.

패시브 모드로 변경 후 공인IP에서 사설IP로의 접속이 제한되고 있습니다.
즉 서버가 192.168.10.50일 때 마스커레이드된IP 121.XXX.XXX.XXX를 클라이언트인 192.168.10.75에 반환하므로 클라이언트는 공인IP가 되지요.리눅스에서 gftp혹은 윈도우에서 filezilla를 사용해 사설192.168.10.50을 넣고 접속 시도시 연결이 되지 않습니다. 121.XXX.XXX.XXX를 넣고는 가능한데요.
=> 서버와 같은 네트웍에 있는 192.168.10.75에서 접속이 되지 않는다는 말씀인가요?
서버와 같은 네트웍에 있는 클라이언트는 패시브모드로 접속시 접속이 되지 않았던것 같습니다. 그래서 액티브 모드로 사용했던것 같네요.

한가지 의문점은 패시브 모드의
MasqueradeAddress에 유동 IP라 121.XXX.XXX.0으로 네트워크 주소를 써 주었는데
서버접속이 안되더군요. 121.XXX.XXX.0네트워크로 사설IP를 맵핑하므로
그 네트워크에서 찾아서 알아서 접속이 가능하겠지 생각했는데 아닌 것 같더군요.
쉘스크립트를 통해 proftpd의 MasqueradeAddress값을 자동으로 바꿔주면 좋겠지만
그게 가능한지도 모르겠고 이에 대한 방안으로는 어떤 것이 있을까도 궁금합니다.

=> MasqueradeAddress 옵션에는 아이피나 도메인을 넣어주면 됩니다.
유동아이피이고 ddns를 사용하시면 ddns에 등록한 도메인을 넣어주면 됩니다.

우리 항시 웃고 살아요 ^^

dvvbstation의 이미지

성의있는 답변에 감사를 표합니다.
다만 궁금한 것이 하나 더 생겨버렸네요.

192.168.10.50서버 ifconfig시
eth0과 lo인터페이스가 활성화되어 있어
마스커레이드 후 서버 스타트 시
192.168.10.50을 공인 IP로 맵핑을 하는 것이 아니라
127.0.0.1을 공인 IP로 맵핑을 해버리더군요.
그래서 접속이 안되는 것 같습니다.

ifconfig시 lo , virf0등 이상한 인터페이스가 많이 있어서
/etc/sysconfig/network-scripts/ifcfg-lo파일을 지워
강제로 인터페이스가 못 뜨게 막고 eth0만 띄우고 해봤는데
이거 엄청난 부작용이 localhost를 못찾고 자체 아파치도 안뜨더군요.
lo인터페이스를 다시 만들면 localhost가 되고 아파치가 뜨겠지만
그것보다 eth0인터페이스를 공인 IP로 맵핑하는 것이 필요한데
혹시 이 부분에 대해 해결 방법이 있는지 vsftp에도 마스커레이드 IP옵션이 존재하는지지에 관해 여쭙고 싶습니다.

사실 virf0같은 인터페이스는 가상머신 구성에 사용되는 인터페이스 같은데
왜 깔렸는지도 도무지 알 수가 없군요.

댓글 달기

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