วิธีการตั้งค่าชื่อโฮสต์แบบเต็มบน CentOS 7.0


19

ฉันจะตั้งชื่อโฮสต์แบบเต็มบน CentOS 7.0 ได้อย่างไร

ฉันได้เห็นโพสต์ออนไลน์ไม่กี่ตัวอย่างเช่นการใช้:

$ sudo hostnamectl set-hostname nodename.domainname

อย่างไรก็ตามการใช้ชื่อโดเมนจะไม่ส่งคืนอะไร:

$ domainname
(none)

นอกจากนี้:

$ hostname
nodename.domainname

อย่างไรก็ตาม

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

บาง debug output:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

คำตอบ:


30

ในการตั้งชื่อโฮสต์ ทำใช้hostnamectlแต่เฉพาะกับชื่อโฮสต์เช่นนี้

hostnamectl set-hostname nodename


ในการตั้งค่าไฟล์แก้ไขชื่อโดเมน (DNS)/etc/hostsและตรวจสอบให้แน่ใจว่า:

  1. มีเส้นตรง<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>นั้น
  2. ไม่มีสายอื่น ๆ ด้วย<some IP> <hostname>และรวมถึงบรรทัดที่มี127.0.0.1และ::1(IPv6) ที่อยู่

โปรดทราบว่านอกจากว่าคุณกำลังใช้ NIS (none)เป็นเอาต์พุตที่ถูกต้องเมื่อรันdomainnameคำสั่ง

ในการตรวจสอบว่าชื่อโดเมน DNS ของคุณถูกตั้งค่าอย่างถูกต้องให้ใช้dnsdomainnameคำสั่งและตรวจสอบผลลัพธ์ของhostnamevs hostname -f(FQDN)


NIS กับโดเมน DNS

ปัญหานี้ทำให้ฉันสับสนเมื่อฉันเจอมันครั้งแรก ดูเหมือนว่าdomainnameคำสั่งจะมาก่อนความนิยมของอินเทอร์เน็ต แทนที่จะเป็นชื่อโดเมน DNS จะแสดงหรือตั้งค่าชื่อโดเมนNIS (บริการข้อมูลเครือข่าย)หรือที่รู้จักในชื่อ YP (สมุดหน้าเหลือง) (กลุ่มคอมพิวเตอร์ที่มีบริการโดยเซิร์ฟเวอร์ NIS หลัก) คำสั่งนี้จะแสดงชื่อที่ส่งคืนโดยgetdomainname(2)ฟังก์ชันไลบรารีมาตรฐาน ( nisdomainnameและypdomainnameเป็นชื่อทางเลือกสำหรับคำสั่งนี้)

แสดงชื่อโดเมน FQDN หรือ DNS

ในการตรวจสอบชื่อโดเมน DNS (อินเทอร์เน็ต) คุณควรรันdnsdomainnameคำสั่งหรือhostnameด้วย-d, --domainตัวเลือกต่างๆ (โปรดทราบว่าdnsdomainnameไม่สามารถใช้คำสั่งเพื่อตั้งชื่อโดเมน DNS ได้ - ใช้เพื่อแสดงเท่านั้น)

ในการแสดงFQDN (ชื่อโดเมนที่ผ่านการรับรองโดยสมบูรณ์)ของระบบให้รันhostnameด้วย-f, --fqdn, --longตัวเลือก (เช่นเดียวกันคำสั่งนี้ไม่สามารถใช้เพื่อตั้งค่าส่วนของชื่อโดเมน)

คำสั่งข้างต้นใช้โปรแกรมแก้ไขของระบบ (นำมาใช้โดยgethostbyname(3)ฟังก์ชั่นจากไลบรารีมาตรฐานตามที่ระบุโดย POSIX) เพื่อกำหนดชื่อโดเมน DNS และ FQDN

การแก้ไขชื่อ

ในระบบปฏิบัติการที่ทันสมัยเช่น RHEL 7 hostsรายการ/etc/nsswitch.confจะถูกใช้เพื่อแก้ไขชื่อโฮสต์ ในเครื่อง CentOS 7 ของคุณบรรทัดนี้ได้รับการกำหนดค่าเป็น (ค่าเริ่มต้นสำหรับ CentOS 7):

hosts:      files dns

ซึ่งหมายความว่าเมื่อฟังก์ชั่นการแก้ไขค้นหาชื่อโฮสต์หรือที่อยู่ IP พวกเขาจะตรวจสอบรายการใน/etc/hosts ไฟล์ก่อนแล้วจึงลองเซิร์ฟเวอร์ DNSที่อยู่ในรายการ/etc/resolv.confถัดไป

เมื่อทำงานhostname -fเพื่อรับ FQDN ของโฮสต์ฟังก์ชันตัวแก้ปัญหาพยายามรับ FQDN สำหรับชื่อโฮสต์ของระบบ ถ้าโฮสต์ที่ไม่ได้ระบุไว้ใน/etc/hostsไฟล์หรือเซิร์ฟเวอร์ DNS ที่เกี่ยวข้องพยายามที่ล้มเหลวและรายงานว่าhostnameName or service not known

เมื่อhostname -dมีการเรียกใช้เพื่อรับชื่อโดเมนการดำเนินการเดียวกันจะดำเนินการและส่วนชื่อโดเมนจะถูกกำหนดโดยการแยกส่วนชื่อโฮสต์และจุดแรกจาก FQDN

กำหนดค่าชื่อโดเมน

1. อัปเดตเซิร์ฟเวอร์ชื่อ DNS ที่เกี่ยวข้อง

ในกรณีของฉันฉันได้เพิ่มรายการสำหรับเครื่อง CentOS 7 ใหม่ของฉันในเซิร์ฟเวอร์ DNS สำหรับ LAN ในพื้นที่ของฉันดังนั้นเมื่อ FQDN ไม่พบใน/etc/hostsไฟล์เมื่อฉันวิ่งhostnameด้วย-dหรือ-fตัวเลือกบริการ DNS ท้องถิ่นสามารถ แก้ไข FQDN สำหรับชื่อโฮสต์ใหม่ของฉันอย่างสมบูรณ์

2. ใช้/etc/hostsไฟล์

หากไม่ได้กำหนดค่าเซิร์ฟเวอร์ DNS คุณสามารถระบุชื่อโดเมนแบบเต็มได้ใน/etc/hostsไฟล์ วิธีทั่วไปในการทำเช่นนี้คือการระบุที่อยู่ IP หลักของระบบตามด้วย FQDN และชื่อโฮสต์แบบสั้น เช่น,

172.22.0.9  nodename.domainname nodename

ตัดตอนมาจากhostnameหน้าคน

คุณไม่สามารถเปลี่ยน FQDN ด้วยหรือhostnamednsdomainname

วิธีที่แนะนำในการตั้งค่า FQDN คือการทำให้ชื่อโฮสต์เป็นชื่อแทนสำหรับชื่อแบบเต็มโดยใช้/etc/hosts,DNS หรือ NIS ตัวอย่างเช่นหากชื่อโฮสต์คือ "ursula" อาจมีบรรทัด/etc/hostsที่อ่าน:

27.0.1.1    ursula.example.com ursula

ในทางเทคนิค: FQDN เป็นชื่อ getaddrinfo (3) ส่งคืนสำหรับชื่อโฮสต์ที่ส่งคืนโดย gethostname (2) ชื่อโดเมน DNS เป็นส่วนหลังจุดแรก

ดังนั้นจึงขึ้นอยู่กับการกำหนดค่าของตัวแก้ไข (โดยปกติ /etc/host.conf) วิธีที่คุณสามารถเปลี่ยนได้ โดยปกติไฟล์โฮสต์ก่อนที่จะแยก DNS หรือ NIS ดังนั้นมันเป็นเรื่องธรรมดามากที่สุดในการเปลี่ยน FQDN /etc/hostsใน


ขอบคุณสำหรับคำตอบ. ฉันได้อัปเดตคำถาม - น่าเสียดายที่hostname -fคำสั่งไม่ทำงานบน CentOS vm ของฉัน
Chris Snow

@SHC คุณสามารถแก้ไขคำถามของคุณเพื่อรวมเนื้อหา/etc/hostnameและผลลัพธ์ของได้grep ^hosts: /etc/nsswitch.confหรือไม่ ผมไม่ทราบว่ามากเกี่ยวกับการจัดการเครือข่าย แต่ฉันยังสังเกตเห็นว่าฉัน/etc/NetworkManager/NetworkManager.confมีเส้นของมันส่วน:[keyfile] hostname=<nodename>
Anthony G - ความยุติธรรมสำหรับโมนิก้า

1
@SHC ฉันได้ทำการค้นคว้าปัญหามาแล้วและได้แก้ไขคำตอบของฉันอย่างรุนแรง ตอนนี้ควรตอบคำถามของคุณให้ละเอียดยิ่งขึ้น
Anthony G - ความยุติธรรมสำหรับโมนิก้า

lede กับคำตอบนี้ไม่สอดคล้องกับร่างกาย hostnamectl set-hostname nodename.domainnameไม่ได้ตั้งค่าชื่อโดเมน DNS (และไม่ใช่ว่าจะตั้งชื่อโดเมน NIS ด้วย)
sourcejedi

@sourcejedi ฉันไม่มีเวลา แต่ฉันจะพยายามอธิบายคำตอบของฉันเมื่อฉันได้รับโอกาส
Anthony G - ความยุติธรรมสำหรับโมนิก้า

1

บน Centos7 โดยใช้ nmtui เพื่อตั้งชื่อโฮสต์และให้รูปแบบ nodename.domainname / FQDN กำลังให้ผลลัพธ์ที่สอดคล้องกัน ชื่อโฮสต์ [d / f / s] ทั้งหมดให้ผลลัพธ์ที่คาดหวังที่ถูกต้อง มันไม่ได้เก็บไว้ใน /etc/resolv.conf หรือ / etc / hosts แต่ FQDN ถูกเขียนไปยัง / etc / hostname เป็นรายการบรรทัดเดียว


0

สำหรับฉันไฟล์ / etc / hostname มี FQDN แทนชื่อโฮสต์ (เช่นชื่อโฮสต์แทน hostname.example.com) เมื่อฉันลบโดเมนออกจากชื่อโฮสต์ใน / etc / hostname คำสั่ง 'hostname -f' จะทำงานตามปกติ

ฉันคิดว่านี่เป็นการนำมาใช้เมื่อฉันติดตั้ง CentOS 7 VM ฉันควรป้อนชื่อโฮสต์ไม่ใช่ชื่อโดเมนแบบเต็ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.