ระบบคอมพิวเตอร์ (Linux) มีชื่อโฮสต์เดียวหรือไม่


15

hostname ใช้เพื่อแสดงชื่อ DNS ของระบบและเพื่อแสดงหรือตั้งชื่อโฮสต์หรือชื่อโดเมน NIS

ระบบคอมพิวเตอร์ (Linux) มีชื่อโฮสต์เดียวหรือไม่

ในการโฮสต์เสมือนชื่อโฮสต์หลายชื่อสามารถแก้ไขให้กับไดเรกทอรีรูทต่าง ๆ ในเว็บเซิร์ฟเวอร์ หากระบบคอมพิวเตอร์ (Linux) สามารถมีชื่อโฮสต์ได้เพียงชื่อเดียวจะสามารถโฮสต์เสมือนได้อย่างไร

ขอบคุณ


ระเบียน DNS A หรือ AAA ชี้ไปที่ที่อยู่ IP เดียวกันสำหรับหลายโดเมน ชื่อโฮสต์ของเครื่องนั้นไม่สำคัญ
RubberStamp

(1) มีการใช้เอาต์พุตhostnameในการแก้ไขชื่อโฮสต์เป็นที่อยู่ IP หรือไม่ (2) A หมายถึงที่อยู่ IPv4, AAAA IPv6 AAA คืออะไร
ทิม

บริการ mDNS เช่นavahiขึ้นอยู่กับชื่อโฮสต์ของเครื่อง ในกรณีดังกล่าวhostname.localจะแก้ไขที่อยู่ IP ท้องถิ่นของเครื่อง ฉันเห็นบางคนเขียนคำตอบซึ่งเป็นการขยายความคิดเห็นแรกของฉัน ... พร้อมกันสำหรับการแจ้งเตือนเบราว์เซอร์ของฉัน
RubberStamp

AAA เป็นคำผิดสั้น ๆ 'A'
RubberStamp

โฮสต์เสมือนไม่มีส่วนเกี่ยวข้องกับชื่อโฮสต์ มันล้วนขึ้นอยู่กับพฤติกรรมของเว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์ตอบกลับไปยังฟิลด์โฮสต์ที่แตกต่างกันของส่วนหัวคำขอ HTTP ฉันไม่คิดว่าเว็บเซิร์ฟเวอร์ทั่วไปจะทำอะไรที่เกี่ยวข้องกับ DNS หรือชื่อโฮสต์เพื่อเสนอการทำงานของโฮสต์เสมือน
炸鱼薯条德里克

คำตอบ:


26

ใช่และไม่. สองสิ่งที่แตกต่างที่เรียกว่าชื่อโฮสต์

ชื่อโฮสต์ "ภายใน"นั้นเป็นสตริงที่เก็บรักษาโดยเคอร์เนล นี้เป็นหนึ่งส่งกลับโดยhostnameคำสั่ง (หรือgethostname()โทร) และก็ไม่ซ้ำกันภายในระบบ(*)

ส่วนใหญ่จะใช้เมื่อโปรแกรมต้องการเอาท์พุทตัวระบุสำหรับระบบที่รันอยู่ เช่น\hใน Bash's PS1ขยายไปยังชื่อโฮสต์ ในทำนองเดียวกัน logfiles สไตล์ syslog ยังมีชื่อโฮสต์ในรายการบันทึก

(* แม้จะเป็นความคิดเห็นของสตีเฟ่นกิต แต่เนมสเปซสามารถใช้ในการแสดงชื่อโฮสต์ที่แตกต่างกันสำหรับกระบวนการในระบบเดียวกันซึ่งส่วนใหญ่ใช้สำหรับตู้คอนเทนเนอร์ซึ่งพยายามทำตัวเหมือนเป็นระบบที่แตกต่างกัน)

จากนั้นยังมีชื่อ DNSที่ระบบอื่นใช้เพื่อค้นหาที่อยู่ IP ของอีกชื่อหนึ่ง อาจมีชื่อ DNS มากกว่าหนึ่งชื่อที่ชี้ไปยังที่อยู่ IP เดียวกันดังนั้นโฮสต์เดียวกัน

ชื่อโฮสต์ภายในและชื่อ DNS ไม่จำเป็นต้องเหมือนกัน สมมติว่าคนที่มีเว็บเซิร์ฟเวอร์ของพวกเขาได้ตัดสินใจที่จะโทรorange(*)192.0.2.9กับที่อยู่ IP มันสามารถนำมาใช้โดเมนที่สองแตกต่างกันและ DNS จะได้รับการตั้งค่าให้มีwww.example.orgและwww.example.comจุดทั้ง192.0.2.9ในขณะที่ชื่อโฮสต์ภายในของระบบอาจจะหรือเพียงแค่orange.example.org orangeในกรณีนั้นการตั้งค่า DNS มักจะมีการค้นหาแบบย้อนกลับที่192.0.2.9ชี้ไปที่ชื่อorange.example.orgกลับ แต่ก็ไม่มีอะไรจะบังคับ

(* เนื่องจากพวกเขาต้องการตั้งชื่อเซิร์ฟเวอร์ของตนหลังเกิดผลไม้บางคนอาจใช้webserver1หรือเป็นเช่นนั้น แต่ประเด็นก็คือไม่จำเป็นต้องตั้งชื่อตามหนึ่งในโดเมนจริง)

นอกจากนั้นการโฮสต์เสมือนต้องการให้เบราว์เซอร์แจ้งชื่อเซิร์ฟเวอร์ของเว็บไซต์ที่พยายามเข้าถึงเว็บเซิร์ฟเวอร์ มิฉะนั้นเซิร์ฟเวอร์จะไม่ทราบว่าไซต์เสมือนใดที่ไคลเอ็นต์พยายามเข้าถึง HTTP มีHostส่วนหัวสำหรับสิ่งนั้น


สิ่งที่ทำให้แยกความแตกต่างระหว่างชื่อ DNS และชื่อโฮสต์ภายในคือโปรโตคอล mDNS (นำไปใช้เช่นโดยavahi daemon ) และโปรโตคอลการค้นหาอื่น ๆ mDNS ทำให้โฮสต์สามารถสอบถามโฮสต์อื่นทั้งหมดในเครือข่ายเดียวกันเพื่อหาข้อมูลชื่อและทำให้ชื่อโฮสต์ของพวกเขาปรากฏบนโฮสต์อื่น ๆ โดยไม่ต้องตั้งค่าไว้ใน DNS อย่างชัดเจน


ขอบคุณ (1) "การตั้งค่า DNS มักจะมี 192.0.2.9 จุดกลับไปที่ชื่อ orange.example.org" ไม่ได้รับที่อยู่ IP สำหรับชื่อโฮสต์ที่ระบุทำไมจึงตรงกันข้าม (2) เอาต์พุตที่hostnameเคยใช้ในการแก้ไขชื่อโฮสต์เป็นที่อยู่ IP หรือไม่
ทิม

(2) ... เมื่อตั้งค่าเครือข่าย wifi ในพื้นที่ในบ้านของคุณจาก ISP โดยใช้เราเตอร์และโมเด็มเครื่องในเครือข่ายสามารถระบุผลลัพธ์ของhostnameคำสั่งได้ถูกต้องหรือไม่ เราเตอร์ทำหน้าที่เหมือน DNS เพื่อแก้ไขผลลัพธ์ของhostnameที่อยู่ IP ส่วนตัวในเครือข่ายหรือไม่
ทิม

2
สำหรับ (1) นอกจากนี้ยังมีการค้นหาแบบย้อนกลับที่ใช้ที่อยู่ IP และส่งคืนชื่อ (สำหรับระบบที่มีชื่อเดียวและที่อยู่เดียวคุณต้องมีการแก้ไขทั้งสองอย่างเพื่อความชัดเจน)
ilkkachu

3
mDNSเครือข่ายขนาดเล็กอาจจะใช้ เพื่อให้ดีขึ้นหรือแย่ลงมันช่วยให้เจ้าของระบบเลือกชื่อโฮสต์ของตัวเองสามารถเข้าถึงได้โดยระบบอื่น ๆ ในเครือข่ายท้องถิ่นโดยไม่จำเป็นต้องลงทะเบียนกับเซิร์ฟเวอร์ DNS
Mark Plotnick

2
ในเครือข่ายภายในบ้านเราเตอร์ในพื้นที่ทำหน้าที่เป็นตัวแก้ไข DNS โฮสต์ส่งชื่อโฮสต์ของพวกเขาเมื่อพวกเขาร้องขอที่อยู่โดยใช้ DHCP และเราเตอร์จะจำชื่อนั้นและแก้ไขให้กับโฮสต์ทั้งหมดในเครือข่าย ตามที่ Mark and RubberStamp พูดถึงยังมี Bonjour (ดำเนินการใน Avahi) ซึ่งช่วยให้สามารถค้นหาบริการบน LAN (โดยเฉพาะเครื่องพิมพ์) โปรดทราบว่าโฮสต์สามารถมีที่อยู่ IP หลายแห่งและชื่อโฮสต์จะถูกกำหนดชื่อไว้เพื่อให้กระบวนการสามารถเห็นชื่อโฮสต์ที่แตกต่างกันในโฮสต์เดียวกัน
Stephen Kitt

7

ระบบคอมพิวเตอร์ (Linux) มีชื่อโฮสต์เดียวหรือไม่

เลขที่

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

บนระบบ linux ชื่อโฮสต์เป็นเพียงทรัพยากรต่อกระบวนการ ("UTS เนมสเปซ") ที่สืบทอดมาโดยค่าเริ่มต้น แต่จะแยกออกจากด้วยunshare(2)หรือclone(2)โดยใช้CLONE_NEWUTSแฟล็ก คุณควรดูnamespaces(7)manpage

เช่นเดียวกับ pids หมายเลขพอร์ตจุดเชื่อมต่อ ฯลฯ ชื่อโฮสต์ไม่ได้เป็นตัวระบุทั่วโลกอีกต่อไปและสามารถทำเป็นเสมือนจริงได้เหมือนกับพื้นที่ที่อยู่ (หน่วยความจำเสมือน) หรือตารางตัวอธิบายไฟล์ของกระบวนการ

ในการโฮสต์เสมือนชื่อโฮสต์หลายชื่อสามารถแก้ไขให้กับไดเรกทอรีรูทต่าง ๆ ในเว็บเซิร์ฟเวอร์ หากระบบคอมพิวเตอร์ (Linux) สามารถมีชื่อโฮสต์ได้เพียงชื่อเดียวจะสามารถโฮสต์เสมือนได้อย่างไร

การโฮสต์เสมือนเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงและโดยทั่วไปแล้วจะทำโดยการกำหนดค่าระเบียน wildcard DNS (เช่น*.foo.com=> 13.13.13.13) โดยมีเว็บเซิร์ฟเวอร์ที่ทำงานอยู่13.13.13.13และให้บริการไดเรกทอรี / ทรัพยากรต่าง ๆ ตามมูลค่าของHost:ส่วนหัวhttp [1] (ซึ่งสามารถกำหนดค่าได้สูง เว็บเซิร์ฟเวอร์ส่วนใหญ่สามารถให้บริการทรัพยากรต่าง ๆ ตามส่วนหัว http ใด ๆไม่ใช่แค่Host:) ทั้งหมดนี้ระบบปฏิบัติการของระบบที่เว็บเซิร์ฟเวอร์กำลังทำงานไม่มีส่วนร่วม

[1] หรือค่าของการระบุชื่อเซิร์ฟเวอร์ในกรณีของ https ซึ่งอนุญาตให้เว็บเซิร์ฟเวอร์เดียวกันใช้ใบรับรองที่แตกต่างกันสำหรับโฮสต์เสมือนที่แตกต่างกัน


ฉันต้องไม่เห็นด้วยกับคุณในเรื่องนี้ สำหรับการโฮสต์เสมือนโดยทั่วไปเรามีชุดของระเบียน cname เฉพาะที่ชี้ไปยังโฮสต์เดียว เราไม่ใช้เร็กคอร์ด wildcard DNS เนื่องจากเรามีหลายระบบภายในโดเมนที่ต้องการโฮสต์เสมือน ไม่รวม UTS เนมสเปซ (มีการใช้กันอย่างแพร่หลายอย่างไร) คุณมี hostnamectl รายงานชื่อโฮสต์เดียวสำหรับเซิร์ฟเวอร์ที่ระบุ DNS และ hostnamectl นั้นมีมุมฉากและมีส่วนเกี่ยวข้องน้อยมาก
เสร็จสิ้น 24 พ.ค.

1
@ DougO'Neal คุณไม่เห็นด้วยกับอะไร มีการใช้ระเบียน wildcard DNS ในวิธีที่ฉันอธิบายหรือไม่ พวกเขาใช้อย่างดุเดือด (ขอโทษสำหรับปุน) ไม่ว่าคุณจะชอบหรือไม่ ข้อมูล uts นั้นเสมือนจริงต่อกระบวนการใน linux หรือไม่ นั่นเป็นวิธีที่มันเป็น สำหรับแนวคิดที่ว่าเนมสเปซนั้นถูกใช้ / เพื่อใช้ในการแก้ปัญหาการบรรจุหีบห่อ / การจำลองเสมือน (ตามที่แนะนำในคำตอบอื่น ๆ ) ขออภัย แต่นั่นคือ "มีเพียงเด็กผู้หญิงที่เล่นกับตุ๊กตา" หรือ "การส่งสัญญาณด้วยตนเอง คุณภาพ ;-)
ลุงบิลลี่

1

คุณมักจะตั้งชื่อโฮสต์เดียวใน / etc / hostname และคุณตั้งชื่อโดเมนจำนวนมากใน / etc / hosts

UTS เนมสเปซอนุญาตให้ระบบเดียวปรากฏว่ามีชื่อโฮสต์และชื่อโดเมนที่แตกต่างกันสำหรับกระบวนการที่แตกต่างกัน สำหรับข้อมูลเพิ่มเติม: https://en.wikipedia.org/wiki/Linux_namespaces ดังนั้นจึงเป็นไปได้อย่างแน่นอนที่จะมีชื่อโฮสต์หลายชื่อและชื่อโดเมนสำหรับระบบเดียวกัน เช่นคอนเทนเนอร์นักเทียบท่าภายในโฮสต์เดียวกันมีชื่อโฮสต์ที่แตกต่างจากระบบโฮสต์

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