저는 집에서 메인컴 1대와 파일서버 1대를 사용하고 있습니다. 파일서버는 WWW, FTP, 토런트 등의 용도로 사용하고 있는데, 외부에서 FTP Passive 모드로 접속을 시도하면 접속은 되지만 파일은 보이지 않습니다. 그 이유에 대해 간단히 설명드리고 해결책을 알려드리겠습니다.

FTP에는 2가지 모드가 있습니다. 바로 Active 모드와 Passive 모드인데, 간단히 설명하자면

Active 모드 - 클라이언트가 서버에 접속하면서 DataChannel로 사용할 포트를 서버에 알려주면, 서버가 클라이언트의 해당 포트로 접속하는 방식

Passive 모드 - 클라이언트가 서버에 접속하면, 서버가 DataChannel로 사용할 포트를 클라이언트에 알려주고, 클라이언트는 다시 서버의 해당 포트로 접속하는 방식

설명이 허접해서 이해가 잘 안 되실 수도 있는데, 어쨌든 Active 모드는 서버가 클라이언트로 접속하는 조금 어색한 구조로 되어 있어서 여러가지 문제가 많으므로(특히 방화벽), 일반적으로 Passive 모드를 많이들 사용하실 것입니다.

그런데 이 Passive 모드에도 문제가 있습니다. 바로 NAT 환경일 때 문제가 발생합니다.(Active도 마찬가지) 그러니까 서버가 내부에서 사용하는 사설 IP와 실제로 외부에서 접속하는 공인 IP가 따로 존재하는 경우 문제가 발생합니다. 예를 들어 공유기를 사용하는 환경이라면 그렇고, 회사에서도(특히 클라우드 환경이라면) 비슷한 상황이 많이 발생할 것입니다.

무슨 말인지 잘 이해가 안 되실 수도 있으니, 실제 제 환경을 가지고 설명드리겠습니다.

회사에서 집에 있는 파일 서버로 FTP Passive 모드 접속을 시도한 경우

1. 회사 노트북에서 윈도우 탐색기 주소창에 ftp://175.197.xxx.xxx 를 입력했다.
2. 그랬더니 집에 있는 파일 서버가 반응을 하고 계정 정보를 묻는 창을 띄웠다.
3. 계정 정보를 입력했다.
4. 집에 있는 파일 서버가 192.168.0.3 IP의 55246 포트로 접속하라는 정보를 보냈다.
5. 하지만 회사 노트북은 192.168.0.3 IP의 55246 포트로 접속할 수 없다. 그래서 아무것도 안 보인다.

문제의 원인이 어디에 있는지 아시겠죠? 문제는 두가지입니다.

첫째는 집에 있는 파일 서버가 192.168.0.3 이라는 사설 IP를 알려줬다는 점이고
둘째는 55246 포트로 접속하라고 알려줬다는 점입니다.

첫번째 문제는 파일 서버가 회사 노트북한테 공인 IP를 알려주도록 설정해주면 해결될 것이고
두번째 문제는 공유기에서 55246 포트를 파일 서버로 포트포워딩 해주면 해결될 것입니다.

그런데 55246 포트는 1024 - 65535 사이에서 랜덤하게 생성된 포트입니다. 그러니까 Passive 모드로 접속시 서버는 DataChannel로 사용할 포트를 랜덤하게 정해서 알려줍니다. 따라서 공유기에서 파일 서버에 DMZ 설정을 걸어주든지, 아니면 Passive 모드에서 사용할 DataChannel의 특정 포트 범위를 한정해주고, 해당 범위를 공유기에서 포트포워딩 해주시면 되겠습니다.

이제 실전에 들어가겠습니다.

IIS에서 FTP 방화벽 지원 설정으로 들어가보시면


데이터 채널 포트 범위와 방화벽의 외부 IP 주소 설정하는 부분이 있습니다. 데이터 채널 포트 범위는 기본값 0-0으로 그냥 두신다면 1024 - 65535 범위를 사용하게 되므로, 공유기에서 DMZ 설정을 하시거나 또는 1024 - 65535 포트를 전부 포트포워딩 시켜줘야 합니다. 보안상 별로 안 좋으니 특정 범위를 지정해봅시다. 저는 예로 나온 5000-6000 범위를 지정하겠습니다.

그리고 방화벽의 외부 IP 주소 부분에 공인 IP 주소를 넣어주세요. 가장 중요한 부분이라 할 수 있습니다. Passive 모드에서 사설 IP를 알려주면 클라이언트가 접속을 못 하니까요.

값을 넣으셨다면 오른쪽에 있는 적용 버튼 눌러주시면 되구요.


그런데 이놈의 FTP 방화벽 지원 설정이 좀 거시기합니다. 방화벽의 외부 IP 주소 부분은 바로 적용이 되는데, 데이터 채널 포트 범위는 바로 적용되지 않습니다. FTP 서비스를 한번 재시작 해줘야 적용이 됩니다.

services.msc 들어가서 Microsoft FTP Service를 재시작 한번 해주시거나 아니면 관리자 권한으로 커맨드 창을 띄워서 아래 명령어로 서비스를 재기동 해주시면 되겠습니다.

net stop ftpsvc
net start ftpsvc



다음은 공유기의 포트포워딩 설정 부분인데 이 부분은 각자 사용하는 기종이 다르니 제가 설명하기 좀 그렇겠죠? 아무튼 저는 파일 서버에 5000-6000 포트를 포워딩 시켜주겠습니다. (21번 포트는 당연히 포워딩 해주셨겠죠 ^^;;)


마지막으로 윈도우 방화벽 부분을 생각해볼 필요가 있는데, 그냥 FTP 자체를 예외처리 해주시면 됩니다.


명령어로 하시려면 아래와 같이 하시면 됩니다.

netsh advfirewall firewall add rule name="FTP" service=ftpsvc action=allow protocol=TCP dir=in



이상입니다. 다시 과정을 정리하자면

1. IIS에서 FTP 방화벽 지원 설정
2. FTP 서비스 재기동하기
3. 공유기에서 포트포워딩 설정
4. 윈도우 방화벽 예외 처리

이렇게 작업해주시면 FTP Passive 모드 문제는 해결될 것입니다.
신고

  1. 카누
    2012.02.02 12:52 신고

    iis ftp를 잘 사용하고 있습니다. 그런데 외부에서 집의 iis ftp에 접속해서 용량이 큰 파일
    600메가 정도를 옮기려면 1시간도 더 걸립니다. 뭔가 문제가 있는 것 같은데 원인이 뭘까요?
    해결해보려고 했지만 못해서 스누피님에게 도움을 청합니다.

    • 저도 당했지요
      2012.02.05 22:46 신고
      수정 및 삭제

      집으로 들어오는 회선 속도 문제가 아닐까 생각됩니다

      저같은 경우도 다운로드는 100메가 나오지만 업로드가 5메가 정도 나와서

      외부에서 사용할때 매우 느린 속도로 사용이 불편한점이 많았습니다

  2. 그미
    2012.04.16 14:36 신고

    잘 보았습니다^^ 저도 지금 연결은 되는데 리스트는 보이지 않는 문제 때문에 골머리를 앓고 있었습니다.ㅠ 그런데 저의 경우, 방화벽을 풀면 리스트가 보였었는데요.. 물론 방화벽 예외로 포트넘버 21, 3387.. 이렇게 2개 테스트해봤었는데 이렇게 예외를 등록시켜도 방화벽 자체를 해제하지 않는 이상 리스트가 보이지 않더라구요. 왜그럴까요?
    저는 지금 사설(192.168...)을 쓰고 있고 서버도 사설이랍니다. 둘다(서버, 클라이언트) 사설이면 별다른 설정이 필요 없는 걸까요? 그리고 궁금한 게 하나 더 있는데요^^;;
    set statefulftp enable, disable에 대해서 설명해 주실 수 있는지요..?ㅠㅠ 찾아보니 어느 포스트에서는 enable을 하라하고, 다른 데서는 disable을 하라고 하니.;;;
    작은 답글이나마 달아주시면 감사하겠습니다..!><

    • BlogIcon snpbox
      2012.04.16 22:34 신고
      수정 및 삭제

      본문에 적어드린 명령어로 방화벽 설정하시면 될 텐데요...

      netsh advfirewall firewall add rule name="FTP" service=ftpsvc action=allow protocol=TCP dir=in

    • 그미
      2012.04.17 15:28 신고
      수정 및 삭제

      네, service=ftpsvc 를 포함하여 명령어를 치니 방화벽을 세워놓고 ftp를 이용할 수 있었습니다..ㅎㅎ 다만 다른 포스트도 많이 봤지만 여기 글이 가장 이해가 잘 가서 질문을 남긴 거에요~

  3. 너무 고마워서
    2012.10.14 14:00 신고

    감사합니다!!!!!!!! 계속 바보같이 포트범위만 넣어주고, 방화벽 외부 IP주소 안넣어줬더니 안됬었네요 ㅠ_ㅠ...

  4. 도와주세요!!!
    2012.11.30 00:04 신고

    만약에 kt를 사용하고 서버가 그냥 이너넷 스위치를통해 인터넷과 연결되고,클라이언트역시 동일하나 다른 허브에 꽃쳐있으면 다음문제는 어떻게 고치나요?
    상태: 재시도 대기...
    상태: 211.106.109.36:21에 연결...
    상태: 연결 수립, 환영 메시지를 기다림...
    오류: 연결 시간 초과
    오류: 서버에 연결하지 못함


  5. 2012.11.30 00:26

    비밀댓글입니다

  6. 도와주세요!!!3
    2012.11.30 00:27 신고

    아..비밀글로 답하시면 저도 않보입니다.....
    왠지모르게 비번이 않열리네요.
    혹시모를 인증작업:
    Sshoon980423

  7. 7LeaF
    2013.03.09 06:00 신고

    공인 IP가 자꾸 바뀌니 DDNS를 사용하고있었는데..
    음.. 이런 환경에서 IIS FTP서버는 구축이 힘들겠네요..
    공인 IP ㅠ_ㅠ

  8. 테돌아이
    2013.12.03 08:14 신고

    좋은정보 감사드립니다.
    전 IE 주소창에서 접속을 하지 않고 알드라이브로 접속을 하려고 합니다.
    지금 웹호스팅 계정을 가지고 있습니다.
    사무실에서는 IE 로는 접속을 하지 못합니다.
    그러나 알드라이브로 FTP도 접속이 안되어 SFTP 22번 포트는 접속이 잘 됩니다.
    이 방식도 NAT 환경에서 IIS 7.5 FTP Passive 모드 설정인가요?
    아니면 그냥 포트포워딩 설정에서 21~22번까지 설정하면 사무실에서 알드라이브로 SFTP로 접속이 가능할까요?

    그리고
    방화벽의 외부 IP 주소는 사무실 공인 IP 가 맞지요?

    오늘도 화이팅 하세요

  9. 테돌아이
    2013.12.05 09:36 신고

    위 방법대로 설정하고 사무실에서 접속하니 서버에 연결할 수 없습니다. (Error : couldn't connect to host)

    그래서 곰곰히 생각했다.
    회사에서 집에 있는 공유기와 파일 서버로 접속이 되지 않음은 위 포스팅의 경우도 되겠지만 저의 경우에는 사무실 네트워크에서 외부의 접속을 막아 naver, daum 메일과 P2P 그리고 웹하드 등 모든것을 차단을 하였습니다. 단, 웹서핑은 가능합니다.

    그런데 지금 사용하는 웹호스팅의 계정이 있는데 접속이 됩니다.
    접속방식은 다음과 같습니다.

    알드라이브
    SFTP(SSH File Transfer Protocol) 선택
    22번 포트

    그런데 왜, 집 FTP 는 접속이 불가능할까?
    웹서버의 폴드접근과 FTP 접근 방식이 다른가요?

  10. BlogIcon 클라우드
    2014.03.06 07:56 신고

    UNC 경로를 데이터 전송시에는 속도 이슈가 존재하긴 합니다. AFD 패러미터 값을 수정해줘야 합니다. 기본값이 4K여서 아마 초당 4Mbps 약 400k 속도가 세션당 최고 속도로 찍힙니다.
    SMB 프로토콜 데이터 전송과 FTP 전송 프로토콜 속도가 일치하지 않은 이유가 바로 여기서 있기에 있습니다.

  11. 피터
    2015.06.12 14:42 신고

    이 부분 잘못된 정보인 것 같네요. NAT가 FTP Passive Mode에 한번도 문제를 일으킨적이 없어서 이상하다 싶어 패킷 캡쳐를 해보니 NAT 장비(공유기)가 FTP 패킷을 받으면 아예 소스 ip를 수정해서 자기가 요청하는것처럼 패킷을 보내네요. 결국 서버가 전달하는 패시브 포트를 받아서 클라이언트에게 자신의 여유 포트를 전달하니 문제 없이 전송이 이루어집니다.
    결론적으로 위 사례에서 LIST가 안된건 서버측 윈도우 방화벽 등록만 하면 해결되는 문제인 것으로 판단됩니다.

  12. 허니윤
    2017.01.25 18:58 신고

    완벽하게 저의 상황과 똑같은 문제를 잘 설명해주셔서 공부도되고 문제도 해결했습니다. 정말 감사합니다.