Вопрос или проблема
В последние несколько дней я настраивал Windows Server 2008 R2 в VMware. Я установил стандартный FTP-сервер, используя роль Webserver (IIS).
Все работает прекрасно, и я могу получить доступ к моему FTP-сайту по адресу ftp://localhost
в Firefox. Я также могу получить доступ к нему через локальный IP-адрес моего сервера. На самом деле, все работает отлично в моей локальной сети.
Но вот в чем проблема:
Я хочу получить доступ “снаружи”, используя внешний IP-адрес или URL dyndns. У меня есть маршрутизатор LinkSys перед моим сервером, поэтому я перенаправил все важные порты.
Если вы сейчас подумаете “этот идиот, наверное, забыл какие-то порты”, я должен вас разочаровать. Получить доступ к моему серверу и поработать с некоторыми веб-интерфейсами тоже удается.
Проблема в моем пассивном FTP (активный работает для меня). Я всегда получаю тайм-аут, когда, например, FileZilla ждет ответа на команду LIST
. Мне непонятно, почему мой сервер отправляет ответ на команду PASV
, указывая порт, такой как 40918, даже если я ограничил диапазон портов данных для моего пассивного FTP (в IIS-менеджере) например, [5000-5009].
Я просто не хочу открывать и перенаправлять все возможные порты данных!
И еще одна вещь: я не могу указать статический внешний IP-адрес для моего сервера, так как я не владею таковым.
Я уже пробовал следующие решения:
- Out Of Band FTP 7 показывает “Операция завершилась тайм-аутом”
- Как настроить брандмауэр Windows для пассивного FTP-сервера
- ServerFault — Пассивный FTP на Server 2008
— ИСПРАВЛЕНИЕ: —
У меня возникла одна идея:
Когда я использую FileZilla для подключения в пассивном режиме, я всегда получаю что-то вроде этого:
227 Entering Passive Mode (192,168,1,102,160,86)
Согласно статье Rhinosof, FZ пытается подключиться к порту “160*256+86 = 41046“, хотя я ограничил порты данных (как упоминалось выше). Может это вызвано маршрутизатором, который не перенаправляет внешние порты напрямую, а использует другие?
(–> Указанный IP-адрес локальный, так как я не могу определить статический внешний в IIS-менеджере)
— ИСПРАВЛЕНИЕ 2: —
У меня была идея изменить dynamicportrange
через netsh interface
, но даже примеры, приведенные в самом помощнике, не сработали. Я думаю, что откажусь от IIS-FTP и затем использую FileZilla-Server.
Вывод: Привет, бесплатное ПО, пока “платное, но просто работает”-Windows * кашель *.
Изменение динамического диапазона портов в Windows не поможет. Единственное, что он делает, это ограничивает, какой порт будет использован для клиентской стороны сокет-соединения.
Что вам нужно сделать, так это ограничить диапазон портов, используемых FTP-сервером IIS. На MSDN есть довольно хорошая статья на эту тему, но вот основные моменты:
-
Если вы используете встроенный FTP-сервер, вам сначала нужно установить службу роли “Совместимость с метабазой IIS 6” (а также соответствующие инструменты сценариев), а затем использовать следующую команду для установки правильного свойства метабазы:
adsutil.vbs set /MSFTPSVC/PassivePortRange “5500-5525”
- Если вы используете загружаемый модуль FTP для IIS 7.5 (тот, который вы получаете с этой страницы), то все, что вам нужно сделать, это открыть редактор конфигурации сервера и редактировать свойство “диапазон портов для канала данных” в разделе “Поддержка брандмауэра FTP > Диапазон портов канала данных” в applicationHost.config.
Несмотря на вышеизложенное, вам все равно нужно будет пересылать весь диапазон на вашем устройстве NAT, чтобы внешние соединения работали. Большинство приличных устройств брандмауэра/NAT имеют встроенные помощники протокола для FTP, которые позволят им определить команду PASV и правильно отреагировать, но не все (и это обычно не будет работать, если вы используете нестандартный порт для командного канала FTP).
П.С. Вам стоит рассмотреть возможность использования другого протокола, чем FTP, если вы находитесь за NAT: вы не сможете заставить его работать без уродливых – и рискованных – решений. Я предлагаю вам рассмотреть SFTP или WebDAV.
Вы пробовали поставить FTP-сервер в DMZ вашего маршрутизатора, чтобы проверить, не отбрасывает ли пакеты сам маршрутизатор? Попробуйте это.
Также включите ведение журнала брандмауэра Windows (Панель управления -> Администрирование -> Брандмауэр Windows и Разширенная безопасность, щелкните правой кнопкой мыши “Брандмауэр Windows и Разширенная безопасность” в консоли, перейдите к свойствам, затем включите ведение журнала для отбрасываемых пакетов), чтобы проверить, имел ли ваш компьютер вне сети возможность запрашивать правильные порты.
netsh advfirewall set global StatefulFtp enable
netsh advfirewall firewall add rule name=”FTP for IIS” service=ftpsvc action=allow protocol=TCP dir=in
Для тех из вас, кто использует сервер Windows, размещенный с помощью облачной службы Microsoft Azure, если вы используете группу сетевой безопасности, вам также нужно будет создать входящее правило, которое соответствует диапазону портов, который вы настроили в разделе Поддержка брандмауэра FTP в IIS.
Ответ или решение
Настройка пассивного FTP на Windows Server 2008 R2 с использованием IIS7 FTP-сервера
Введение
При настройке FTP-сервера на Windows Server 2008 R2 с использованием роли Webserver (IIS) вы можете столкнуться с проблемами при доступе к серверу извне, особенно в пассивном режиме (PASV). В этом руководстве мы рассмотрим решение проблем, связанных с настройкой пассивного FTP, включая фаерволы, маршрутизаторы и другие важные аспекты.
Проблемы с подключением
Вы отметили, что можете подключаться к FTP-серверу через локальный IP-адрес и localhost, но возникли проблемы с подключением извне. Ваш маршрутизатор LinkSys настроен на перенаправление необходимых портов, что является важным первым шагом. Однако проблема часто кроется в том, как FTP-сервер обрабатывает запросы PASV.
Настройка диапазона пассивных портов
FTP-сервер отправляет клиенту ответ на команду PASV, включая локальный IP-адрес и случайный порт. Например, вы упомянули, что сервер отправляет сообщение, имеющее локальный IP и порт 40918, несмотря на установленный вами диапазон портов (6000-6009).
Чтобы это исправить, вы должны ограничить диапазон используемых пассивных портов, следуя следующей инструкции:
- Установите компонент "IIS 6 Metabase Compatibility" и соответствующие инструменты скриптов.
- Откройте командную строку с правами администратора.
- Выполните команду:
adsutil.vbs set /MSFTPSVC/PassivePortRange "5000-5009"
Если вы используете FTP-модуль IIS 7.5, откройте конфигуратор серверов и измените свойство "Data Channel Port Range" в FTP Firewall Support.
Перенаправление портов на маршрутизаторе
Обратите внимание, что хотя вы ограничили диапазон портов на сервере, вам все равно необходимо остается настроить маршрутизатор для перенаправления этого диапазона. Поскольку вы не владеете статическим внешним IP-адресом, используйте свои динамические DNS-услуги для доступа к вашему серверу.
Проверка Windows Firewall
Не забудьте настроить правила фаервола Windows:
- Откройте Windows Firewall with Advanced Security.
- Добавьте правило:
netsh advfirewall firewall add rule name="FTP for IIS" service=ftpsvc action=allow protocol=TCP dir=in
- Для проверки, включите журналирование фаервола. Это поможет вам понять, если запросы к серверу блокируются.
DMZ и тестирование
Если проблема сохраняется, попробуйте временно перевести сервер в DMZ вашего маршрутизатора. Это может help to identify if the router is dropping packets.
Альтернативные решения
Если вы продолжаете испытывать трудности с конфигурацией FTP, возможно, стоит рассмотреть альтернативные протоколы, такие как SFTP или WebDAV, которые могут предложить более простые решения с лучшей безопасностью.
Заключение
Настройка пассивного FTP может быть непростой, особенно если у вас нет статического внешнего IP-адреса. Следуйте изложенным выше инструкциям, проверяйте настройки вашего маршрутизатора и фаервола, и вы должны суметь обеспечить доступ к вашему FTP-серверу извне. Настройка правильного диапазона портов и перенаправление их на маршрутизаторе является ключевым к успешному подключению.