¿Cómo configurar una asignación de host a IP en Android no rooteado?

Tengo un sitio web ejecutándose en mi computadora y quiero probarlo desde mi tableta Nexus 7. Es decir, a través de la LAN WiFi local. Si escribo la dirección IP, se conecta, pero muestra el sitio web incorrecto, porque estoy usando un alojamiento virtual con nombre.

Entonces, lo que quiero hacer es poder escribir mysite.localen Chrome/Firefox en el Nexus, hacer que lo conviertan a 10.1.2.3(o cualquiera que sea la dirección IP local), luego llamar al 10.1.2.3servidor que da mysite.localcomo Host para solicitar.

Mi pregunta: ¿Una tableta con Android 4.x tiene /etc/hostsarchivos, o equivalentes, que puedo editar? (Sin tener que rootear la tablet, ni nada por el estilo.)

En mis computadoras Linux, hago esto agregando una entrada en /etc/hosts:

10.1.2.3  mysite.local

(O Windows\System32\drivers\etc\hostsen una máquina con Windows hace lo mismo).

Por cierto, este es un semi-duplicado de Establecer manualmente un nombre de host para la dirección IP (es decir, /etc/hosts equiv.?) , Pero esa pregunta era para Android 2.2, donde aparentemente no era posible. (Una de las ideas alternativas sugería que había que configurar DNS en el enrutador local, pero por lo que sé, mi enrutador no hace DNS localmente, por lo que no tiene esa opción. Podría configurar mi propio servidor DNS para hacer esto, pero eso se siente como una gran solución de trabajo).

Esa es más bien una pregunta para Server Fault o Super User . Y debe configurar esos nombres de host con su servidor local (que es presentado por su servidor DHCP como nodo DNS).
@Izzy Gracias Izzy, pero sé cómo configurar /etc/hosts en los servidores. Lo que no sé cómo hacer es buscar/editar el equivalente en una tableta con Android 4.x (o incluso si hay un equivalente sin rootearlo). (Mi servidor DHCP, es decir, el enrutador wifi, parece no ofrecer opciones para agregar nombres personalizados: tengo la opción de especificar un servidor DNS personalizado, pero ese es un grupo turbio en el que realmente no quería poner mis manos. )
Me entendiste mal, Darren: no sugerí editar /etc/hosts, sino configurar tu "servidor de nombres" (por ejemplo, DNSMasq, o lo que sea que uses). Su enrutador podría darle un lugar para eso. /etc/hostsde lo contrario, debe editarse en cada máquina, y el archivo correspondiente en Android solo se puede editar con "poderes de raíz" (no sé su ubicación exacta fuera de mi cabeza, pero está en algún lugar dentro de /data/systemAFAIR). Ver: Cómo editar el archivo etc/hosts

Respuestas (4)

No puede simplemente editar el archivo hosts en Android, ya que reside en un sistema de archivos de solo lectura: /system/etc/hosts, vea:

Las alternativas son:

  • use un servidor DNS como DNSMasq en su red local para cuidar eso "centralmente"
  • use "poderes de raíz" para forzar la edición del archivo del sistema como se describe anteriormente
  • instale un "servidor DNS local" en su dispositivo Android para usarlo, por ejemplo, servidor DNS
hola Izzy, traté de usar el servidor DNS para manejar esto ya que no tengo acceso de root a mi teléfono; Agregué una regla simple que redirige el nombre de host a la ip en cuestión... pero no funciona... ¿qué estoy haciendo mal?
Se supone que el servidor DNS sirve a otros dispositivos en su red (como dice la descripción, además necesita usar el reenvío de puertos para eso). Eso siempre requiere que esos dispositivos (incluido su dispositivo Android) estén configurados para usarlo. No usé ningún servidor DNS de este tipo en mis dispositivos Android, por lo que no verifiqué qué se debe hacer exactamente aquí; pero lo más probable es que necesite ajustar las entradas de DNS en la configuración de su red (mantenga presionada la entrada de la red WiFi, elija "Avanzado" y ajuste la primera entrada de DNS; deje la segunda como está para una "copia de seguridad").
@GeorgeKatsanos Puede que te interese esto: stackoverflow.com/a/14211550/1768141

Como mencionó lzzy, puede usar el servidor DNSMasq para lograr esto. Pero Chrome usa su propio proceso de resolución de DNS y es posible que este método no funcione.

Para iniciar el servidor use el siguiente comando:

sudo /usr/local/sbin/dnsmasq -d \
                             --no-hosts \
                             --no-resolv \
                             --conf-file=/dev/null \
                             --server=8.8.8.8 --server=8.8.4.4 \
                             --address=/example.com/192.168.0.101
  • sudorequerido para enlazar en el puerto 53
  • -diniciar servidor en primer plano
  • --no-hostsno use el archivo de hosts locales
  • --conf-file=/dev/nullno use ningún archivo de configuración
  • --server=8.8.8.8 --server=8.8.4.4direcciones de servidores ascendentes (Google DNS en este ejemplo)
  • --address=/example.com/192.168.0.101anfitriones para anular. Debe agregar sus hosts en esta línea. También puede agregar varios hosts allí.

Luego cambie el servidor DNS en el dispositivo. Esto se puede hacer fácilmente usando la aplicación DNS Changer .

Después de estos pasos, las solicitudes a estos hosts deben enviarse a sus direcciones.

La forma más sencilla de definir una asignación de host a IP es hostsun archivo, ya que la mayoría de los solucionadores de DNS respetan ese archivo . Pero como se menciona en otras respuestas, no es posible editar /etc/hostssin rootear el dispositivo Android. Acceder al servidor web con la dirección IP tampoco funcionará debido al alojamiento virtual. Aquí hay algunas opciones con las que puede ir en un dispositivo no rooteado:

  • Use una aplicación VPN que intercepte el tráfico DNS y busque un hostsarchivo personalizado antes de realizar consultas al servidor DNS ascendente configurado.
  • Ejecute un servidor DNS; se pueden configurar para devolver una dirección IP predefinida para un nombre específico. Por ejemplo, si usa dnsmasq, agregue address=/mysite.local/10.1.2.3a “dnsmasq.conf” . O en dnscrypt-proxyagregar mysite.local 10.1.2.3a "cloaking-rules.txt" .
  • Configure el teléfono para usar un proxy o VPN y luego agregue la entrada 10.1.2.3 mysite.localal hostsarchivo en el servidor proxy o ejecute un servidor DNS local en el servidor VPN.
  • Si el gestor de arranque se puede desbloquear, edite hostsel archivo desde la recuperación personalizada.

Para obtener más detalles, consulte: ¿Cómo resolver siempre un nombre de dominio en una IP fija sin rootear?


RELACIONADO:

No puede cambiar el archivo en un sistema de archivos de solo lectura, pero puede usar bindla opción para sustituir el archivo ubicado en rw fs. Esto debería funcionar solo hasta el próximo reinicio.

Ejemplo:

mount /sdcard/hosts /etc/hosts -o bind
bind file /sdcard/hosts  to /etc/hosts
Si bien la respuesta es correcta y sigue el enfoque de Magisk systemless, la pregunta es específicamente sobre dispositivos no rooteados . No se puede ejecutar mountsin privilegios de root. Su respuesta es más adecuada aquí: android.stackexchange.com/q/60150/218526