เป็นไปได้หรือไม่ที่จะใช้นามแฝงชื่อโฮสต์ใน Linux?


90

เป็นไปได้หรือไม่ที่จะใช้นามแฝงชื่อโฮสต์ใน Linux?

มันถูกถามโดย jmillikin ที่ฟอรัม Ubuntu ต่างๆดังนี้:


เป็นไปได้หรือไม่ที่จะสร้างนามแฝงชื่อโฮสต์ เรียงจาก Like / etc / hosts แต่ใช้ชื่อโฮสต์อื่นแทนที่อยู่ IP ดังนั้นด้วยไฟล์บางอย่างเช่นนี้คุณสามารถ ping "fakehost1" และมันจะถูกแมปซ้ำกับ "realhost" จากนั้น "realhost" จะถูกแก้ไขเป็นที่อยู่ IP

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

บางคนตอบคำถามเกี่ยวกับ ssh แต่ไม่เกี่ยวกับ ping ฯลฯ จุดประสงค์หลักของฉันคือใช้เป็นนามแฝงสำหรับเซิร์ฟเวอร์การโค่นล้ม ในกรณีของฉัน realhost อยู่ภายใต้ที่อยู่ IP แบบไดนามิก ดังนั้นนามแฝง "/ etc / hosts" จึงไม่ทำงาน ฉันต้องการที่จะเข้าถึงเซิร์ฟเวอร์การโค่นล้มของฉันเป็นแทนsvn://my_svnserver/my_repos svn://realhost/my_repos


ฉันเดาว่าฉันอาจพลาดบางสิ่ง คุณกำลังบอกว่าคุณไม่มี / etc / hosts ดูเหมือน 10.0.3.4 some.host.org another.domain.com คุณต้องใช้การอ้างอิงด้วยเหตุผลเชิงโปรแกรมบางอย่าง?
jim_m_somewhere

คำตอบ:


56

สำหรับผู้ที่ไม่มีบัญชีในฟอรัม (หรือไม่ต้องการลงชื่อเข้าใช้):

หากปัญหาหลักของคุณไม่ได้เป็นการ ping แต่ให้กับ ssh คุณสามารถสร้าง / แก้ไข ~ / .ssh / config เพิ่มบรรทัดเช่นนี้:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
ส่วนชื่อโฮสต์จะต้องอยู่ในบรรทัดใหม่ นี่คือการสอนที่ดีเกี่ยวกับวิธีสร้างไฟล์กำหนดค่าเช่นนี้: mattryall.net/blog/2008/06/ssh-favourite-hosts
รหัสผู้บัญชาการ

1
วิธีแก้ปัญหาที่ดีขอบคุณ แต่แน่นอนทางออกที่ดีกว่าคือการใช้ชื่อใน dns
Yura

31

Linux รองรับนามแฝงด้วยการตั้งค่าตัวแปร env ของ HOSTALIASES

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

จากนั้นคุณสามารถ

ping fakehost

NB ping ต้องการให้คุณตั้งค่านี้เป็น root แต่คุณสามารถทำได้ในฐานะผู้ใช้ใด ๆ สำหรับแอปพลิเคชันที่ทำงานในฐานะผู้ใช้รายนั้น ping suids ถึงราก


3
ไม่ได้ผลสำหรับฉันบน Ubuntu 12.04 :(
Dimitry K

3
HOSTALIASES ใช้ได้กับไฟล์สั่งการที่ไม่มีชุดแฟล็ก setuid เท่านั้น ดังนั้นมันจะไม่ทำงานสำหรับการ ping (เว้นแต่ว่าคุณได้รูทแล้วเมื่อทำการ ping) ฉันเดาว่ามันทำเพื่อหลีกเลี่ยงการหลอก setuid-executables เข้าสู่การเชื่อมต่อกับโฮสต์ที่แตกต่างจากที่ตั้งใจไว้
Boris

1
ยังใช้งานไม่ได้กับขด
Benubird

7
มันแทบจะไม่ได้ผลลัพธ์ที่คาดหวัง HOSTALIASES ใช้งานได้กับแอปพลิเคชันที่ใช้ getaddrinfo (3) หรือ gethostbyname (3) เท่านั้น - ซึ่งหมายความว่ามันจะทำงานสำหรับแอปพลิเคชันที่พยายามแก้ไขชื่อโฮสต์โดยการเรียกใช้ระบบที่เจาะจง: มันไม่เคยเกิดขึ้น ดูunix.stackexchange.com/questions/10438/ … ดังนั้นทางออกเดียวคือ local DNS (dnsmasq)
ขีดตกต่ำสุด

1
ดูเหมือนว่านี่เป็นการหลอกลวง ฟังก์ชัน gethostbyname * (), gethostbyaddr * (), herror () และ hstrerror () นั้นล้าสมัยแล้ว หากระบบของคุณใช้งาน DNSMasq ภายในเครื่องคุณสามารถใช้นามแฝงในการแก้ไขปัญหาใด ๆ ที่ใช้ DNS
teknopaul

24

คุณสามารถตั้งค่านี้บนเซิร์ฟเวอร์ DNS ของคุณระเบียน CNAME อนุญาตให้เครื่องรู้จักชื่อโฮสต์มากกว่าหนึ่งรายการ ดังนั้นเพิ่มระเบียน CNAME ไปยังเซิร์ฟเวอร์ DNS ของคุณดังนี้:


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 


3
ลองใช้เซิร์ฟเวอร์ DNS ที่มีน้ำหนักเบาdnsmasq(ซึ่งจะทำหน้าที่เป็น DHCP ด้วย)
sybreon

17

ฉันมักจะทำสิ่งนี้กับตัวแปรสภาพแวดล้อม ฉันรู้ว่ามันใช้งานได้กับบรรทัดคำสั่งเท่านั้น แต่ฉันมักจะอยากได้ชื่อแทนชื่อโฮสต์ (ฉันทำงานกับบัญชีซูเปอร์คอมพิวเตอร์หลายบัญชีทั้งหมดที่มี URL ยาว) นี่คือตัวอย่างถ้าคุณใช้ BASH ใน ~ / .bashrc:

ส่งออก fakehost = "long.ass.annoying.url.org"

จากนั้นในเปลือกสด:

ssh christopher @ $ fakehost


11

วิธีเดียวที่สามารถทำได้คือถ้าคุณมีเซิร์ฟเวอร์ DNS ของคุณเอง


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

หากที่อยู่ IP ที่เปลี่ยนแปลงตลอดเวลาของการเชื่อมต่อ DSL หรือการเรียกเลขหมายเป็นปัญหา Dyndns เป็นทางออกที่ดีกว่า IMHO
สเวน

ไม่มันไม่ใช่ทางออกที่ดีกว่า เมื่อเซิร์ฟเวอร์มีชื่อโฮสต์ที่จัดการโดยอย่างอื่นความต้องการ OP ทั้งหมดคือ CNAME สำหรับชื่อโฮสต์แรก DYNDNS และที่คล้ายกันพึ่งพาโฮสต์ที่แจ้งเซิร์ฟเวอร์ dns ว่า ip มีการเปลี่ยนแปลง
theotherreceive

5

การใช้ /etc/hosts.aliases เป็นคุณสมบัติมาตรฐานของ bind resolver libraries มีประสิทธิภาพมากกว่าการเพิ่มรายการไปยัง / etc / hosts และสามารถใช้งานได้หากคุณไม่สามารถเพิ่ม CNAMES ใน DNS ของคุณ (ไม่สามารถเข้าถึงได้)

โดยทั่วไปวิธีปฏิบัติที่ดีที่สุดคือการใช้ CNAMES ใน DNS ด้วย SEARCH ที่เหมาะสมที่กำหนดไว้ใน /etc/resolv.conf

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

วิธีการแก้ไขอื่นอาจเป็น DNSMasq http://en.wikipedia.org/wiki/Dnsmasq


ฉันลองใช้ /etc/hosts.aliases ใน CENTOS 6 แต่ดูเหมือนว่าคุณสมบัตินี้จะไม่ทำงาน ฉันไม่สามารถหาเอกสารใด ๆ ฉันควรมองหาที่ไหน
mdpc

5

คุณจะต้องมีเซิร์ฟเวอร์ Dyndns ที่จะแมปที่อยู่ IP ปัจจุบันของคุณกับชื่อโฮสต์ คุณจะบอกเซิร์ฟเวอร์นี้เกี่ยวกับที่อยู่ IP ปัจจุบันของคุณทุกครั้งที่คุณลงชื่อเข้าใช้และจะอัปเดตระเบียนชื่อโฮสต์ของคุณ

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