¿Existe alguna manera de proporcionar un nombre de host específico a una aplicación que difiera del nombre de host de la máquina en Linux? Básicamente, tengo un software que espera que la máquina local tenga un determinado nombre de host que difiere del nombre de host de mi máquina. En lugar de cambiar el nombre de host de la máquina globalmente, me gustaría un mecanismo donde pueda ejecutar el programa en un entorno con el nombre de host especificado o ejecutar el programa directamente con el nombre de host especificado.
Respuesta1
Es posible con privilegios de root. Usarunshare --uts
Para crear un nuevo espacio de nombres UTS 1 , configure el nombre de host deseado en él, luego su
regrese a su cuenta y ejecute la aplicación. Por ejemplo:
ongun@foo$ sudo -s
~ create a new namespace ~
root@foo# unshare --uts /bin/sh
~ this terminal now has its own namespace – change the hostname ~
root@foo# hostname quux
~ switch back ~
root@quux# sudo -s -u ongun
ongun@quux$ /usr/bin/game
Los espacios de nombres están limitados a su proceso creador de forma predeterminada, por lo que el nuevo nombre de host será visible solo para los programas que ejecute.adentrola ventana "no compartir".
Nota:No olvide agregar el nuevo nombre de host /etc/hosts
como 127.0.0.1, ya que muchos programas esperan o dependen de que se pueda resolver.
1 No preguntes qué significa "UTS". Lo mejor que sé es que es un resto del antiguo Unix.
Respuesta2
Si su aplicación no lee directamente la salida hostname
o /etc/hostname
el archivo, siempre puede crear un alias para su máquina como se muestra a continuación.
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost MYHOSTNAME OTHER_ALIAS
::1 localhost.localdomain localhost MYHOSTNAMEv6 OTHER_ALIASv6
o puedes intentar crear un chroot con un nombre de host diferente comoaquí
Respuesta3
Supongo que no tienes el código fuente del programa en cuestión. La lectura del nombre de host de una máquina se realiza a través de una llamada al sistema,obtener nombre de host(), que sería difícil de eludir sin acceso al código fuente del programa.
Luego debería utilizar una solución virtual para ejecutar el programa. Los contenedores, acopladores y máquinas virtuales tienen el grado suficiente de aislamiento para permitirle cambiarles el nombre al valor requerido, sin comprometer su máquina host.Un contenedorEs una solución muy liviana que consumirá muy pocos recursos de su host.