Aquí hay una extraña para todos. Usaré AskDifferent porque mi banco de pruebas está en una Mac, pero no sé si el problema subyacente es específicamente Mac.
Mi Mac está detrás de un muro NAT. Llamemos a mi interfaz La dirección IP es 192.168.10.61. Al utilizar enlace , encuentro que mi dirección externa, modificada por NAT, es otra cosa. Llamemos a eso 169.254.101.20.
Voy a FTP de forma anónima a ftp.example.com. Realizo la conexión con éxito y cambio los directorios con éxito:
[ dafydd@testhost ] $ ftp -dt ftp.example.com
Connected to ftp.example.com.
220 "Authorized Use Only"
ftp_login: user '<null>' pass '<null>' host 'ftp.example.com'
Name (ftp.example.com:dafydd): anonymous
---> USER anonymous
331 Guest login ok, send your complete e-mail address as password.
Password:
---> PASS XXXX
230 Guest login ok, access restrictions apply.
---> SYST
215 UNIX Type: XXXX Version: XXXX
Remote system type is UNIX.
Using binary mode to transfer files.
---> FEAT
500 'FEAT': command not understood.
features[FEAT_FEAT] = 0
features[FEAT_MDTM] = -1
features[FEAT_MLST] = -1
features[FEAT_REST_STREAM] = -1
features[FEAT_SIZE] = -1
features[FEAT_TVFS] = -1
got localcwd as '/Users/dafydd'
---> PWD
257 "/" is current directory.
got remotecwd as '/'
ftp> cd outgoing
---> CWD outgoing
250 CWD command successful.
---> PWD
257 "/outgoing" is current directory.
got remotecwd as '/outgoing'
Todo bien hasta ahora, ¿verdad? Aquí está la transferencia de archivos:
ftp> get testfile.txt
local: testfile.txt remote: testfile.txt
---> TYPE I
200 Type set to I.
---> SIZE testfile.txt
213 1024000
---> EPSV
229 Extended Passive Mode Entered (|||56257|)
229 Extended Passive Mode Entered (|||56257|)
ftp: Can't connect to '11.12.13.14': Operation timed out
---> EPRT |1|192.168.10.61|58531|
200 PORT command successful.
200 PORT command successful.
---> RETR testfile.txt
150 Opening BINARY mode data connection for testfile.txt (1024000 bytes).
ftp: Poll timeout waiting before accept
421 Service not available, remote server has closed connection.
421 Service not available, remote server has closed connection.
ftp> quit
Entonces, le doy el comando get
. El modo pasivo se apaga porque el servidor de seguridad en el otro extremo nunca abrió el puerto 56257 para mí. El modo activo falla porque estoy detrás de un muro de NAT . (*) Aquí se entiende todo, ¿verdad?
Entonces, ¿cómo puede ingresar ftp://ftp.example.com/outgoing/testfile.txt
en Firefox desde el mismo host a través de las mismas conexiones de red ?!
Supongo que mi pregunta técnica seria podría ser "¿Puedo / cómo veo lo que hace Firefox debajo de las cubiertas para hacer que esta conexión funcione?" ¿Firefox es lo suficientemente brillante como para sustituir la dirección IP de NAT en su comando EPRT / PORT?
¿Alguna idea?
(*) ¿Por qué el muro NAT bloquea las conexiones activas? Porque le dije al servidor ftp que hiciera su conexión activa a 192.168.10.61. No puede hacer eso; cualquier ruta que pueda tener para esa dirección IP no me llegará. El servidor FTP necesita hacer su conexión a 169.254.101.20. Si la casilla NAT en mi extremo es muy inteligente, podría alcanzar mi paquete EPRT y cambiar esa dirección IP a 169.254.101.20. (Lo que genera todo tipo de preguntas incómodas acerca de los cortafuegos que modifican la carga útil de paquetes. Sí, eso nunca estará sujeto a rajaduras ...)