Esto es un verdadero cabrón :)
Mi módem es un ZTE ZXHN H108L, conectado a un firewall/enrutador/puerta de enlace de Linux. La puerta de enlace es un sistema Slackware 14.0 en el que se ejecutan DNS, DHCP, VPN y PROXY transparente. La puerta de enlace tiene 2 NIC de hardware. eth1
está conectado al módem (192.168.231.117) y eth0
está conectado a la intranet (192.168.112.0/24).
Utilizo el DNS para dar nombres a varios hosts de intranet y vpnnet. El módem tiene el nombre conveniente "modem.skails.office" (o simplemente "módem" si estoy sentado en una PC en esta intranet). De /var/named/skails.office.hosts
:
modem A 192.168.231.117
nslookup
Resuelve correctamente la dirección del módem de todos los PC de la intranet.
root@stargaze:~# nslookup modem
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: modem.skails.office
Address: 192.168.231.117
root@stargaze:~# nslookup modem.skails.office
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: modem.skails.office
Address: 192.168.231.117
Entonces, cuando intento acceder al módem desde el navegador de la puerta de enlace (firefox), escribo http://192.168.231.117/
. Proporciono las credenciales e inicio sesión bien.
Si intento hacer lo mismo ingresando la dirección http://modem/
o http://modem.skails.office/
, todavía se me presentará la ventana de inicio de sesión, pero NO aceptará mis credenciales. Realmente no sé cuál podría ser el problema aquí.
Solía tcpdump -i eth1 host modem and port 80
registrar un intento exitoso y otro fallido de iniciar sesión y acceder a la página de estado.
- tcpdump exitoso
wget --user admin --password 1234 "http://192.168.231.117/status/status_deviceinfo.htm" -O -
Conectándose a 192.168.231.117:80... conectado.
Solicitud HTTP enviada, esperando respuesta... 401 No autorizado
Reutilizando la conexión existente a 192.168.231.117:80.
Solicitud HTTP enviada, esperando respuesta... 200 OK
Longitud: sin especificar [texto/html]
...
- tcpdump fallido
wget --user admin --password 1234 "http://modem/status/status_deviceinfo.htm" -O -
Resolviendo módem (módem)... 192.168.231.117
Conectando al módem (módem)|192.168.231.117|:80... conectado.
Solicitud HTTP enviada, esperando respuesta... 401 No autorizado
Reutilizando la conexión existente paramódem: 80.
Solicitud HTTP enviada, esperando respuesta... 401
Error en la autorización no autorizada.
¿Puedes sacar algo de esto? ¿Necesitas algún otro dato que quizás no he pensado incluir? ¿Cómo puedo investigar más a fondo este asunto?
Respuesta1
El servidor web del módem no está diseñado para manejar algo que no sea su IP en el Host
encabezado HTTP, por lo que obtienes un comportamiento indefinido y en este caso significa que la autenticación falla cuando envías algo que no sea su IP en ese Host
encabezado.
Normalmente, a menos que esté utilizando hosts virtuales (que permiten alojar múltiples sitios bajo múltiples dominios que apunten a la misma IP y usar ese Host
encabezado para saber qué sitio fue solicitado), se supone que debe ignorar ese encabezado por completo, lo que los desarrolladores de ese El firmware obviamente no funcionó. No me sorprendería si en realidad estuvieran usando un host virtual (innecesariamente) y es por eso que solo un Host
encabezado específico configurado para la IP del enrutador le permite autenticarse, porque todo lo demás no coincide con ese host virtual.
El nombre no tiene nada que ver con eso, es solo que curl/wget establece automáticamente el encabezado de Host correcto según ese nombre DNS. Si puede eliminar o anular ese encabezado y volver a configurarlo en la IP del módem, entonces funcionará bien (úselo wget --header="Host:" ...
para eliminar el encabezado).