Облачный сервис Azure, встроенный FTP-сервер - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу разместить встроенный FTP-сервер внутри рабочей роли облачной службы Azure.

Для обеспечения пассивного доступа к FTP-серверу используется диапазон портов 20000-21000. Внутри ServiceDefinition.csdef я определяю все необходимые порты (см. Скриншот).

ServiceDefinition.cscfg

Основная проблема - огромное количество портов. Если я пытаюсь загрузить службу в облако, я получаю следующую ошибку.

Ошибка проверки: Неверное количество входных конечных точек - ток 1002, Максимум. 25

Как я могу получить эту работу с облачным сервисом?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вот решение, основанное на ответе службы поддержки Azure.

Вам необходимо определить публичный IP-адрес в файле .cscfg и загрузить его в облачный сервис.

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="ILPIPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
  <Role name="WebRole1">
    <Instances count="1" />
      <ConfigurationSettings>
    <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
      </ConfigurationSettings>
  </Role>
  <NetworkConfiguration>
    <AddressAssignments>
      <InstanceAddress roleName="WebRole1">
    <PublicIPs>
      <PublicIP name="MyPublicIP" domainNameLabel="WebPublicIP" />
        </PublicIPs>
      </InstanceAddress>
    </AddressAssignments>
  </NetworkConfiguration>
</ServiceConfiguration>

Подробнее: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-instance-level-public-ip#manage-an-ilpip-for-a-cloud-services-role-instance

После этого вы можете использовать nslookup, чтобы получить публичный IP-адрес, назначенный экземпляру. Если у вас есть несколько экземпляров, вам нужно изменить 0 на 1, 2, 3 и т. Д.

nslookup WebPublicIP.0.<Cloud Service Name>.cloudapp.net

Затем вы можете открыть локальные порты в брандмауэре Windows экземпляра, и вы сможете подключить локальные порты непосредственно из Интернета.

Вы можете создать задачу запуска для открытия локальных портов в брандмауэре облачной службы. Ниже приведен пример настройки правил брандмауэра. Задача запуска выполняется каждый раз, когда экземпляр перезагружается / перезагружается.

https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-startup-tasks-common#add-firewall-rules

Примерно так:

netsh advfirewall firewall add rule name="TCP ports" protocol=TCP dir=in localport=1000-2000 action=allow

0 голосов
/ 17 ноября 2018

Когда клиент подключается к FTP-серверу в пассивном режиме, он делает 2 подключения. Один использует порт 21, а другой - для передачи данных.

Похоже, вам нужно открыть один порт в ServiceDefinition.csdef, а затем создать правило переадресации портов на брандмауэре (балансировщик нагрузки), чтобы перенаправить все пассивные порты на этот единственный порт.

<Endpoints>
 <InputEndpoint name="FTP2Azure.Command" protocol="tcp" port="21" localPort="9003" /> 
 <InstanceInputEndpoint name="FTP2Azure.Passive" protocol="tcp" localPort="9002">
  <AllocatePublicPortFrom>
   <FixedPortRange max="21000" min="20000" />
  </AllocatePublicPortFrom>
 </InstanceInputEndpoint>
</Endpoints>

Это не проверено, но может помочь.

...