Команда port не выполнена total commander

Обновлено: 07.07.2024

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Прошу помощи, ибо новичок в Mikrotik, и скорее всего проблемы нет, а есть только невнимательность или незнание нюансов.

Дано: Mikrotik RB2011UiAS-2HnD-IN , RouterOS 6.27
Требуется: настроить на Mikrotik проброс FTP снаружи на внутренний сервер по нестандартному порту. Чтобы пользователи стучалсь на роутер на 20000 порт, а он их пробрасывал внутрь на 21 порт.

Что сделал: сделал NAT правило (см скриншоты)

При таком правиле - TotalCommander при подколючении по FTP на 20000 порт на внешний интерфейс ругается что "Команда PORT не выполнена"
И в пассивном и в активном режиме пробовал - одинаково.

Если я в правиле делаю dst.Port = 21 и соответственно цепляюсь клиентом на 21 порт - то все ок, проброс за NAT работает корректно и в активном (есть полностью аналогичное правило но с dst.port=20) и в пассивном режиме

Собственно вопрос: как правильно сделать так, чтобы снаружи не было "открытого 21 порта", а FTP-клиенты шли на 20000 и роутер их корректно пробрасывал внутрь?

В качесвте дополнения скажу, что на другие сервисы - все работает прекрасно (RDP снаружи обращаются на 25000 порт, внутрь уходит на 3389 на нужный сервак, видеосервер (30000 снаружи и 80 порт внутри и т.д.). Проблема только с FTP, причем даже в пассивном режиме, когда по идее только 21 порта достаточно.

Все правильно, кроме action, поставьте dst-nat вместо netmap

попробовал - не помогает. Все равно "Команда PORT не выполнена"

К слову сказать, я когда разбирался с мануалами, читал что netmap это типа тот же dst-nat, только лучше. (но тут не спец - могу ошибаться)

action - dst-nap
И входящий интерфейс точно ether1 - он смотрит в интернет?

Edited at 2015-04-16 09:14 am (UTC)

про dst-nat ответил выше. Не помогает.
интерфейс -тот, который нужно. Он точно смотрит в интернет.

Повторюсь: как только я в этом самом правиле меняю dst-port на 21 - все начинает работать(клиентом естественно тоже лезу не на 20000 а на 21), если 20000 - не работает.

Причем судя по логу - коннект-то проходит. , но ошибка "Команда PORT не выполнена" мешает жить и работать дальше.
лог из тотала - см ниже (я в нем внешний IP заменил на 111.111.111.111 - не пугайтесь):

===============начало лога ======================
Connect to: (16.04.2015 11:49:16)
hostname=ftp.blablabla.ru:20000
username=userftp1
startdir=/
ftp.blablabla.ru=111.111.111.111
220 Microsoft FTP Service
USER userftp1
331 Password required for userftp1.
PASS ***********
230 User logged in.
SYST
215 Windows_NT
FEAT
211-Extended features supported:
LANG EN*
UTF8
AUTH TLS;TLS-C;SSL;TLS-P;
PBSZ
PROT C;P;
CCC
HOST
SIZE
MDTM
REST STREAM
211 END
HELP SITE
214 Syntax: SITE - (site-specific commands)
OPTS UTF8 ON
200 OPTS UTF8 command successful - UTF8 encoding now ON.
Connect ok!
CWD /
250 CWD command successful.
PWD
257 "/" is current directory.
Чтение каталога.
TYPE A
200 Type set to A.
PORT 192,168,111,196,222,123
501 Server cannot accept argument.
PASV
227 Entering Passive Mode (192,168,1,5,241,172).
Server reports local IP -> Redirect to: 111.111.111.111
PORT 192,168,111,196,222,127
501 Server cannot accept argument.
================= конец лога =============================

Edited at 2015-04-16 09:22 am (UTC)

а если попробовать в ip-firewall-service ports порт у ftp выставить 20000 и в правиле nat, кроме прочего, connection type указать ftp ?

Edited at 2015-04-16 09:47 am (UTC)

Хм.
попробовал.
Замечу что у меня ip-firewall-service - все серый(выключенные)

Делал пошагово:
Поменял порт в сервисах на 20000 - не помогло
Включил сервис FTP - не помогло
Сделал connection type -> ftp - совсем перестало соединяться. т.е. даже коннекта нет и счетчики не прыгают.

Вернул все взад.


Edited at 2015-04-16 10:18 am (UTC)

вообще-то команда порт пойдет уже по другому порту, не 21/20000. Если он закрыт (а он закрыт полюбому) - то конечно никакого порт. а почему тогда оно работает, когда dst.port ставим 21?
По вашей логике в этой ситуации тоже должно ругаться, а однако оно работает ка часы. ftp не очень работает без NAT-helper в девайсе, делающем NAT.
Если NAT-helper для microtic ищет ftp только на 21-ом порту -- то, похожэ, всё, ничего не получится. ой-ой-ой.
очень интересно - но ничего не понятно.
Дяденька а поясните подробнее что вы имеет в виду?
Шо такое NAT-helper?
Я честно говоря впервые с таким сталкиваюсь.

а какой у вас ftp сервер?
хочу смоделировать

я помню, была проблема с пробросом портов, но не через микротик, а через линуксовый фарвол, выяснилось, что ftp нужно два порта, 21-й и на один назад, то есть 20-й. Попробуйте прокинуть 19999-й порт, а я пока у себя настрою тестовый вариант.

FTP - на IIS 7.0 (Windows Server 2008 R2)
20 порт он нужен для активного режима работы FTP-клиента, насколько я понимаю.
В текущей конфигурации с одним только(!) 21 портом - все работает и в активном и в пассивном режиме, а как только меняю на 20000 - перестает.

Тем не менее - пробросил WAN-19999 на LAN-20 (вы же это имели в виду?) - не сработало.

Выше писали про NAT-helper, похоже все дело в этом, но пока только читаю и разбираюсь, конкретно ничего не могу сказать.

IP - Services. У вас там 21 порт отмечен как активный?
И ещё: на первом рисунке попробуйте не указывать In Interface.
На второй: поставьте dst-nat вместо netmap.
И в-третьих: используйте порт поменьше. в пределах, наверное, первой сотни :)

В IP-Services FTP-21-порт помечен как Disable (там вообще только Winbox и WWW активны)

Попробовал убрать IN interface - ситуация не изменилась
dst-nat - пробовал
порт поменьше. ну. Попробовать можно, но если менять порт (менять настройки розданные сотрудникам), тогда проще уж поставить 21 - на котором все 100% работает.

Для того, чтобы не тыкаться в потемках, а настраивать роутер осмысленно, сначала нужно выучить теорию.

FTP-сервер принимает команды на стандартном порту 21 (или нестандартном, если поменять), который называется управляющим. Передача данных (листинга каталогов или загрузка файлов) выполняются по отдельному соединению на другой порт. Клиент через управляющий порт может запросить один из двух режимов работы - активный или пассивный.

В активном режиме клиент сообщает серверу номер динамического порта, который клиент со своей стороны открывает для второго соединения и сервер активно подключается к клиенту со своего 20-го порта (стандартно). Если сервер находится внутри NAT, а клиент нет и у клиента нет файрвола, блокирующего это входящее соединение от сервера - больше никаких настроек на NAT со стороны маршрутизатора ftp-сервера не требуется, второй коннект откроется успешно. Но по нынешним временам это редкость - если даже клиент сидит не за собственным NAT, имея реальный IP-адрес, то у него скорее всего стоит какой-нибудь антивирус/антихакер/файрвол, который заблокирует входящее соедиение, ибо клиент обычно не в состоянии настроить свой файрвол так, чтобы активный FTP у него работал. Тогда нужен пассивный режим.

В пассивном режиме сервер сам начинает слушать второй - динамический порт, сообщая клиенту свои IP и номер порта через управляющее соединение и пассивно ожидая подключения клиента на второй порт.

В вашем случае, когда сервер находится за NAT, для успешного проброса второго соедиения NAT обязан понимать, что в управляющем соединении идет именно FTP-протокол, а не какой-нибудь другой (по умолчанию NAT это предполагает только для 21-го порта, если специально не настраивать) и прямо в протоколе подменять внутренний IP сервера, который он сообщает клиенту, на внешний IP (иначе клиент так и будет стучаться к непубличному IP и такой коннект не имеет шансов). Плюс, когда придет второе подключение от клиента, NAT должен автоматически выполнить проброс с динамического порта и внешнего IP на динамический порт и внутренний IP сервера FTP.

Умеет ли Микротик такую сложную обработку для пассивного FTP-сервера внутри? Это не то же самое, что пропускать FTP-клиента изнутри наружу, это сложнее.

Устранение ошибки «Команда PORT не выполнена» в Total Commander

Ошибка вTotal Commander

При передаче на сервер и приеме файлов по FTP-протоколу иногда возникают различные ошибки, которые прерывают загрузку. Конечно, это доставляет много неприятности пользователям, особенно, если нужно срочно загрузить важную информацию. Одной из самых распространенных проблем при выполнении передачи данных по протоколу FTP через программу Total Commander является ошибка «Команда PORT не выполнена». Давайте узнаем причины возникновения, и способы устранения данной ошибки.

Причины возникновения ошибки

Основная причина возникновения ошибки «Команда PORT не выполнена» кроется, в большинстве случаев, не в особенностях архитектуры Total Commander, а в некорректных настройках провайдера, причем это может быть, как провайдер клиента, так и сервера.

Существует два режима соединения: активный и пассивный. При активном режиме, клиент (в нашем случае программа Тотал Коммандер) отправляет на сервер команду «PORT», в которой сообщает свои координаты подключения, в частности IP-адрес, для того, чтобы сервер связался с ним.

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

При некорректных настройках провайдера, использования прокси или дополнительных файерволов, переданные данные в активном режиме искажаются при выполнении команды PORT, и происходит обрыв соединения. Как же решить данную проблему?

Устранение ошибки

Чтобы устранить ошибку «Команда PORT не выполнена», нужно отказаться от использования команды PORT, которая применяется в активном режиме соединения. Но, проблема состоит в том, что по умолчанию в Total Commander используется именно активный режим. Поэтому, чтобы избавиться от данной ошибки, нам предстоит включить в программе пассивный режим передачи данных.

Для этого кликаем по разделу «Сеть» верхнего горизонтального меню. В появившемся списке выбираем пункт «Соединиться с FTP-сервером».

Переход к управлению FTP-содеинениями вTotal Commander

Открывается список FTP-соединений. Отмечаем нужный сервер, и жмем на кнопку «Изменить».

Переход в настройки FTP-содеинения вTotal Commander

Открывается окно с настройками соединения. Как видим, пункт «Пассивный режим обмена» не активирован.

Переход в настройки FTP-содеинения вTotal Commander

Отмечаем данный пункт галочкой. И жмем на кнопку «OK», чтобы сохранить результаты изменения настроек.

Переход в настройки FTP-содеинения вTotal Commander

Теперь можно попробовать соединиться с сервером заново.

Переход в настройки FTP-содеинения вTotal Commander

Указанный выше способ гарантирует исчезновение ошибки «Команда PORT не выполнена», но он не может дать гарантию, что соединение по FTP-протоколу заработает. Ведь далеко не все ошибки могут быть решены на стороне клиента. В конце концов, провайдер может целенаправленно заблокировать все FTP-соединения в своей сети. Тем не менее, указанный выше способ устранения ошибки «Команда PORT не выполнена», в большинстве случаев, помогает пользователям возобновить передачу данных через программу «Тотал Коммандер» по этому популярному протоколу.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Total Commander: команда PORT не выполнена

конечно, работает нормально.
Я тут в нете покоплся и вот что нашел:
Старый грустный FTP
Оглавление:
Ftp через NAT: ftp-proxy
Ftp через pf с маршрутизируемыми адресами: ftpsesame
В списке разрешенных портов мы можем увидеть порты протокола передачи файлов FTP. Этот протокол очень стар и полон загадок, которые вызывают массу проблем, в том числе и с безопасностью. Ключевыми проблемами использования этого протокола:
Пароль передается открытым текстом
Протокол требует создания не менее двух tcp подключений(для управления и данных) на разных портах
Когда сеанс установлен, данные передаются через порты, выбранные наугад
Эти факторы осложняют построение системы сетевой защиты и вызывают проблемы при функционировании системы.

В настоящее время существуют более безопасные и удобные протоколы передачи файлов, такие как sftp или scp, которые обеспечивают идентификацию и передачу данных через зашифрованные соединения. Настоящие профессионалы IT должны предпочесть что-либо отличное от ftp.

FreeBSD$ sudo /etc/rc.d/inetd restart
или аналогичной. Если вы не уверены, то обратитесь к man 8 inetd. В OpenBSD можно сделать таким образом:

OpenBSD$ sudo kill -HUP cat /var/run/inetd.pid
С этого момента inetd выполняется с новыми параметрами настройки.

Теперь разберем реальный случай перенаправления. Правила перенаправления и NAT относятся к одному классу. На эти правила можно сослаться непосредственно другими правилами, и фильтрующие правила могут зависеть от этих правил. Логически, rdr и правила NAT должен быть определен перед правилами фильтрации.

Мы вставляем наше правило rdr сразу после правила NAT в нашем /etc/pf.conf:

rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1
port 8021
Также необходимо добавить правило, разрешающее прохождение перенаправленного трафика:

pass in on $ext_if inet proto tcp from port ftp-data to ($ext_if)
user proxy flags S/SA keep state
Сохраним pf.conf и загрузим новые правила:

$ sudo pfctl -f /etc/pf.conf
После таких вот нехитрых действий ftp должен прекрасно работать.

Этот пример предполагает, что Вы используете трансляцию сетевых адресов (Network Address Translation) на шлюзе и внутри локальной сети используете адреса из диапазона частных сетей.

Ftp command port failed


При передаче на сервер и приеме файлов по FTP-протоколу иногда возникают различные ошибки, которые прерывают загрузку. Конечно, это доставляет много неприятности пользователям, особенно, если нужно срочно загрузить важную информацию. Одной из самых распространенных проблем при выполнении передачи данных по протоколу FTP через программу Total Commander является ошибка «Команда PORT не выполнена». Давайте узнаем причины возникновения, и способы устранения данной ошибки.

Причины возникновения ошибки

Основная причина возникновения ошибки «Команда PORT не выполнена» кроется, в большинстве случаев, не в особенностях архитектуры Total Commander, а в некорректных настройках провайдера, причем это может быть, как провайдер клиента, так и сервера.

Существует два режима соединения: активный и пассивный. При активном режиме, клиент (в нашем случае программа Тотал Коммандер) отправляет на сервер команду «PORT», в которой сообщает свои координаты подключения, в частности IP-адрес, для того, чтобы сервер связался с ним.

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

При некорректных настройках провайдера, использования прокси или дополнительных файерволов, переданные данные в активном режиме искажаются при выполнении команды PORT, и происходит обрыв соединения. Как же решить данную проблему?

Устранение ошибки

Чтобы устранить ошибку «Команда PORT не выполнена», нужно отказаться от использования команды PORT, которая применяется в активном режиме соединения. Но, проблема состоит в том, что по умолчанию в Total Commander используется именно активный режим. Поэтому, чтобы избавиться от данной ошибки, нам предстоит включить в программе пассивный режим передачи данных.

Для этого кликаем по разделу «Сеть» верхнего горизонтального меню. В появившемся списке выбираем пункт «Соединиться с FTP-сервером».


Открывается список FTP-соединений. Отмечаем нужный сервер, и жмем на кнопку «Изменить».


Открывается окно с настройками соединения. Как видим, пункт «Пассивный режим обмена» не активирован.


Отмечаем данный пункт галочкой. И жмем на кнопку «OK», чтобы сохранить результаты изменения настроек.


Теперь можно попробовать соединиться с сервером заново.


Указанный выше способ гарантирует исчезновение ошибки «Команда PORT не выполнена», но он не может дать гарантию, что соединение по FTP-протоколу заработает. Ведь далеко не все ошибки могут быть решены на стороне клиента. В конце концов, провайдер может целенаправленно заблокировать все FTP-соединения в своей сети. Тем не менее, указанный выше способ устранения ошибки «Команда PORT не выполнена», в большинстве случаев, помогает пользователям возобновить передачу данных через программу «Тотал Коммандер» по этому популярному протоколу.

Отблагодарите автора, поделитесь статьей в социальных сетях.

sa_gordienko
20.03.2013 13:41

И фокус в том, что это произошло только с ЗУП. Бухгалтерия автообменивается с тем же FTP-сервером и с того же компьютера нормально. Только через другую папку.

Доступ к FTP сторонними средствами нормальный.

PORT command failed

PORT command failed.

HRESULT: FTPLIB_E_PORTCOMMANDFAILED (0x8004310f)

FTP server replies:

500 Illegal PORT Command
500 Illegal PORT range rejected
501 Server cannot accept argument.

The FTP server does not accept the IP address in the PORT command.

For client to server / server to client transfers

Enable Passive Mode.

For server to server (FXP) transfers

The server must be configured to allow foreign IPs in PORT.

Related Articles
How To switch between Active / Passive mode

Total Commander: команда PORT не выполнена

    , ZoRROmbi, 16:22 , 23-Май-05, ( 2 )

    , jonatan, 16:32 , 23-Май-05, ( 3 )

    , ZoRROmbi, 16:37 , 23-Май-05, ( 4 )

    , nrvalex, 16:49 , 23-Май-05, ( 5 )

    , ZoRROmbi, 16:56 , 23-Май-05, ( 6 ) , Den, 16:57 , 23-Май-05, ( 7 )

>modprobe ip_conntrack_ftp

Причем сдесь нат ? Нужно обеспечить соединение по 20 (data) и 21 (control) порту и разрешить related соединения

конечно, работает нормально.
Я тут в нете покоплся и вот что нашел:
Старый грустный FTP
Оглавление:
Ftp через NAT: ftp-proxy
Ftp через pf с маршрутизируемыми адресами: ftpsesame
В списке разрешенных портов мы можем увидеть порты протокола передачи файлов FTP. Этот протокол очень стар и полон загадок, которые вызывают массу проблем, в том числе и с безопасностью. Ключевыми проблемами использования этого протокола:
Пароль передается открытым текстом
Протокол требует создания не менее двух tcp подключений(для управления и данных) на разных портах
Когда сеанс установлен, данные передаются через порты, выбранные наугад
Эти факторы осложняют построение системы сетевой защиты и вызывают проблемы при функционировании системы.

В настоящее время существуют более безопасные и удобные протоколы передачи файлов, такие как sftp или scp, которые обеспечивают идентификацию и передачу данных через зашифрованные соединения. Настоящие профессионалы IT должны предпочесть что-либо отличное от ftp.

Независимо от нашего профессионализма и предпочтения, мы знаем, что сталкиваться с этим протоколом нам придется неоднократно. В этом случае наша задача состоит в переадресации этого типа трафика специализированной программе, написанной для этой цели.
Ftp через NAT: ftp-proxy
ftp-proxy является частью базовой системы OpenBSD и других систем, содержащих PF. Обычно она вызывается "супер-сервером" inetd через конфигурацию /etc/inetd.conf. Приведенная ниже строка запустит ftp-proxy при работе NAT на кольцевом интерфейсе lo0:

FreeBSD$ sudo /etc/rc.d/inetd restart
или аналогичной. Если вы не уверены, то обратитесь к man 8 inetd. В OpenBSD можно сделать таким образом:

OpenBSD$ sudo kill -HUP cat /var/run/inetd.pid
С этого момента inetd выполняется с новыми параметрами настройки.

Теперь разберем реальный случай перенаправления. Правила перенаправления и NAT относятся к одному классу. На эти правила можно сослаться непосредственно другими правилами, и фильтрующие правила могут зависеть от этих правил. Логически, rdr и правила NAT должен быть определен перед правилами фильтрации.

Мы вставляем наше правило rdr сразу после правила NAT в нашем /etc/pf.conf:


rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 \
port 8021
Также необходимо добавить правило, разрешающее прохождение перенаправленного трафика:


pass in on $ext_if inet proto tcp from port ftp-data to ($ext_if) \
user proxy flags S/SA keep state
Сохраним pf.conf и загрузим новые правила:

$ sudo pfctl -f /etc/pf.conf
После таких вот нехитрых действий ftp должен прекрасно работать.

Этот пример предполагает, что Вы используете трансляцию сетевых адресов (Network Address Translation) на шлюзе и внутри локальной сети используете адреса из диапазона частных сетей.

Команда PORT не выполнена Total Commander


Из-за чего возникает неполадка?

Причина возникновения неполадки с кодом «Команда PORT не выполнена» зачастую кроется не в самом коде программы «Тотал Коммандер», а в интернет-провайдере. При чём не всегда понятно, кто конкретно виновен в возникновении неполадки – провайдер непосредственно пользователя или провайдер владельца сервера.

Как вы наверняка знаете, в данной программе присутствует два активных режима для соединения – это активный и, соответственно, пассивный. В случае, если клиент (то есть, мы и наша система) находимся в активном режиме, то программа отправляет на сервер команду «PORT». Данная команда содержит в себе информацию о пользователе. Нужна эта отправка для того, чтобы сервер смог выдать нам персональный IP-адрес для подключения.

В случае, если вы пользуетесь пассивным режимом, то ситуация происходит в точности да наоборот – клиентская система «говорит» серверу, чтобы тот отправил ему свои координаты, и только тогда система подключится к серверу.

Для того, чтобы избавится от неполадки под названием «Команда PORT не выполнена» нам потребуется всего лишь отказаться от использования самой команды «ПОРТ», которая применяется пользователем только при активном режиме соединения. Но вся проблема состоит в том, что изначально «Total Commander» всегда использует именно активный режим соединения. Собственно, единственное, что нам потребуется сделать – это изменить режим подключения к серверам с протоколом FTP на «пассивный».

Для начала на верхней панели инструментов вам потребуется кликнуть по клавише «Сеть». Далее переключаемся во вкладку «Соединиться с FTP-сервером».

Команда PORT не выполнена Total Commander


После этого откроется список доступных серверов. Кликните по нужному серверу левой клавишей мыши и выберите пункт «Изменить».

Команда PORT не выполнена Total Commander


Далее откроется окно с конфигурацией подключения к серверу. Как вы можете заметить, параметр «Пассивный режим обмена» здесь деактивирован.

Команда PORT не выполнена Total Commander


Собственно, просто активируем данный параметр и кликаем по клавише «ОК» для сохранения внесённых коррективов.

Команда PORT не выполнена Total Commander


После этого попробуйте вновь подключится к серверу и обменятся требуемым пакетом данный с другим пользователем.

Команда PORT не выполнена Total Commander

Итак, как вы видите, избавится от ошибки «Команда PORT не выполнена» достаточно просто. Надеемся, что данная статья смогла помочь вам.

Читайте также: