В пассивном режиме FTP-разговор происходит следующим образом:
client: PASV
(i would like to transfer files. Tell me which port and ip address should I use)
server: 227 Entering Passive Mode (172,16,3,4,204,173)
(ok, use port 52397 on IP address 172.16.3.4.)
client: connects to this IP address/port and starts data transfer.
Похоже, FTP-сервер с двумя общедоступными IP-адресами (например, 1.2.3.4) возвращает частный IP-адрес в ответ на команду PASV.
Решение
Переключение в активный режим.
В активном режиме FTP-сервер подключается к FTP-клиенту для передачи данных. Это решило бы эту проблему, но не дружественно к брандмауэру. Он не будет работать, когда входящие соединения заблокированы (очень часто).
Игнорирование IP-адреса, отправленного в ответ на команду PASV
Если IP-адрес общедоступного ftp-сервера является общедоступным, а IP-адрес, возвращаемый в качестве ответа для команды PASV, относится к частному диапазону (например, 10., 192.168.). В таком случае клиент FTP должен использовать публичный IP-адрес.
Именно это и делает Rebex FTP в такой ситуации. Работает хорошо (такое поведение можно отключить). Его можно даже включить для серверов с несколькими общедоступными IP-адресами.
Я не знаю, возможен ли подобный обходной путь с FtpWebRequest.
Вы можете загрузить пробную версию и проверить, решает ли она вашу проблему.