Активний та пасивний режим роботи FTP. Особливості роботи протоколу FTP

Протокол передачі файлів, вперше стандартизований на початку 1970-х років, відноситься до протоколів прикладного рівня і передачі даних використовує транспортний протокол TCP. FTP був розроблений у часи, коли клієнти та сервери взаємодіяли один з одним безпосередньо, без посередників та з мінімальною кількістю перешкод.

Проблеми FTP у сучасних мережах

У сучасних мережах (NAT, брандмауер, балансувальник навантаження) такі особливості FTP не дозволяють йому нормально працювати:

  1. Два окремі з'єднання TCP/IP: для передачі даних та для передачі команд;
  2. З'єднання передачі може бути встановлено на випадковому номері порту;
  3. З'єднання передачі може виходити як від сервера до клієнта, і від клієнта до серверу;
  4. Адреса призначення з'єднання передачі (вибір режиму роботи) узгоджується на льоту між клієнтом і сервером через з'єднання передачі команд;
  5. З'єднання для передачі команд знаходиться в режимі очікування, доки відбувається передача даних через з'єднання передачі даних.

Проблема 1 викликана тим, що маршрутизатор або балансувальник повинен підтримувати два з'єднання між одними і тими самим джерелом і приймачем.

Проблема 2 викликана тим, що FTP не може працювати в тому випадку, якщо вхідні порти жорстко обмежені лише відомими. Тобто. у звичайному режимі FTP не може працювати тільки при відкритому 21 вхідному порті, що використовується з'єднанням для передачі команд, йому також необхідний набір відкритих портів високого значення (49152-65534) для передачі даних.

Проблема 4 викликана тим, що при використанні NAT, йому потрібно на льоту змінювати вміст пакетів з'єднання для передачі команд, для того щоб внутрішній адресу сервера замінювався зовнішнім, а також перенаправляти пакети, що приходять на зовнішню адресу, на внутрішній адресу сервера.

Проблема 5 викликана тим, що пристрої, що маршрутизують, можуть переривати «завислі» з'єднання для передачі команд.

Два режими передачі даних у FTP

FTP підтримує два режими роботи: активний та пасивний. Вони відрізняються механізмом встановлення з'єднання передачі даних:

  • В активному режимі сервер підключається зі свого 20 порту на обумовлений порт клієнта.
  • У пасивному режимі клієнт підключається зі свого довільного порту на обумовлений порт сервера.

Таким чином, всі сучасні FTP-клієнти обговорюють із сервером те, від кого дані передаються і хто ініціює з'єднання. Клієнт може вказати використання активного режиму , надіславши команду «PORT», яка повідомить серверу, що потрібно підключитися на певний IP та порт клієнта, і почати відправку даних. Або клієнт може використовувати пасивний режим , надіславши команду "PASV" серверу, яка повідомить серверу, що клієнт очікує IP і порт сервера для початку прийому даних.

Оскільки клієнт спочатку підключається до сервера для встановлення з'єднання передачі команд, було б логічним, якби з'єднання передачі даних встановлював так само клієнт, тобто. відправляв команду PASV (одночасно усуваючи проблему між FTP та брандмауером). Однак це не так, творці специфікації FTP чомусь вирішили, що відданим режимом повинен бути PORT, а підтримка PASV на стороні клієнта навіть необов'язкова.

FTP підтримує доступ по логіну та пароль, але це не безпечно. вони передаються відкритим текстом. При використанні веб-браузера можна передати прямо в URL.

Ftp:// :@:/

Приклад сесій з використанням активного та пасивного режимів передачі даних

Приклад активного режиму, де клієнт анонімно підключається і здійснює одну активну передачу даних (перегляд директорії).

Client: USER anonymous
Server:
Client: PASS NcFTP@
Server: 230 Logged in anonymously.
Client: PORT 192,168,1,2,7,138 Клієнт хоче, щоб сервер підключився на порт 1930 та IP адресу 192.168.1.2.
Server: 200 PORT command successful.
Client: LIST
Server: 150 Opening ASCII mode data connection for /bin/ls. Сервер підключається з порту 21 на порт 1930 та ip адресу 192.168.1.2.
Server: 226 Listing completed. Дані передані успішно.
Client: QUIT
Server: 221 Goodbye.

Приклад пасивного режиму

Client: USER anonymous
Server: 331 Guest login ok, send your e-mail address as password.
Client: PASS NcFTP@
Server: 230 Logged in anonymously.
Client: PASV Клієнт запитує сервера дані для підключення.
Server: 227 Entering Passive Mode
(172,16,3,4,204,173)
Сервер відповідає клієнту, що потрібно підключатися на порт 52397 та IP-адресу 172.16.3.4.
Client: LIST
Server: 150 Data connection accepted from
172.16.3.4: 52397; transfer starting.
Клієнт підключився до сервера на порт 52397 та IP адресу 172.16.3.4.
Server: 226 Listing completed. Дані передані успішно.
Client: QUIT
Server: 221 Goodbye.

Приватні проблеми:

    PORT режим – FTP клієнт за NAT або брандмауером

    Найбільша проблема, з якою стикаються клієнти FTP, що використовують активний режим - сервер повинен сам підключатися на ip адресу клієнта. Якщо на його шляху стоятиме брандмауер, що відсікає всі підключення, сесія FTP не відбудеться. Інша проблема - якщо клієнт знаходиться за NAT і використовує внутрішній адресу IP. Повідомивши свою внутрішню адресу серверу, клієнт прирікає його на неможливість підключення.

    Рішення 1. Клієнт FTP має бути налаштований на використання пасивного режиму.

    Рішення 2. Налаштування NAT за стеженням FTP. Коли клієнт використовує активний режим, пристрій NAT повинен переписувати внутрішній адресу клієнта та замінювати його зовнішньою адресою пристрою. Тоді з'єднання, для передачі даних з FTP сервера, поступивши на зовнішню адресу NAT пристрою, буде прокинуто ним на внутрішню адресу FTP клієнта за NAT.

    PASV режим - FTP сервер за брандмауером

    Коли FTP сервер знаходиться за брандмауером, клієнти будуть мати проблеми, використовуючи пасивний режим для підключення до ефемерного порту FTP сервера. Найчастіша проблема, коли брандмауер, за яким знаходиться FTP сервер, пропускає лише ряд підключень на відомі порти та блокує інші.

    Рішення 1. Адміністратор може відкрити групу портів на брандмауері, через які може відбуватися з'єднання з сервером FTP.

    Рішення 2. Якщо є підтримка брандмауера, адміністратор може налаштувати так, щоб порти автоматично відкривалися для встановлення пасивного з'єднання з FTP сервером. Ця настройка схожа на ту, що була описана для активного клієнта, що знаходиться за NAT. Таким чином, коли брандмауер відстежує відповідь FTP сервера на пасивний запит клієнта, він тимчасово відкриває порт, вказаний у відповіді, і лише тому IP, з якого виходив пасивний запит.

    PASV режим - FTP сервер за NAT

    У режимі PASV FTP сервер відповідає клієнту своїм внутрішнім IP адресою і портом, чим прирікає клієнта на неможливість підключення.

    Рішення 1. Налаштування NAT за стеженням з'єднань FTP для передачі даних. Коли сервер надсилає відповідь у пасивному режимі, пристрій NAT повинен переписувати внутрішній адресу сервера та замінювати його зовнішньою адресою пристрою. Тоді з'єднання для передачі даних з FTP клієнта, надійшовши на зовнішню адресу NAT пристрою, буде прокинуто ним на внутрішню адресу сервера FTP за NAT.

    PASV режим - FTP сервер за балансувальником навантаження

    Балансувальник являє собою одну IP адресу, підключення до якого буде перенаправлятися на один з балансованих серверів. Балансувальник представляє дві проблеми для FTP. Перша відбувається через те, що між FTP сервером і клієнтом встановлюється кілька з'єднань: одне передачі команд і одне чи кілька передачі даних. При пасивному режимі балансувальник повинен перенаправляти з'єднання передачі даних той самий сервер, як і з'єднання передачі команд. Друга проблема є наслідком першої: коли FTP сервер відповідає пасивною відповіддю, ця відповідь міститиме внутрішню адресу FTP сервера, а не зовнішню адресу балансувальника.

    Рішення 1. Кожному FTP серверу за балансувальником присвоїти легітимну ip адресу, доступну ззовні. У цьому випадку FTP сервер буде здатний самостійно обслуговувати FTP клієнтів у пасивному режимі, минаючи балансувальник.

    Рішення 2. Налаштування балансувальника за стеженням з'єднань FTP для передачі даних. Коли сервер надсилає відповідь у пасивному режимі, балансувальник повинен переписувати внутрішню адресу сервера та замінювати його зовнішньою адресою балансувальника. Тоді з'єднання для передачі даних з FTP клієнта, надійшовши на зовнішню адресу балансувальника, буде прокинуто ним на внутрішню адресу сервера FTP за балансувальником.

    Рішення 3. Налаштувати FTP сервер так, щоб його відповіді в пасивному режимі містили зовнішню адресу балансувальника, а не сервера і сподівається, що балансувальник перенаправить з'єднання на сервер, що очікує.

    Нерозв'язна проблема - брандмауери на обох кінцях

    Коли клієнт і сервер знаходяться за брандмауерами, що обмежують всі вхідні підключення, крім групи відомих портів, починаються проблеми. Клієнт неспроможна використовувати активний режим, т.к. сервер зможе підключитися щодо нього, і може використовувати пасивний режим, т.к. не підключитися до сервера FTP.
    У такому випадку потрібно змінювати налаштування брандмауера і краще робити це на стороні сервера.

    FTP сервер на нестандартному порту

    Деякі маршрутизатори здатні обробляти FTP сесії, тільки якщо вони надходять на стандартний порт сервера. Тому якщо FTP сервер слухає на нестандартному порті, потрібно налаштовувати маршрутизатор, так щоб він знав, що за цим портом сидить FTP сервер і коректно обробляло з'єднання.

    Але навіть у цьому випадку брандмауер на стороні клієнта може стати на заваді. Це може статися, якщо брандмауер на стороні клієнта жорстко вимагає, щоб з'єднання FTP для передачі даних від FTP сервера виходило з 20 порту (в активному режимі). Якщо сервер FTP працює на порту N, то за специфікацією FTP його з'єднання передачі даних виходитимуть з порту N – 1 і блокуватися брандмауером клієнта.

    Проблеми, викликані брандмауерами, що передчасно завершують FTP сесію

    Ця проблема найчастіше зустрічається під час передачі великого файла. Коли параметри з'єднання погодилися, і передача почалася, з'єднання для передачі команд почне простоювати доти, доки передача файлу не завершиться. Якщо маршрутизатор не знає про FTP, і передача файлу займе довше часу, ніж лічильник активності підключення на ньому, з'єднання з точки зору маршрутизатора перевищить час очікування і буде завершено, а вхідні пакети будуть відкинуті.

    Вирішенням цієї проблеми є пристрій, що підтримує з'єднання передачі команд в активному стані навіть не дивлячись на те, що по ньому довго не передавалися пакети. Інший варіант - включення функції Keep Alive у стеку протоколу TCP/IP на стороні клієнта або сервера, яка відправляє пакет перевірки доступності через певні інтервали часу, і якщо сторона призначення не відповідає - закриває нормально з'єднання. Якщо ж сторона, що приймає, відповість, то з'єднання з боку брандмауера буде вважатися активним.

  • Використовувати пасивний режим, коли це можливо (у веб-браузерах використовується за замовчуванням)
  • Якщо підключення до FTP серверу пройшло вдало, але перегляд директорій або передача файлів закінчуються обривом з'єднання, швидше за все, проблема в таймерах активності підключення на брандмауері
  • Використовуйте пристрої, що підтримують особливості роботи FTP
Що таке активний режим і для чого він потрібний?
Активний і Пасивний режими це два різні види підключення, які визначають, як ви будете підключатися до інших користувачів і порядок отримання файлів.

Пасивний режим є найбільш простим у використанні і повинен працювати практично в будь-яких умовах. Але за простоту доводиться платити. Пасивний режим має обмеження при з'єднанні (пасивні користувачі не можуть підключатися до інших пасивних) і викликає додаткове навантаження на хаб, так як всі зв'язки пасивного режиму йдуть через хаб. Цей режим повинен використовуватися тільки тоді, коли неможливо використовувати активний.

Порівняння

Наступна таблиця показує різницю між двома режимами з'єднання


Налаштування активного режиму

Нижче наведено опис того, як налаштувати активний режим залежно від топології мережі.

Топологія A

Комп'ютер, безпосередньо підключений до Інтернету через “модем” (analog, ISDN, DSL тощо), з динамічним або статичним IP.

У цьому випадку не потрібні додаткові настройки, крім включення опції Активний режим у налаштуваннях. DC++ автоматично визначить вашу ip адресу, і використовує будь-який вільний порт.

Якщо ви використовуєте брандмауер, то виберіть в DC++ певний порт. У налаштуваннях брандмауера дозвольте DC++ з'єднання через вказаний порт.

Топологія B

Комп'ютер є частиною мережі підключеної до Інтернету через маршрутизатор. Комп'ютер має статичний або динамічний зовнішній адресу IP. Технології трансляції адрес (наприклад, NAT) не використовуються.


Активний режим налаштовується аналогічно до топології А.

Топологія C

Комп'ютер підключений до Інтернету через маршрутизатор або шлюз, які використовують технологію NAT (Network Address Translation). NAT це технологія, що дозволяє кільком комп'ютерам отримувати доступ до мережі через єдину IP адресу. У такому випадку комп'ютер має власний внутрішньомережевий IP (адреси, що починаються на 192.168.*.*, 10.*.*.* або 172..*.*).

Домашні мережі зазвичай використовують цей вид підключення.


Налаштування активного режиму потребує двох кроків:

* Налаштування переадресації портів на маршрутизаторі/шлюзі.
* Налаштування активного режиму в DC++.

Налаштування переадресації портів

На жаль, процес налаштування переадресації називається по-різному у різних виробників маршрутизаторів. Він може називатися: port mapping, virtual servers чи іншими синонімами. Не важливо, як вони називаються, всі вони використовують один принцип. Його ідея полягає в наступному: маршрутизатор налаштовується таким чином, що з'єднання на певний порт на маршрутизатор (порт вибраний вами) переадресується на конкретну машину всередині мережі.

Налаштування DC++

У меню “Установки - Установки з'єднання” виберіть активний режим. Введіть зовнішню ip адресу. Введіть номер порту, це має бути порт налаштований на переадресацію у попередньому розділі.

За замовчуванням у не серверних версіях windows можна здійснити лише одне підключення до віддаленого робочого столу, при цьому робота поточного користувача обов'язково блокується.


Виправляємо це непорозуміння.


Обов'язково збережемо оригінальний файл termsrv.dll. Запустимо командний рядок від Адміністратора та виконаємо

copy c:\Windows\System32\termsrv.dll termsrv.dll_old

Далі дивимося вашу версію. Правий клік на файлі c:\Windows\System32\termsrv.dll і виберемо властивості.


Завантажуємо змінений файл, який відповідає вашій версії

Якщо хочеться все виправити своїми руками, то копіюємо свій файл termsrv.dll із папки c:\Windows\System32\ на робочий стіл. Відкриваєте його будь-яким hex редактором, наприклад, цим безкоштовним HxD . І замінюєте байти у зазначеному рядку.

У першій колонці значення, яке має бути, у другій оригінальне.

Windows 7 SP1 64bit:

173C0: B8 8B
173C1: 00 87
173C2: 01 38
173C3: 00 06
173C5: 90 00
173C6: 89 39
173C8: 38 3C
173CC: 90 0F
173CD: 90 84
173CE: 90 EB
173CF: 90 C2
173D0: 90 00
173D1: 90 00
176FA: 00 01
5AD7E: EB 74
Для Windows 8.1 (64bit) замінюємо цілий рядок !
у v6.3.9600.16384
рядок
8B 81 38 06 00 00 39 81 3C 06 00 00 0F 84 1B 70 00 00
на
B8 00 01 00 00 89 81 38 06 00 00 90 90 90 90 90 90 90

в 6.3.9600.16384 to 6.3.9600.17095
рядок
39 81 3C 06 00 00 0F 84 9E 31 05 00
на

6.3.9600.17095 to 6.3.9600.17415
рядок
39 81 3C 06 00 00 0F 84 D3 1E 02 00
на
B8 00 01 00 00 89 81 38 06 00 00 90
Скористайтеся інструментом заміни з типом шістнадцяткові значення

Після заміни зберігаєте зміни.

Якщо ви відчуваєте труднощі з правами доступу, то відкриваєте властивості, вкладку безпеку, кнопка додатково. І міняєте власника на себе. Використовуєте. Після цього зможете міняти дозволи для груп та користувачів.



Далі зупиняєте службу віддаленого робочого столу


Замінюємо файл termsrv.dll на скачати чи змінений.

Ще потрібно змінити значення ключа у реєстрі HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser на 0!

І знову запускаємо службу!

Підключаємось і радіємо! Тепер локального користувача не викидає із системи!

Для Windows XP
1) Редагуємо файл
termsrv.dll (SP2 5.1.2600.2180) 295,424 bytes

128BB: 75 -> 74
217D3: 8B -> 33
217D4: C7 -> C0
2192D: 8B -> 33
2192E: C7 -> C0
225B7: 54 -> 20
termsrv.dll (SP3 5.1.2600.5512) 295,424 bytes
22A17: 74 -> 75
22A69: 7F -> 90
22A6A: 16 -> 90
2) Замінювати файл у директорії C:\Windows\System32\потрібно в безпечному режимі, оскільки за умовчанням включено захист системних файлів (System File Protection). Для цього перезавантажте комп'ютер із затиснутою F8, виберіть безпечний режим.
3) Додати ключі реєстру

EnableConcurrentSessions”=dword:00000001

EnableConcurrentSessions”=dword:00000001
AllowMultipleTSSessions”=dword:00000001

4) Далі Пуск -> Виконати, gpedit.msc. У вікні редактора групової політики Конфігурація комп'ютера -> Адміністративні шаблони -> Компоненти Windows -> Служба терміналів. Увімкніть Обмеження кількості підключень та встановіть кількість підключень 3 або більше.
5) Перезавантажуйтеся та підключайтеся!

    активний режим- Стан обладнання, яке включено та приєднано до радіомережі для здійснення обміну інформацією користувача (голос або дані), також визначається як режим трафіку (МСЕ Т K.49). )