Soru Ana bilgisayar adını ayarlama: FQDN veya kısa ad?


Sistem ana bilgisayar adının ayarlanmasının "tercih edilen" yönteminin Red Hat / CentOS ve Debian / Ubuntu sistemleri arasında temel olarak farklı olduğunu fark ettim.

CentOS belgeleri ve RHEL dağıtım kılavuzu ana bilgisayar adını söyle FQDN olmalı:

HOSTNAME=<value>, nerede <value> Tam Nitelikli Alan Olmalı   Ad (FQDN) gibi hostname.example.comama ne olursa olsun olabilir   ana bilgisayar adı gerekli.

RHEL yükleme rehberi biraz daha belirsiz:

Kurulum, bu bilgisayar için bir ana bilgisayar adı sağlamanızı ister.    tam nitelikli alan adı (FQDN) biçiminde hostname.domainname   veya biçiminde kısa bir ana bilgisayar adı olarak hostname.

Debian referansı ana bilgisayar adı yazıyor FQDN'yi kullanmamalıdır:

3.5.5. Ana bilgisayar adı

Çekirdek sistemi korur hostname. Runlevel init betiği   S'ye bağlanan S/etc/init.d/hostname.sh"sistemi ayarlar   açılışta ana bilgisayar adı hostname komut) saklanan isimle   içinde "/ Etc / ana bilgisayar". Bu dosya içermelidir sadece sistem ana bilgisayar adı   tam nitelikli bir alan adı değil.

IBM'in kullanacağı özel bir öneri görmedim, ancak bazı yazılımlar bir tercih var gibi görünüyor.

Sorularım:

  • Heterojen bir ortamda, satıcı tavsiyesini kullanmak mı, yoksa birini seçip tüm sunucular arasında tutarlı mıdır?
  • Ana bilgisayar isminin FQDN'ye mi yoksa kısa adı mı ayarlandığına duyarlı olan hangi yazılımlarla karşılaştınız?

164
2017-11-17 13:07


Menşei




Cevaplar:


Tüm çevreye tutarlı bir yaklaşım seçerdim. Her iki çözüm de iyi çalışır ve çoğu uygulama ile uyumlu kalır. Ancak yönetilebilirlik konusunda bir fark var.

HOSTNAME ayarı olarak kısa adı kullanarak gidiyorum ve FQDN'yi ilk sütunda /etc/hosts sunucunun IP'si için kısa adı takip eder.

İkisi arasında bir tercihi zorlayan veya görüntüleyen birçok yazılım paketi ile karşılaşmadım. Bazı uygulamalarda, özellikle kayıt olmak için kısa adı buluyorum. Belki iç etki alanlarını görmekte şanssızımdır. server.northside.chicago.rizzomanufacturing.com. Bunu günlüklerinde veya birinde görmek isteyen kabuk istemi?

Bazen şirket içi satın alımlara veya dahili alan adlarının ve / veya alt alan adlarının değiştiği yeniden yapılanmalara katılıyorum. Bu durumlarda kısa ana bilgisayar adını kullanmayı seviyorum çünkü günlüğe kaydetme, kickstarts, yazdırma, sistem izleme, vb. Yeni etki alanı adlarını hesaba katmak için tam olarak yeniden yapılandırmaya gerek duymaz.

"İfp.com" iç etki alanına sahip "rizzo" adlı bir sunucu için tipik bir RHEL / CentOS sunucu kurulumu şöyle görünür:

/etc/sysconfig/network:
HOSTNAME=rizzo
...

-

/etc/hosts:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.100.13   rizzo.ifp.com rizzo

-

[root@rizzo ~]# hostname 
rizzo

-

/var/log/messages snippet:
Dec 15 10:10:13 rizzo proftpd[19675]: 172.16.100.13 (::ffff:206.15.236.182[::ffff:206.15.236.182]) - Preparing to               
 chroot to directory '/app/upload/GREEK'
Dec 15 10:10:51 rizzo proftpd[20660]: 172.16.100.13 (::ffff:12.28.170.2[::ffff:12.28.170.2]) - FTP session opened.
Dec 15 10:10:51 rizzo proftpd[20660]: 172.16.100.13 (::ffff:12.28.170.2[::ffff:12.28.170.2]) - Preparing to chroot                
to directory '/app/upload/ftp/SRRID'

96
2017-11-17 13:20



Senin gibi, kısa ismi tercih ediyorum, ancak bazı Oracle uygulamalarının çıktılarını istediğimi keşfettim. hostname FQDN olmak. Sadece içinde olmak /etc/hosts yeterince iyi değil. Bu benim tutarlılığımla karıştı. - James O'Gorman
Bu örnekteki ana bilgisayar adlarının kapitalizasyonundaki fark kesinlikle en iyi uygulama ref değil: tools.ietf.org/search/rfc1178 - teknopaul
olmamalı /etc/sysconfig/network gibi satırları içerir: NETWORKING=yes, NETWORKING_IPV6=no, HOSTNAME=example.com, NISDOMAIN=example ? - Jasmine Lognnes
@JasmineLognnes Doğru, düzeltdim. Umarım ebediyen aldırmaz. - kubanczyk
Sadece tercih değil. Görmek hostname(1) herhangi bir Linux makinesinde.


Hemen hemen tüm yazılımlar, ana bilgisayar adını doğru bir şekilde ayarlamaya hassastır. Digg I'de çalışırken, bir zamanlar, masum bir görünüme neden olmaktan ötürü, 2 saat boyunca tüm siteyi indirdi. /etc/hostsSistemin ana bilgisayar adı kavramını etkiledi. Hafifçe bas. Yani, burada biraz kafanız karışmış olabilir. Sanmıyorum HOSTNAME= ayar, Debian tabanlı dağıtımların nasıl kullanıldığına doğrudan eşdeğerdir /etc/hostname.

Benim için heterojen bir ortamda ne işe yarıyor:

  1. Ana makine adını, yapılandırma yönetim yazılımınızda bir koşulu kullanarak satıcı tarafından önerilen şekilde ayarlayın.
  2. Kullan hostname Çekirdek tarafından kullanılan ana bilgisayar adını ayarlamak için komut.
  3. İçinde /etc/hosts:

    127.0.0.1    localhost
    10.0.0.1     hostname.example.com     hostname
    

Bu yapılandırma henüz beni başarısız etmedi.


36
2017-11-21 18:48



Bu işte kullandığım oldukça fazla. Ortam adı, ortamınızdaki ilgili makineler için alan adı DNA arama yolunda (/etc/resolv.conf) olduğu sürece kısa adı iyi olmalıdır. - gWaldo
Özellikle halka açık bir ağa karşı yerel bir ağ IP'si öneriyor musunuz? - code_monk


Kesinlikle kesinlikle bir şekilde ya da başka bir şekilde yapmak için söyleyecek online başvuru bulma konusunda hiçbir sorun olacaktır. Öyle görünüyor ki, hostname olarak kısa bir isme sahip olmak ve / etc / hosts dosyasında tam ismine sahip olmak kesinlikle çok daha yaygın. Daha duyarlı bir yol gibi görünüyor, o zaman tam nitelikli bir isim gerektiren hizmetler çağrıya uyarlanabilir hostname --fqdn yerine.

Son zamanlarda sadece bir fqdn tarafından döndürülen bir yazılım parçasıyla karşılaştım. hostnameganeti olan Bunu belgeliyorlar İşte. Uyum sağlayamayacakları hiçbir sebep göremiyorum hostname --fqdn, ancak.


29
2017-12-15 14:45



Örnek vermek için bonus! Teşekkürler. - Cakemox
"Uyum sağlayamayacakları hiçbir sebep göremiyorum hostname --fqdn"Neden tam nitelikli bir ana bilgisayar adı" başlığı altında ilk paragrafta yanıtlanır - bu varsayım çalışması gerektirir ve çalışan bir çözümleyici gerektirir. Çekirdeğin sorulması en güvenli ve en güvenilir seçenektir. - womble♦
@womble - / etc / hosts dosyasının makine için bir girişi olduğu sürece (10.0.0.1 hostname.example.com hostname) ve /etc/nsswitch.conf, DNS'den önce yerel çözünürlüğü belirtir (hosts: files dns) Daha sonra çalışan bir çözümleyiciye sahip olmak yerel ana bilgisayar dosyası tarafından yerine getirilir. Bir ana bilgisayar adı yerine FQDN kullanmanın argümanı nadiren su tutar. Ayrıca, katı bir şekilde gerektiren bir başka yazılım örneği hostname bir FQDN dönmek Zimbra posta sunucusu paketidir. - crashmaxed
@crashmaxed: Bu, herhangi bir belirli bir ortamda mümkün olmayabilir veya yanlışlıkla berbat olabilir, birkaç ekstra gereksinimleri. FQDN'nin çekirdek veri yapılarına sahip olması daha basittir. - womble♦


Biraz teğetsel olarak, bu soruyu araştırırken, "ana bilgisayar adı" nın kaynak kodunu kontrol edip araştırma sonuçlarını basmak için bir senaryo yazacak kadar deliriyorum (Fedora 19). Kayıp olan şey, "/ etc / hosts" e bir bakıştır. Bu, benim düşünceme göre, ilk etapta bütün bunların hepsinden uzak tutulmalıdır.

#!/bin/bash

function pad {
   if [[ $1 == '?' ]]; then
      printf "%-23s" "?"
   else
      printf "%-23s" "'$1'"
   fi
}

# ----- Kernel -----

# Two ways to configure the kernel values: 
# 1) Put FQDN into "kernel.hostname" and nothing into "kernel.domainname"
# 2) Put machine name into "kernel.hostname" and DNS domain name into "kernel.domainname" (makes more sense)

echo "== Kernel values =="
echo

H=`/sbin/sysctl -n kernel.hostname`
D=`/sbin/sysctl -n kernel.domainname`

echo "Kernel hostname: '$H'"
echo "Kernel domainname: '$D'"

# ----- What does bash say -----

echo
echo "== According to bash =="
echo

echo "HOSTNAME = '$HOSTNAME'"

# ----- Hostname config file ------

echo
echo "== Hostname config file =="
echo

ETCH="/etc/hostname"

if [[ -f $ETCH ]]; then
   CONTENTS=`cat $ETCH`
   echo "File '$ETCH' contains: '$CONTENTS'"
else
   echo "File '$ETCH' does not exist"
fi

# ----- Network config file ------

echo
echo "== Network config file =="
echo

SYSN="/etc/sysconfig/network"

if [[ -f $SYSN ]]; then
   LINE=`grep -e "^HOSTNAME=" $SYSN`
   if [[ -n $LINE ]]; then
      echo "File '$SYSN' contains: '$LINE'"
   else 
      echo "File '$SYSN' exists but does not contain a line for 'HOSTNAME'"
   fi
else
   echo "File '$SYSN' does not exist"
fi

# ----- Nodename -------

echo
echo "== Nodename =="
echo

UNAME=`uname --nodename` # On Linux, this is the hostname

echo "The 'nodename' given by 'uname --nodename' is: '$UNAME'"

# ----- The 'hostname' mess ------

THE_HOSTNAME=`hostname`
SHORT_NAME=`hostname --short`
NIS_DNAME=`domainname`     
YP_DNAME=`hostname --yp`    # Same as `nisdomainname` ; this may fail with "hostname: Local domain name not set"

if [[ $? != 0 ]]; then
   YP_DNAME="?"
fi

echo
echo "== 'hostname' directly obtained values =="
echo
echo "The result of gethostname();"
echo "...obtained by running 'hostname'"
echo "Hostname: $(pad $THE_HOSTNAME)"
echo
echo "The part before the first '.' of the value returned by gethostname();"
echo "...obtained by running 'hostname --short'"
echo "Short name: $(pad $SHORT_NAME)"
echo
echo "The result of getdomainname(); the code of 'hostname' seems to call this the 'NIS domain name';"
echo "...on Linux, this is the kernel-configured domainname;"
echo "...obtained by running 'domainname'"
echo "NIS domain name: $(pad $NIS_DNAME)"
echo
echo "The result of yp_get_default_domain(), which may fail;"
echo "...obtained by running 'ĥostname --yp'"
echo "YP default domain: $(pad $YP_DNAME)"

DNS_DNAME=`hostname --domain`  # Same as `dnsdomainname`'
FQDN_NAME=`hostname --fqdn`
ALIAS_NAME=`hostname --alias`

echo
echo "== 'hostname' values obtained via DNS =="
echo
echo "The part after the first '.' of the 'canonical name' value returned by getaddrinfo(gethostname());"
echo "...obtained by running 'hostname --domain'"
echo "DNS domain name: $(pad $DNS_DNAME)"
echo
echo "The 'canonical name' value returned by getaddrinfo(gethostname());"
echo "...obtained by running 'hostname --fqdn'"
echo "Fully qualified hostname: $(pad $FQDN_NAME)"
echo
echo "Alias obtained by gethostbyname(gethostname());"
echo "...obtained by running 'hostname --alias'"
echo "Hostname alias: $(pad $ALIAS_NAME)"

BY_IP_ADDR=`hostname --ip-address`
ALL_IP_ADDR=`hostname --all-ip-addresses`
ALL_FQDN_NAMES=`hostname --all-fqdn`

echo
echo "== 'hostname' values obtained by collecting configured network addresses =="
echo
echo "Collect the IP addresses from getaddrinfo(gethostname()), apply getnameinfo(ip) to all those addresses;"
echo "...obtained by running 'hostname --ip-address'"
echo "By IP address: $BY_IP_ADDR"
echo
echo "Call getnameinfo(NI_NUMERICHOST) on all addresses snarfed from active interfaces;"
echo "...obtained by running 'hostname --all-ip-addresses'"
echo "All IP addresses: $ALL_IP_ADDR"
echo
echo "Call getnameinfo(NI_NAMEREQD) on all addresses snarfed from active interfaces (involves lookup in /etc/hosts);"
echo "...obtained by running 'hostname --all-fqdn'"
echo "All fully qualified hostnames: $ALL_FQDN_NAMES"

Fedora 19 çalışan bir Amazon EC2 VM'deki çıktıkernel değerlerini elle doldurduktan ve doldurduktan sonra /etc/hostnameancak hiçbir değişiklik yapılmadan /etc/hosts o zaman şöyle olabilir:

== Kernel values ==

Kernel hostname: 'kyubee'
Kernel domainname: 'homelinux.org'

== According to bash ==

HOSTNAME = 'ip-172-31-24-249.localdomain'

== Hostname config file ==

File '/etc/hostname' contains: 'kyubee.homelinux.org'

== Network config file ==

File '/etc/sysconfig/network' exists but does not contain a line for 'HOSTNAME'

== Nodename ==

The 'nodename' given by 'uname --nodename' is: 'kyubee'

== 'hostname' directly obtained values ==

The result of gethostname();
...obtained by running 'hostname'
Hostname: 'kyubee'

The part before the first '.' of the value returned by gethostname();
...obtained by running 'hostname --short'
Short name: 'kyubee'

The result of getdomainname(); the code of 'hostname' seems to call this the 'NIS domain name';
...on Linux, this is the kernel-configured domainname;
...obtained by running 'domainname'
NIS domain name: 'homelinux.org'

The result of yp_get_default_domain(), which may fail;
...obtained by running 'ĥostname --yp'
YP default domain: 'homelinux.org'

== 'hostname' values obtained via DNS ==

The part after the first '.' of the 'canonical name' value returned by getaddrinfo(gethostname());
...obtained by running 'hostname --domain'
DNS domain name: ''

The 'canonical name' value returned by getaddrinfo(gethostname());
...obtained by running 'hostname --fqdn'
Fully qualified hostname: 'kyubee'

Alias obtained by gethostbyname(gethostname());
...obtained by running 'hostname --alias'
Hostname alias: ''

== 'hostname' values obtained by collecting configured network addresses ==

Collect the IP addresses from getaddrinfo(gethostname()), apply getnameinfo(ip) to all those addresses;
...obtained by running 'hostname --ip-address'
By IP address: fe80::8f6:8eff:fe49:9e21%eth0 172.31.24.249

Call getnameinfo(NI_NUMERICHOST) on all addresses snarfed from active interfaces;
...obtained by running 'hostname --all-ip-addresses'
All IP addresses: 172.31.24.249

Call getnameinfo(NI_NAMEREQD) on all addresses snarfed from active interfaces (involves lookup in /etc/hosts);
...obtained by running 'hostname --all-fqdn'
All fully qualified hostnames: ip-172-31-24-249.eu-west-1.compute.internal

Perl'de tam nitelikli ana bilgisayar adını elde etmenin esnek yolu şöyle olurdu:

sub getHostname {

   my $hostname_short = `/bin/hostname --short`;
   if ($? != 0) { print STDERR "Could not execute 'hostname --short' -- exiting\n"; exit 1 }
   chomp $hostname_short;

   my $hostname_long  = `/bin/hostname`;
   if ($? != 0) { print STDERR "Could not execute 'hostname' -- exiting\n"; exit 1 }
   chomp $hostname_long;

   if ($hostname_long =~ /^${hostname_short}\..+$/) {
      # "hostname_long" is a qualified version of "hostname_short"
      return $hostname_long
   }
   else {
      # both hostnames are "short" (and are equal)
      die unless ($hostname_long eq $hostname_short);

      my $domainname = `/bin/domainname`;
      if ($? != 0) { print STDERR "Could not execute 'domainname' -- exiting\n"; exit 1 }
      chomp $domainname;

      if ($domainname eq "(none)") {
         # Change according to taste
         return "${hostname_short}.localdomain"
      }
      else {
         return "${hostname_short}.${domainname}"
      }
   }
}

ve bash şöyle olurdu:

function getHostname {

   local hostname_short=`/bin/hostname --short`

   if [ $? -ne 0 ]; then
      echo "Could not execute 'hostname --short' -- exiting" >&2; exit 1
   fi

   local hostname_long=`/bin/hostname`

   if [ $? -ne 0 ]; then
      echo "Could not execute 'hostname' -- exiting" >&2; exit 1
   fi

   if [[ $hostname_long =~ ^"$hostname_short"\..+$ ]]; then
      # "hostname_long" is a qualified version of "hostname_short"
      echo $hostname_long
   else
      # both hostnames are "short" (and are equal)
      if [[ $hostname_long != $hostname_short ]]; then
         echo "Cannot happen: '$hostname_long' <> '$hostname_short' -- exiting" >&2; exit 1
      fi

      local domainname=`/bin/domainname`

      if [ $? -ne 0 ]; then
         echo "Could not execute 'domainname' -- exiting" >&2; exit 1
      fi

      if [[ domainname == '(none)' ]]; then
         # Change according to taste
         echo "${hostname_short}.localdomain"
      else
         echo "${hostname_short}.${domainname}"
      fi
   fi
}

notlar 

Not 1: HOSTNAME, bash'ın sağladığı bir kabuk değişkeni ("Geçerli ana bilgisayarın adıyla otomatik olarak ayarlanır.") Ancak bash'ın bu değere ulaştığı konusunda hiçbir belirti yoktur.

Not 2: /boot/initrams-FOO.img içinde / etc / hostname unutma.


10
2017-10-03 11:39



Eğer bu açık olmalıysa özür dilerim, ancak bunlardan herhangi birinin hostname ayarlaması ile ne ilgisi var? - Chris S
Temel olarak, Fedora 19 EC2 örneklerimde ana bilgisayar adını belirlerken araştırma yaparken yaptığım notlar. Sonuç olarak: 1) FQHN'yi / etc / host adında ayarlayın 2) / etc / hosts öğesine dokunmayın 3) 'çekirdek hostname' değerini FQHN veya unqualified hostname olarak ayarlayabilirsiniz. / etc / hostname 4) 'kernel domainname' değerini '(none)' dan daha güzel olan domainname olarak ayarlayabilirsiniz. - David Tonhofer


/ Etc / hosts seçenekleri iyi çalışıyor.

Ancak, tüm uygun dosyaların güncellendiğinden emin olmak istersiniz. kurmak araç


-4
2017-11-25 11:56



Dağıtımımın bir "kurulum" aracı yok; hangi dağıtımı kullanıyorsunuz? - nickgrim
herhangi bir redhat tabanlı işletim sistemi kurulum aracı rhel / centos / fedora whar OS var mı? - Riaan
Soru, RHEL tabanlı ve Debian tabanlı dağıtımlar arasındaki farklılıklar hakkında konuştuğundan, konuşmacının her ikisini de kullandığını varsaymalıyız. Debian tabanlı dağıtımlarda 'kurulum' aracı yoktur. - Martijn Heemels


Hm ... Linux ana bilgisayarlarında, HOSTNAME ve FQDN'yi değiştirmek isterseniz, 3 adımı çözmelisiniz (örneğin, yeni ana bilgisayar rizzo.ifp.com):

Aşama 1 NETWORK özellikleri yapılandırmasında HOST değerini değiştirin:

sudo vi /etc/sysconfig/network

Dize değiştir veya ekle:

HOSTNAME=rizzo.ifp.com

Adım 2 Anasistem yapılandırmanızı düzenleyin

sudo vim /etc/hosts
#IPv4
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
[External IP]   rizzo rizzo.ifp.com

Aşama 3 Ana makinenizi yeniden başlatın Aferin, sadece yeni yapılandırmayı kontrol et

[rizzo@rizzo]# hostname -f
rizzo.ifp.com

-4
2017-12-22 10:56





Sipariş doğru değil. Olmak zorunda:

1.2.3.4 full.example.com full

Yani örnek şunu beğendi:

[External IP] rizzo.example.com rizzo 

-4
2018-04-05 07:23



Bu soru zaten çok kaliteli cevaplar verdi. Bu yeni bir şey eklemiyor. - Esa Jokinen