ชื่อโฮสต์ Linux คืออะไร


13

ในช่วงไม่กี่ปีที่ผ่านมาฉันใช้ Linux เป็นระบบหลักของฉันโดยเฉพาะ Fedora ฉันเห็นชื่อโฮสต์ของฉันตั้งเป็น "localhost" เสมอยกเว้นเมื่อฉันเชื่อมต่อกับเครือข่ายบางอย่างและกลายเป็น IP ของฉัน วันนี้ฉันได้พบกับพฤติกรรมดังต่อไปนี้ซึ่งฉันมีปัญหาในการทำความเข้าใจ

ฉันตั้งค่าการติดตั้ง Ubuntu บนพาร์ติชันอื่นของแล็ปท็อปตั้งชื่อคอมพิวเตอร์ / ชื่อโฮสต์ระหว่างการติดตั้ง Ubuntu เมื่อฉันรีบูทกลับเข้าไปใน Fedora Fedora ได้อัปเดตชื่อโฮสต์ของฉันเป็นชื่อที่ฉันตั้งในการติดตั้ง Ubuntu

ฉันคิดเสมอว่าชื่อโฮสต์ถูกกำหนดค่าและเก็บไว้ในพาร์ติชันของการติดตั้ง distro และแน่นอนเนื้อหาของ / etc / hostname บน Fedora ยังอ่าน "localhost.localdomain" แต่การเรียกใช้hostnameคำสั่งจะแสดงชื่อโฮสต์ใหม่ ทั้งสองการติดตั้งใช้พาร์ทิชันบูต efi ร่วมกัน แต่จะแยกออกจากกัน ฉันสงสัยว่าจะติดตั้ง Fedora จากที่ไหนและทำไมกำลังอ่านชื่อโฮสต์ใหม่


คุณมีรายการอะไรhosts:ใน /etc/nsswitch.conf?
cutrightjm

@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora

1
สำเนาข้ามไซต์: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

คำตอบ:


12

hostnameโปรแกรมทำการ syscall uname ที่สามารถมองเห็นได้จากการทำงาน:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

จากหน้า man syscall unameมันบอกว่า syscall ดึง struct ต่อไปนี้จากเคอร์เนล:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

ดังนั้นชื่อโดเมนมาจากระบบ NIS / YP หากเราเชื่อว่ามีความคิดเห็น ดังนั้นอาจเป็นไปได้ว่าอาจมีบริการ NIS / YP บนเครือข่ายของคุณที่กำลังเรียกชื่อกลับมาที่คุณตั้งค่าโดยระบบปฏิบัติการ Ubuntu


5
สิ่งนี้ไม่เป็นความจริงให้ดูhostname(1)หน้าคนที่อธิบายวิธีตั้งชื่อและตั้งค่าชื่อโฮสต์ แม้จะมีความคล้ายคลึงกันในชื่อชื่อโดเมน NIS / YP ไม่มีอะไรเกี่ยวข้องกับชื่อโดเมน FQDN / DNS ซึ่งส่งคืนโดยตัวแก้ไข หากคุณไม่ได้กำหนดค่า NIS / YP ชื่อโดเมน NIS / YP จะถูกยกเลิก
bodgit

"ชื่อโหนด" เป็นฟิลด์ที่คุณสนใจหรือไม่ จะอยู่ในแนวเดียวกันกับยูนิกซ์ nostalgy จะยังคงพิจารณาเครือข่าย IP ที่เป็นตัวเลือกและการดำเนินการสิ่งที่กำหนดไว้ :)
rackandboneman

5

มีแนวคิดอิสระสองข้อ (!) ของชื่อโฮสต์บนระบบ linux

มีสิ่งใดที่เคอร์เนลพิจารณาชื่อโลคัลโฮสต์ (ตามที่จัดการโดยการเรียกระบบ gethostname / uname และ sethostname) โดยไม่ขึ้นกับการเชื่อมต่อเครือข่ายใด ๆ - กลไกเหล่านี้จะยังคงมีอยู่ถ้าคุณสร้างเคอร์เนลที่ไม่มีความสามารถสำหรับเครือข่าย TCP / IP

มีชื่อโฮสต์อย่างน้อยหนึ่งชื่อที่เชื่อมต่อกับ TCP / IP (หรือสแต็คเครือข่ายอื่น ๆ - ไม่ใช่เครือข่ายทั้งหมดในโลกที่เป็น IP!) ที่อยู่โฮสต์ที่มีและสิ่งเหล่านี้ได้รับการจัดการใน userspace โดยฟังก์ชั่น libc) ซึ่งจะกำหนดชื่อดังกล่าวโดยการตีความแหล่งที่มา (ไฟล์ local / etc / hosts, DNS, NIS .... ) ตามกฎที่คุณให้ไว้ในไฟล์การกำหนดค่าที่เหมาะสม (/etc/nsswitch.conf, / etc /host.conf ฯลฯ ... )


3

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

เมื่อคุณรีบูทใน Fedora มันจะเชื่อมต่อกับเราเตอร์ตัวเดียวกันเพื่อรับที่อยู่ IP แต่สัญญาเช่าเก่าที่สร้างขึ้นสำหรับ Ubuntu ยังคงใช้ได้ เนื่องจากเป็นเครื่องเดียวกันกับการ์ดเครือข่ายเดียวกันและที่อยู่ MAC ของฮาร์ดแวร์เดียวกันจึงจะใช้สัญญาเช่าเดิมอีกครั้ง

ฉันเดาว่าเราเตอร์จะส่งชื่อโฮสต์ที่การเช่า IP ได้รับการลงทะเบียนและ Fedora เลือกมัน

น่าเสียดายที่ฉันไม่มีหลักฐานหรือการอ้างอิงเพื่อสนับสนุนคำตอบของฉันฉันสามารถพูดคุยกับประสบการณ์ส่วนตัวของการติดตั้ง Ubuntu ในดูอัลบูตด้วย Windows ย้อนกลับไปตอนนั้น Ubuntu ปฏิเสธที่จะตั้งชื่อโฮสต์เดียวกันระหว่างการติดตั้งที่ฉันใช้ใน Windows เพราะมันอ้างว่าชื่อ alreday ปรากฏในเครือข่าย ดูเหมือนว่าเรามีสิ่งที่คล้ายกันเกิดขึ้นที่นี่

หากต้องการตรวจสอบว่าสิ่งที่ฉันเดาใช้กับสถานการณ์ของคุณหรือไม่ลองเพิกถอนสัญญาเช่าทรัพย์สินทางปัญญาในอินเทอร์เฟซการกำหนดค่าเราเตอร์ของคุณแล้วรีบูท Fedora ใหม่ ถ้าไม่ใช้ชื่อโฮสต์ของ Ubuntu อีกต่อไปฉันควรทำถูกแล้ว


เป็นไปได้ที่ไคลเอ็นต์ DHCP จะส่งชื่อโฮสต์ไปยังเซิร์ฟเวอร์หรืออ่านชื่อโฮสต์จากเซิร์ฟเวอร์ ทุกอย่างส่วนใหญ่ทำก่อน (แม้ว่าเมื่อชื่อโฮสต์ถูกตั้งค่าเป็น "localhost" ก็ไม่น่าจะมีผลมาก :) การอ่านชื่อโฮสต์จากเซิร์ฟเวอร์ DHCP เป็นไปได้ด้วยไคลเอนต์ Linux DHCP แต่ความเข้าใจของฉันคือการสนับสนุนนี้ไม่ได้เปิดใช้งานเสมอ ( เช่น ) สนใจที่จะได้ยินว่า Fedora รุ่นใหม่ดูเหมือนจะทำสิ่งนี้
sourcejedi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.