Назад | Перейти на главную страницу

Сервер ProFTPd за межсетевым экраном возвращает внутренний IP-адрес для подключений WAN и LAN

Я использую ProFTPD на сервере Debian за другим брандмауэром Debian. Я могу подключиться к ftp серверу извне. Однако виртуальный хост, который выбирается, всегда 192.168.0.4, независимо от подключений WAN или LAN. Это вызывает проблему при вводе PASV режим, когда ftp-сервер отвечает внутренним IP-адресом на WAN-соединения.

Я знаю, что есть MasqueradeAddress директива для подключений WAN, но мои подключения WAN подключаются к моему внутреннему виртуальному хосту.

Поскольку на FTP-сервере только 1 IP-адрес, нужно ли мне использовать mod_ifsession модуль, как описано здесь: http://www.proftpd.org/docs/howto/NAT.html?

В исходном вопросе я спросил, нужно ли мне использовать mod_ifsession модуль. Пока что это единственный способ заставить его работать. Возможно, этого и ожидалось, но я надеялся использовать <VirtualHost> блок, чтобы заставить его работать.

Вот что я сделал:

<IfModule mod_ifsession.c>
  <Class internal>
    From 192.168.0.0/24
  </Class>

  <IfClass !internal>
    MasqueradeAddress 1.2.3.4
  </IfClass>
</IfModule>

Используя это, входящие LAN-соединения получают внутренний IP-адрес (192.168.0.4) и WAN-соединения получают внешний IP (1.2.3.4). Не знаю, идеально ли это, но работает.

Редактировать: Я также смог заставить его работать, используя другой порт, как было предложено. Вы можете захотеть или не захотеть запускать ftp на нестандартном порту, поэтому, возможно, этот метод не для вас. Если вы перенаправляете порт 21 на брандмауэре на ftp-сервер, используя, скажем, 2121, и слушаете порт 2121 в одном из ваших <virtualHost> блоков, тогда вы узнаете, что это внешнее соединение. Вот блок, который я использовал для этого:

<VirtualHost 192.168.0.4>
  ServerName "External"
  Port 2121
  MasqueradeAddress 1.2.3.4
</VirtualHost>

Примечание: Если вы сделаете это таким образом, "конфигурация сервера" (ничего, кроме <virtualHost> или <Global> block) не будут применяться. Возможно, вам придется повторить некоторые директивы или использовать <Global> блок.