ควรใช้ FQDN ใน / etc / hostname แทนชื่อโฮสต์หรือไม่


10

ขณะที่ผมอ่านในหน้าคนก็จะแนะนำให้ใส่ชื่อโฮสต์ (ไม่มีชื่อโดเมน) /etc/hostnameเพื่อ ตัวอย่างเช่นโฮสต์แทนhost.domainsub.domaintld แต่ที่ผมรู้ว่าซอฟต์แวร์บางส่วนอาศัยที่มีในFQDN/etc/hostname

สิ่งหนึ่งที่ควรระบุในเครื่อง/etc/hostname Debian / Ubuntu

ถ้าไม่ใช่ FQDN ควรระบุ FQDN แทนที่ไหน

ฉันรู้ว่าคำถามนั้นค่อนข้างเก่า แต่ไม่พบคำตอบที่ชัดเจน บางคนพูดชื่อโฮสต์บางคน - FQDN ขอบคุณ


1
คุณจะหาคนที่บอกว่าคุณวาง FQDN ไว้ในไฟล์ / etc / hostname ที่ไหน ไฟล์นั้นใช้สำหรับชื่อโฮสต์ของระบบเท่านั้น
Terrance

เมื่ออ่านเนื้อหาเกี่ยวกับมันบนอินเทอร์เน็ตพบบางแห่ง และสถานที่หนึ่งที่ควรระบุ FQDN ของเขา?
Bulat M.

@ Terrance จริง ๆ แล้วฉันต้องการได้รับคำตอบจากคนที่มีประสบการณ์ในสาขาเพื่อให้พวกเขาแสดงวิธีการ "ถูกต้อง" ตั้งแต่ต้น เขียนเป็นคำตอบ และจะทำอย่างไรในการแจกแจงที่ไม่มี / etc / hostname
Bulat M.

คำตอบ:


7

ในไฟล์ / etc / hostname คุณใช้ชื่อโฮสต์เท่านั้น FQDN ที่คุณสามารถตั้งค่าได้ใน: / etc / hosts ที่อาจมีลักษณะดังนี้:

127.0.1.1        thishost.mydomain.org    thishost

ตามคู่มือของไฟล์โฮสต์

http://man7.org/linux/man-pages/man5/hosts.5.html


1
การแก้ไข: ขอบคุณอย่างไรก็ตามมันจะต้องรู้เกี่ยวกับข้อดีข้อเสียของการระบุ / ไม่ระบุ FQDN ใน / etc / hostname ฉันรู้เกี่ยวกับวิธีแก้ปัญหาของคุณ: มันเป็นส่วนที่สำคัญสำหรับโปรแกรมที่ต้องการให้ FQDN แก้ไขให้กับบางสิ่ง (ไม่สำคัญว่าจะใช้ที่อยู่ใด)
Bulat M.

12

แก้ไขคำตอบ:

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

127.0.0.1 localhost
127.0.1.1 terrance-ubuntu.local terrance-ubuntu

รายการเหล่านี้ไม่เฉพาะเจาะจง ระบบปฏิบัติการทั้งหมดใช้รูปแบบเดียวกันสำหรับบรรทัดเหล่านี้ เพียงตำแหน่งของhostsไฟล์ที่เปลี่ยนแปลง Linux โดยทั่วไปจะอยู่ใน/etc/โฟลเดอร์โดยปกติแล้วใน Windows จะอยู่ในC:\Windows\System32\drivers\etc\โฟลเดอร์

คุณจะเห็นว่าฉันกำลังกำหนดทั้งคู่terrance-ubuntu.localซึ่งเป็น FQDN ของฉันเองที่จะแทนที่ DNS เพื่อให้แอปพลิเคชันรู้ว่าไม่ต้องออกจากคอมพิวเตอร์ของฉันและterrance-ubuntuเป็นชื่อโฮสต์อีกครั้งเพื่อให้แอปพลิเคชันทราบว่าไม่ต้องออกจากคอมพิวเตอร์หรือ 127.0.0.1 ( localhost ) การกำหนดชื่อโฮสต์ของระบบให้127.0.1.1ไม่มีผลกับคอมพิวเตอร์ส่วนที่เหลือที่กำลังค้นหาโฮสต์ของฉันบนเครือข่าย ถ้า DNS 10.0.0.100ทำงานอย่างถูกต้องพวกเขาจะเห็นชื่อโฮสต์ของฉันเป็น เหตุผลในการใช้127.0.1.1คือเพื่อให้แอปพลิเคชันของฉันค้นหาระบบของฉันได้เร็วขึ้นเนื่องจากจะรู้ว่าระบบของฉันไม่ได้อยู่ที่อื่นในเครือข่ายของฉัน ชื่อโฮสต์ที่แท้จริง.localของฉันซึ่งเป็น FQDN ของฉัน.local จริง ๆ แล้ว Domain ของฉันที่ฉันตั้งค่าผ่านเราเตอร์ซึ่งเป็นเซิร์ฟเวอร์ DNS อื่นในเครือข่ายของฉัน

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

ฉันจะใช้เครื่องพิมพ์ที่เชื่อมต่อกับเครือข่ายเป็นตัวอย่าง มันมี IP แบบคงที่ 10.0.0.253 ฉันไม่รู้ชื่อของมัน hp_printerสำหรับวันนี้ผมอยากจะเรียกมันว่า ผมจะ ping ที่ IP /etc/hostsและชื่อโฮสต์สำหรับมันแล้วเพิ่ม

terrance@terrance-ubuntu:~$ ping -c 2 10.0.0.253
PING 10.0.0.253 (10.0.0.253) 56(84) bytes of data.
64 bytes from 10.0.0.253: icmp_seq=1 ttl=255 time=0.326 ms
64 bytes from 10.0.0.253: icmp_seq=2 ttl=255 time=0.334 ms

terrance@terrance-ubuntu:~$ ping -c 2 hp_printer
ping: unknown host hp_printer

terrance@terrance-ubuntu:~$ sudo vi /etc/hosts
10.0.0.253 hp_printer.local hp_printer

terrance@terrance-ubuntu:~$ ping -c 2 hp_printer
PING hp_printer.local (10.0.0.253) 56(84) bytes of data.
64 bytes from hp_printer.local (10.0.0.253): icmp_seq=1 ttl=255 time=0.334 ms
64 bytes from hp_printer.local (10.0.0.253): icmp_seq=2 ttl=255 time=0.303 ms

ตอนนี้ฉันยังสามารถเข้าถึงหน้าเว็บสำหรับการตั้งค่าเครื่องพิมพ์ของฉันตามชื่อที่ฉันให้ไว้แทนที่อยู่ IP ซึ่งจำได้ง่ายกว่า:

ป้อนคำอธิบายรูปภาพที่นี่

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

terrance@terrance-ubuntu:~$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.0.1
search local

หวังว่าจะช่วยให้เข้าใจถึงวิธีการทำงานของ DNS และ FQDN ได้ดียิ่งขึ้น


ทำไมคุณแมป FQDN ใน / etc / hosts ถึง 127.0.1.1
Bulat M.

1
@BulatM โปรดดูคำตอบที่แก้ไขแล้วของฉัน
Terrance

คุณช่วยอธิบายความแตกต่างระหว่างคำค้นหาและโดเมนใน /etc/resolv.conf ได้ไหม? ฉันกำลังอ่าน man page ของ resolv.conf ยังไม่ชัดเจน
Bulat M.

และอาจรวมถึงพวกเขาทั้งสอง? คุณช่วยนำเสนอกรณีที่ถูกต้องที่เป็นประโยชน์ในการตอบหรือไม่? ขอบคุณ
Bulat M.

1
@BulatM คลิกที่ลิงก์ในคำตอบของฉันและพวกเขาจะพาคุณไปยังข้อมูลเพิ่มเติมเกี่ยวกับสิ่งต่าง ๆ ชอบen.wikipedia.org/wiki/Resolv.confให้ข้อมูลเพิ่มเติม ฉันมาที่นี่เพื่อช่วยไม่ใช่สอนคุณ ฉันไม่ได้รับเงินเนื่องจากเป็นอาสาสมัครดังนั้นโปรดศึกษาด้วยตัวเอง
Terrance

4

manpage ของhostname(1)กล่าวถึงนี้ (ย่อหน้าตัวหนาเน้นโดยฉัน):

FQDN
   FQDN (ชื่อโดเมนที่ผ่านการรับรองโดยสมบูรณ์) ของระบบคือชื่อที่จำแนก (3)ผลตอบแทนสำหรับชื่อโฮสต์เช่นursula.example.com
   โดยปกติจะเป็นชื่อโฮสต์ตามด้วยชื่อโดเมน DNS (ส่วนหนึ่ง
   หลังจากจุดแรก) คุณสามารถตรวจสอบ FQDN โดยใช้ชื่อโฮสต์ --fqdn   หรือ
   ชื่อโดเมนที่ใช้dnsdomainname

   คุณไม่สามารถเปลี่ยน FQDN กับชื่อโฮสต์หรือdnsdomainname

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

          127.0.1.1 ursula.example.com ursula

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

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

และถ้าคุณให้ FQDN เป็นชื่อโฮสต์ระหว่างการติดตั้งมันจะเขียนเฉพาะส่วนประกอบที่มีกำปั้นลงไป/etc/hostnameและเก็บ FQDN /etc/hostsไว้

ดังนั้นในกรณีนี้ให้ผู้ติดตั้งทำในสิ่งที่มันทำ


มันเป็น (รวม 127.0.1.1 ursula.example.com ursula ใน / etc / hosts) เฉพาะ Debian \ Ubuntu หรือสามารถนำไปใช้อย่างเท่าเทียมกันกับ distr อื่น ๆ ได้หรือไม่?
Bulat M.

1
Dunno เกี่ยวกับสิ่งรบกวนอื่น ๆ คุณสามารถทำเช่นเดียวกันใน Arch และ Cent OS ได้ คำถามเกี่ยวกับ distros อื่น ๆ ควรจะถามUnix และ Linux
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.