Есть ли способ предоставить приложению определенное имя хоста, которое отличается от имени хоста машины в Linux?

Есть ли способ предоставить приложению определенное имя хоста, которое отличается от имени хоста машины в Linux?

Есть ли способ предоставить определенное имя хоста приложению, которое отличается от имени хоста машины в Linux? По сути, у меня есть часть программного обеспечения, которая ожидает, что локальная машина будет иметь определенное имя хоста, которое отличается от имени хоста моей машины. Вместо того, чтобы менять имя хоста машины глобально, я хотел бы иметь механизм, с помощью которого я мог бы либо запустить программу в среде с указанным именем хоста, либо запустить программу напрямую с указанным именем хоста.

решение1

Это возможно с правами root. Используйтеunshare --utsчтобы создать новое пространство имен UTS 1 , задайте в нем желаемое имя хоста, затем suвернитесь в свою учетную запись и запустите приложение. Например:

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

Пространства имен по умолчанию ограничены процессом их создателя, поэтому новое имя хоста будет видно только программам, которые вы запускаете.внутри«неразделенное» окно.

Примечание:Не забудьте добавить новое имя хоста, например /etc/hosts127.0.0.1, так как многие программы ожидают/зависят от того, будет ли оно разрешимым.


1 Не спрашивайте, что означает "UTS". Насколько я знаю, это остаток древнего Unix.

решение2

Если ваше приложение не считывает выходные данные из файла напрямую hostname, /etc/hostnameвы всегда можете создать псевдоним для своей машины, как показано ниже.

#
# /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

или вы можете попробовать создать chroot с другим именем хоста, напримерздесь

решение3

Я предполагаю, что у вас нет исходного кода программы, о которой идет речь. Чтение имени хоста машины выполняется через вызов sys,gethostname(), обойти которую без доступа к исходному коду программы будет сложно.

Затем вам следует использовать виртуальное решение для запуска программы. Контейнеры, докеры, виртуальные машины имеют достаточную степень изоляции, чтобы вы могли переименовать их в требуемое значение, не подвергая риску вашу хост-машину.Контейнерочень легкое решение, которое потребляет очень мало ресурсов вашего хоста.

Связанный контент