.net framework 기준

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

💡 데이터 포트 설정의 핵심

1. 포트 분리의 원칙

  • 제어 포트 (22222): FTP 명령, 로그인, Passive 모드 요청 등 제어 정보만 주고받습니다. (TCP/IP 연결을 항상 유지)
  • 데이터 포트 (별도 범위): 실제 파일 데이터를 주고받기 위해 필요할 때마다 임시로 열리는 포트입니다.

이 두 포트는 역할이 명확히 다르므로, 데이터 포트 범위는 제어 포트(22222)와 겹치지 않게 분리해야 합니다.

2. 권장되는 포트 범위

일반적으로 Passive FTP 데이터 포트는 49152번 이상의 높은 포트 범위를 사용하도록 설정합니다.

  • 높은 포트(예: 50000대)를 사용하는 이유: 낮은 포트 번호(1~1023)는 시스템 서비스(SSH, HTTP, FTP 등)에 의해 예약되어 있거나 잘 알려진 포트(Well-Known Ports)이므로, 충돌을 피하기 위해 임의의 포트는 높은 번호를 사용합니다.
  • 충분히 좁은 범위 (예: 10~20개):
    • 50000-50010 (11개 포트)
    • 55000-55020 (21개 포트)
    • 범위를 너무 넓게(예: 22000-23000) 설정하면 보안상 불필요하게 많은 포트를 외부에 노출하게 됩니다. ClickOnce 배포 작업이 한 번에 몇 개씩 동시에 이루어지지 않는다면 10~20개 정도의 포트 범위로도 충분합니다.

3. 최종 설정 및 조치 사항

설정 항목 설정 값 (예시) 방화벽 조치
FTP 제어 포트 22222 TCP 인바운드 허용 (완료)
FTP 데이터 포트 범위 50000-50010 TCP 인바운드 허용 (필수)

반드시 IIS FTP 설정에서 데이터 포트 범위를 50000-50010 등으로 지정한 후, 서버의 방화벽(Windows 방화벽 등)에서도 이 50000-50010 범위의 TCP 인바운드 연결을 허용해 주어야 "FTP Passive 모드를 사용할 수 없습니다"라는 오류가 해결됩니다.

 

 

Visual Studio에서 ClickOnce 배포 시 FTP를 사용할 때, 데이터 포트를 별도로 설정하는 부분이 없는 것이 정상입니다. 이는 Visual Studio(클라이언트)가 직접 데이터 포트를 결정하는 것이 아니라, FTP 프로토콜의 Passive Mode(수동 모드) 작동 방식에 따라 FTP 서버(IIS)가 포트 정보를 알려주기 때문입니다.

클라이언트가 서버의 데이터 포트를 찾아가는 순서는 다음과 같습니다.


🔍 클라이언트가 데이터 포트를 찾아가는 과정 (Passive Mode)

Visual Studio의 ClickOnce 배포 도구는 FTP로 파일을 업로드할 때, 사용자가 설정한 **제어 포트(22222)**를 이용하여 다음과 같은 일련의 통신을 수행합니다.

1. 제어 채널 연결 (사용자가 설정한 포트)

Visual Studio(클라이언트)는 사용자가 설정한 제어 포트를 사용하여 FTP 서버에 연결하고 명령을 보냅니다.

  • 클라이언트 → 서버: ftp://-----------:22222로 접속하여 로그인합니다.
  • 클라이언트 → 서버: "파일을 업로드하고 싶습니다. Passive Mode를 시작해 주세요."라는 명령(PASV)을 보냅니다.

2. 서버의 포트 정보 응답 (데이터 포트 결정)

FTP 서버(IIS)는 이 PASV 명령을 받으면, 자신이 데이터 전송에 사용할 포트 번호를 결정하여 클라이언트에게 알려줍니다.

  • 서버 → 클라이언트: "알겠습니다. 50000번 포트로 접속하여 데이터를 전송해 주세요."라고 응답합니다. (이때의 50000번은 IIS의 FTP 방화벽 지원에 설정된 범위 내의 포트입니다.)

3. 데이터 채널 연결 (서버가 알려준 포트)

Visual Studio(클라이언트)는 서버가 알려준 포트 번호(50000)를 받으면, 해당 포트로 새로운 연결을 시도합니다.

  • 클라이언트 → 서버: 172.23.11.231:50000으로 접속을 시도합니다.
  • 성공 조건: 이 포트가 서버 방화벽에 열려 있어야 연결이 성공하고, 실제 파일 데이터(ClickOnce 파일) 전송이 시작됩니다.

🔑 결론: 모든 설정은 서버에 달려있습니다

Visual Studio에서 데이터 포트를 설정할 필요가 없는 이유는, 포트를 결정하고 클라이언트에게 알려주는 주체가 FTP 서버(IIS)이기 때문입니다.

이것이 바로 이전 대화에서 강조한 것처럼, FTP 서버(IIS)의 FTP 방화벽 지원 설정과 서버의 방화벽(Windows 방화벽) 구성이 ClickOnce 배포 성공에 결정적인 이유가 되는 것입니다. 클라이언트(Visual Studio)는 서버가 알려준 포트만 믿고 따라갑니다.

 


 

다른 IIS FTP 서버에서 0-0으로 설정되어 있음에도 불구하고 ClickOnce FTP 배포가 잘 작동하는 경우는 일반적으로 다음 두 가지 상황 중 하나일 가능성이 매우 높습니다.

1. 서버 방화벽이 완전히 비활성화된 경우 (제한 없음)

이것이 가장 흔한 이유입니다.

  • Windows 방화벽 자체가 비활성화되어 있거나,
  • 네트워크 환경 자체가 내부망(사설망)으로 구성되어 FTP 서버와 클라이언트 사이에 방화벽이 존재하지 않는 경우입니다.

이 경우, IIS가 Passive Mode를 위해 임의의 포트를 선택하더라도, 클라이언트가 그 포트로 접속하는 것을 막는 장벽(방화벽)이 아예 없기 때문에 데이터 통신이 문제없이 성공합니다.

즉, IIS의 0-0 설정은 "Passive Port를 제한하지 않고 임의로 사용하겠다"는 의미이며, 방화벽이 없을 때는 문제없이 작동합니다.


2. FTP 서버가 Active Mode로 전환되어 성공한 경우

ClickOnce 배포 도구는 일반적으로 Passive Mode를 먼저 시도합니다. Passive Mode가 실패하면 Active Mode를 시도하는 폴백(Fallback) 메커니즘을 가질 수 있습니다.

  • Active Mode는 클라이언트가 서버에 접속 포트(예: 22222)를 통해 데이터 포트를 요청하면, **서버가 클라이언트의 포트(20번 포트)**로 접속을 시도하여 데이터를 전송하는 방식입니다.
  • 만약 클라이언트 PC의 방화벽이 느슨하거나 Active Mode를 위한 포트 접속을 허용하는 경우, Active Mode로 전환되어 배포가 성공했을 수도 있습니다. (하지만 Active Mode는 보안상의 이유로 클라이언트 방화벽에서 막히는 경우가 많아 흔치 않습니다.)

 

 

 

 

 

성공

 

 

 



글이 도움이 되셨다면 공감과 광고 클릭 한번 부탁드립니다! 💕
감사합니다 ✨