1

У меня есть FTP-сервер (vsftpd), установленный на Linux-сервере (сервер Ubuntu). Когда я пытаюсь подключиться к компьютеру в той же сети, все работает нормально, как и ожидалось.

Но как только IP внешний, он не подключится

Сначала я предположил, что порт заблокирован, но потом:

localserver:$ sudo tail -f /var/log/vsftpd.log
Wed Jan 13 14:21:17 2010 [pid 2407] CONNECT: Client "xxx.xxx.107.4"
remotemachine:$ netcat svn-motion.no-ip.biz 21
220 FTP Server

И там висит. Нужно ли открывать какие-либо порты, кроме 21?

3 ответа3

1

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

В основном, пассивный режим FTP, который хорош, когда клиент находится за NAT, является большой проблемой, когда сервер находится за NAT. Если окажется, что ваш клиент НЕ находится за NAT, то скажите ему, чтобы он использовал традиционный FTP "активного" режима, и вам не нужно иметь сложный "сервер за NAT" FTP ALG в вашем NAT-шлюзе.

Другой вариант - сделать ваш FTP-сервер вашим DMZ-хостом (он же "хост по умолчанию", "бастионный хост"). Поскольку все непредвиденные попытки входящего соединения пересылаются в DMZ, все эти TCP-данные в пассивном режиме TCP-соединения будут автоматически отправляться на ваш FTP-сервер.

0

Вы пытаетесь подключиться к внешнему IP-адресу сервера с внутреннего компьютера? Если это так, и если вы используете типичный домашний маршрутизатор в конфигурации NAT, проблема может быть на самом деле маршрутизатором.

Предположительно вы настроили маршрутизатор для пересылки FTP на сервер Ubuntu, и вы пытаетесь проверить, что это работает. Но когда вы тестируете внешний IP-адрес непосредственно из вашей внутренней сети, ваш маршрутизатор должен поддерживать маршрут "шпильки". Ваш маршрутизатор должен отправлять трафик с внутреннего хоста через внешний IP-адрес обратно на внешний IP-адрес и, наконец, перенаправлять его обратно на внутренний IP-адрес вашего сервера - и все это на одном устройстве. Большинство потребительских маршрутизаторов не справляются с этой ситуацией должным образом.

Так что вам нужен тест с реального внешнего хоста. У вас есть несколько вариантов:

  • Воспользуйтесь интернет-сервисом для тестирования портов, например, Can You See Me.
  • Отправьте тестовый трафик через прокси.
  • Проведите тестирование друга из своей сети.
  • Найдите местную кофейню с WiFi и протестируйте оттуда.
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .