วิธีทำให้เครื่องสามารถเข้าถึงได้จาก LAN โดยใช้ชื่อโฮสต์


120

นี่คือรายละเอียดของเครื่องที่ฉันต้องการเข้าถึงโดยใช้ชื่อโฮสต์:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

มันเป็นค่าเริ่มต้นของ Debian 6 (Squeeze) ที่ติดตั้งดังนั้นฉันยังไม่ได้ทำอะไรเลย

นี่คือสิ่งที่ฉันได้รับจากเครื่อง (เรียกใช้ Debian Unstable) พยายามเข้าถึงเครื่องด้านบน:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local

คุณต้องทำบางสิ่งบางอย่างบนไคลเอนต์ (เครื่องที่คุณเรียกใช้ping) หรือบนเครื่องที่ให้คำปรึกษาลูกค้า ระบบปฏิบัติการบนไคลเอนต์คืออะไร? การกำหนดค่า DNS คืออะไร
Gilles

การกำหนดค่า DNS คืออะไร นอกจากนี้โปรดดูโพสต์ที่อัปเดต
tshepang

1
คำตอบของฉันคือสิ่งที่คุณเป็นหลังจากหรือไม่ ถ้าเป็นเช่นนั้นคำถามที่ต้องการลดความซับซ้อน - ผู้ที่รู้เรื่องpingและ/etc/hostsแต่ไม่ได้เกี่ยวกับ DNS หรือไม่?
Gilles

ขอบคุณมาก. จะมีรูปลักษณ์ อ้อและก็มากขึ้นบทความกว่าคำตอบ :)
tshepang

3
คำตอบคือ "ติดตั้งและกำหนดค่า dnsmasq" เสร็จสิ้น :)
Warren Young

คำตอบ:


145

บนอินเทอร์เน็ตรวมถึงเครือข่ายท้องถิ่น, เครื่องเรียกกันโดยที่อยู่ IP ในการเข้าถึงเครื่อง B จากเครื่อง A โดยใช้ชื่อเครื่อง B เครื่อง A จะต้องมีวิธีการแมปชื่อของ B กับที่อยู่ IP มีสามวิธีในการประกาศชื่อเครื่องบน A:

  • ไฟล์โฮสต์ นี่คือไฟล์ข้อความธรรมดาที่จับคู่ชื่อกับที่อยู่
  • ระบบชื่อโดเมน (DNS) นี่คือวิธีการที่ใช้บนอินเทอร์เน็ตทั่วโลก ตัวอย่างเช่นเมื่อคุณโหลดหน้านี้ในเบราว์เซอร์, สิ่งแรกที่เครื่องคอมพิวเตอร์ของคุณไม่สามารถที่จะทำให้การร้องขอ DNS unix.stackexchange.comทราบที่อยู่ของ
  • ฐานข้อมูลชื่ออื่น ๆ เช่นNIS , LDAPหรือActive Directory สิ่งเหล่านี้ถูกใช้ในเครือข่ายองค์กรบางแห่ง แต่ไม่บ่อยนัก (เครือข่ายจำนวนมากที่ใช้ NIS, LDAP หรือ AD สำหรับฐานข้อมูลผู้ใช้ใช้ DNS สำหรับชื่อเครื่อง) หากเครือข่ายของคุณใช้หนึ่งในนั้นคุณมีผู้ดูแลระบบเครือข่ายมืออาชีพและควรถามเขาว่าจะทำอย่างไร

มีหลายวิธีที่สิ่งเหล่านี้สามารถทำงานได้ในทางปฏิบัติ มันเป็นไปไม่ได้ที่จะครอบคลุมพวกเขาทั้งหมด ในคำตอบนี้ฉันจะอธิบายสถานการณ์ทั่วไปไม่กี่

ไฟล์โฮสต์

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

ไฟล์โฮสต์คือรายการชื่อการแมปบรรทัดอย่างง่าย ๆ ไปยังที่อยู่ IP ดูเหมือนว่านี้:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

บนระบบ UNIX, /etc/hostsไฟล์โฮสต์คือ บน Windows c:\windows\system32\drivers\etc\hostsก็ เกือบทุกระบบปฏิบัติการที่คุณสามารถเชื่อมต่อกับอินเทอร์เน็ตมีไฟล์ที่คล้ายกัน วิกิพีเดียมีรายชื่อ

ในการเพิ่มรายการสำหรับ B ในไฟล์โฮสต์ของ A:

  1. กำหนดที่อยู่ IP ของ B. บน B ให้เรียกใช้คำสั่งifconfig(หากไม่พบคำสั่งให้ลอง/sbin/ifconfig) ผลลัพธ์จะมีบรรทัดดังนี้:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    ในตัวอย่างนี้ที่อยู่ IP ของ B คือ 10.3.1.42 หากมีหลายinet addr:บรรทัดให้เลือกอันที่สอดคล้องกับการ์ดเครือข่ายของคุณไม่เคยloเข้าหรืออุโมงค์หรือรายการเสมือน

  2. แก้ไขไฟล์ hosts บน A หาก A ใช้ระบบยูนิกซ์คุณจะต้องแก้ไข/etc/hostsในฐานะผู้ใช้ขั้นสูง ดูที่ฉันจะรันคำสั่งในฐานะผู้ดูแลระบบ (root)ได้อย่างไร

DHCP + DNS บนเครือข่ายในบ้านหรือสำนักงานขนาดเล็ก

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

หากเครือข่ายของคุณมีเราเตอร์ที่บ้านเป็นสถานที่ที่ดีที่สุดในการกำหนดค่าชื่อสำหรับเครื่องที่เชื่อมต่อกับเราเตอร์นั้น ก่อนอื่นคุณต้องหาที่อยู่ MACของ B. แต่ละอุปกรณ์เครือข่ายจะมีที่อยู่ MAC ที่ไม่ซ้ำกัน บน B รันคำสั่งifconfig -a(หากไม่พบคำสั่งลอง/sbin/ifconfig -a) ผลลัพธ์จะมีบรรทัดดังนี้:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

ในตัวอย่างนี้ที่อยู่ MAC 01:23:45:67:89:abคือ คุณต้องเลือกสาย HWaddr ที่สอดคล้องกับพอร์ตเครือข่ายที่เชื่อมต่อกับเราเตอร์ผ่านสายเคเบิล (หรือการ์ด wifi หากคุณเชื่อมต่อผ่าน wifi) หากคุณมีหลายรายการและคุณไม่ทราบว่าเป็นรายการใดให้เสียบสายเคเบิลและดูว่าอุปกรณ์เครือข่ายใดได้รับที่อยู่ IP ( inet addrบรรทัดด้านล่าง)

ในตอนนี้บนเว็บอินเตอร์เฟสของเราเตอร์ให้มองหาการตั้งค่าเช่น "DHCP" ชื่อและที่ตั้งของการตั้งค่านั้นขึ้นอยู่กับรุ่นของเราเตอร์อย่างสมบูรณ์ แต่ส่วนใหญ่จะมีการตั้งค่าพื้นฐานที่คล้ายกัน นี่คือหน้าตาของเฟิร์มแวร์ Tomato :

ภาพหน้าจอของมะเขือเทศ

ป้อนที่อยู่ MAC, ที่อยู่ IP และชื่อที่ต้องการ คุณสามารถเลือกที่อยู่ IP ใด ๆ ในช่วงที่อยู่เครือข่ายท้องถิ่นของคุณ เราเตอร์ภายในบ้านส่วนใหญ่ได้รับการกำหนดค่าล่วงหน้าสำหรับช่วงที่อยู่ของฟอร์ม 192.168 x . Yหรือ 10 x Y z . ตัวอย่างเช่นบนเราเตอร์ Tomato ที่แสดงด้านบนในแท็บ "เครือข่าย" มีการตั้งค่า "ที่อยู่ IP ของเราเตอร์" ด้วยค่า 10.3.0.1 และการตั้งค่า "subnet mask" ด้วยค่า 255.255.255.0 ซึ่งหมายความว่าคอมพิวเตอร์บน เครือข่ายท้องถิ่นจะต้องมีที่อยู่ของแบบฟอร์ม 10.3.0 z . นอกจากนี้ยังมีช่วงของที่อยู่สำหรับที่อยู่ DHCP ที่กำหนดโดยอัตโนมัติ (10.3.0.129–10.3.0.254) สำหรับที่อยู่ DHCP ที่กำหนดด้วยตนเองให้เลือกที่ไม่อยู่ในช่วงนี้

ตอนนี้เชื่อมต่อ B กับเครือข่ายและควรได้รับที่อยู่ IP ที่คุณระบุและจะสามารถเข้าถึงได้โดยชื่อที่ระบุจากเครื่องใด ๆ ในเครือข่าย

สร้างเซิร์ฟเวอร์ DNS ของคุณเองด้วย Dnsmasq

หากคุณไม่มีเราเตอร์ในบ้านที่มีคุณสมบัติคุณสามารถตั้งค่าฟังก์ชันการทำงานเดียวกันบนเครื่อง Linux เครื่องใดก็ได้ ฉันจะอธิบายวิธีการใช้dnsmasqการตั้งค่าDNS มีโปรแกรมที่คล้ายกันอื่น ๆ อีกมากมาย; ฉันเลือก Dnsmasq เพราะง่ายต่อการกำหนดค่าและมีน้ำหนักเบา (เป็นสิ่งที่เราเตอร์ของ Tomato ที่แสดงด้านบนใช้ตัวอย่างเช่น) Dnsmasq มีอยู่ใน Linux และ BSD ส่วนใหญ่สำหรับพีซีเซิร์ฟเวอร์และอุปกรณ์เครือข่าย

เลือกคอมพิวเตอร์ที่เปิดอยู่ตลอดเวลาที่มีที่อยู่ IP แบบคงที่และใช้ Linux หรือ BSD บางประเภท เรียกมันว่า S (สำหรับเซิร์ฟเวอร์) บน S ติดตั้งdnsmasqแพ็กเกจ (ถ้ายังไม่ได้ติดตั้ง) ด้านล่างฉันจะสมมติว่าไฟล์การกำหนดค่าเป็น/etc/dnsmasq.conf; สถานที่อาจแตกต่างกันไปในการกระจายบางส่วน ตอนนี้คุณต้องทำหลายสิ่ง

  • บอก Dnsmasq เพื่อรับใช้ชื่อโฮสต์ของคุณนอกเหนือจากชื่อที่ได้รับจากอินเทอร์เน็ต วิธีที่ง่ายที่สุดคือการป้อนชื่อและที่อยู่ IP ใน/etc/hosts(ดูที่ส่วน "ไฟล์โฮสต์" ด้านบน) และตรวจสอบให้แน่ใจว่า/etc/dnsmasq.confไม่มีno-hostsคำสั่งที่ไม่ใส่เครื่องหมายข้อคิดเห็น (บรรทัดที่ขึ้นต้นด้วย a #ถูกคอมเม้นต์ไว้) คุณสามารถใส่ชื่อในไฟล์อื่น ถ้าคุณทำใส่บรรทัดในaddn-hosts=/path/to/hosts/file/etc/dnsmasq.conf
  • บอก Dnsmasq วิธีรับที่อยู่ IP สำหรับชื่อของเครื่องบนอินเทอร์เน็ต

    • หากคุณใช้ Debian, Ubuntu หรือซอฟต์แวร์อนุพันธ์ติดตั้งresolvconfแพคเกจ ในกรณีส่วนใหญ่ทุกอย่างจะทำงานนอกกรอบ
    • หากผู้ดูแลระบบเครือข่ายของคุณหรือ ISP ของคุณแจ้งที่อยู่ของเซิร์ฟเวอร์ DNS ให้ป้อน/etc/dnsmasq.confตัวอย่างเช่น:

      server=8.8.8.8
      server=8.8.4.4
      
    • หากคุณไม่ได้รู้ว่าสิ่งที่การตั้งค่า DNS /etc/resolv.confปัจจุบันของคุณจะดูในแฟ้ม ถ้าคุณเห็นบรรทัดเช่นnameserver 8.8.8.8ใส่บรรทัดในserver=8.8.8.8 /etc/dnsmasq.confหลังจากที่คุณเปลี่ยนแปลง/etc/dnsmasq.confให้รีสตาร์ท Dnsmasq คำสั่งที่ต้องทำนั้นขึ้นอยู่กับการกระจาย ความเป็นไปได้ทั่วไปรวมถึงหรือrestart dnsmasq/etc/init.d/dnsmasq restart

  • บอกให้ S ใช้บริการ Dnsmasq สำหรับการร้องขอชื่อโฮสต์ทั้งหมด แก้ไขไฟล์/etc/resolv.conf(เป็น root) ลบทุกnameserverบรรทัดแล้วใส่nameserver 127.0.0.1แทน
    • หากคุณใช้ resolvconf บน Debian หรือ Ubuntu /etc/resolv.confอาจเป็นสิ่งที่ไม่ดีหากคุณติดตั้งresolvconfแพคเกจด้วยเครือข่ายและเปิดใช้งาน ตรวจสอบให้แน่ใจว่าไฟล์base, headและtailใน/etc/resolvconf/resolv.conf.d/ไดเรกทอรีไม่ได้มีการใด ๆnameserverรายการแล้วเรียกใช้resolvconf -u(เป็น root)
  • บอกให้เครื่องอื่นใช้ S เป็นเซิร์ฟเวอร์ DNS แก้ไข/etc/resolv.confและแทนที่nameserverบรรทัดทั้งหมดด้วยบรรทัดเดียวnameserver 10.3.0.2โดยที่ 10.3.0.2 เป็นที่อยู่ IP ของ S (ดูด้านบนสำหรับวิธีค้นหาที่อยู่ IP ของ S)

คุณยังสามารถใช้ Dnsmasq เป็นเซิร์ฟเวอร์ DHCPเพื่อให้เครื่องสามารถรับที่อยู่ที่สอดคล้องกับชื่อของพวกเขาโดยอัตโนมัติ นี่อยู่นอกเหนือขอบเขตของคำตอบนี้ ศึกษาเอกสาร Dnsmasq (มันไม่ยาก) โปรดทราบว่าสามารถมีเซิร์ฟเวอร์ DHCP เดียวในเครือข่ายท้องถิ่นที่กำหนดเท่านั้น (คำจำกัดความที่แน่นอนของเครือข่ายท้องถิ่นอยู่นอกเหนือขอบเขตของคำตอบนี้)

ชื่อบนอินเทอร์เน็ตทั่วโลก

จนถึงตอนนี้ฉันได้สันนิษฐานว่าเป็นเครือข่ายท้องถิ่น ถ้าคุณต้องการตั้งชื่อให้เครื่องจักรที่อยู่คนละมุมของโลกล่ะ คุณยังคงสามารถใช้เทคนิคใด ๆ ข้างต้นได้ยกเว้นชิ้นส่วนที่เกี่ยวข้องกับ DHCP จะสามารถใช้ได้ภายในเครือข่ายท้องถิ่นเท่านั้น หรือหากเครื่องของคุณมีที่อยู่ IP สาธารณะคุณสามารถลงทะเบียนชื่อสาธารณะของคุณเองได้ (คุณสามารถกำหนดที่อยู่ IP ส่วนตัวให้กับชื่อสาธารณะได้เช่นกันมันน้อยกว่าทั่วไปและมีประโยชน์น้อยกว่า แต่ไม่มีปัญหาด้านเทคนิค)

รับชื่อโดเมนของคุณเอง

คุณสามารถรับชื่อโดเมนของคุณเองและกำหนดที่อยู่ IP ให้กับชื่อโฮสต์ภายในโดเมนนี้ คุณต้องลงทะเบียนชื่อโดเมนกับผู้ให้บริการชื่อโดเมน โดยทั่วไปจะมีค่าใช้จ่าย $ 10 - $ 15 / ปี (สำหรับโดเมนที่ถูกที่สุด) ใช้เว็บอินเตอร์เฟสของผู้ให้บริการชื่อโดเมนของคุณเพื่อกำหนดที่อยู่ให้กับชื่อโฮสต์

DNS แบบไดนามิก

หากเครื่องของคุณมีที่อยู่ IP แบบไดนามิกคุณสามารถใช้โปรโตคอลDNS แบบไดนามิกเพื่ออัปเดตที่อยู่ IP ที่เชื่อมโยงกับชื่อเครื่องเมื่อที่อยู่เปลี่ยนไป ผู้ให้บริการชื่อโดเมนบางรายสนับสนุน DNS แบบไดนามิกดังนั้นควรซื้อสินค้าก่อนตัดสินใจซื้อ สำหรับการใช้งานส่วนตัวNo-IPให้บริการ DNS แบบไดนามิกฟรีหากคุณใช้โดเมนของตนเอง (เช่นexample.ddns.net)


สร้างเซิร์ฟเวอร์ DNS ของคุณเองด้วย Dnsmasq: ฉันจะบอกเครื่องอื่นให้ใช้ S ได้อย่างไรเมื่อเครื่องอื่นติดตั้ง Windows
Radu Rădeanu

@Radu คุณสามารถเปลี่ยนเซิร์ฟเวอร์ DNS ที่เกี่ยวข้องกับการเชื่อมต่อผ่านแผงควบคุมที่ไหนสักแห่ง ฉันคิดว่าคุณต้องดึงคุณสมบัติการเชื่อมต่อของอินเทอร์เฟซเครือข่ายขึ้นมา
Gilles

ฉันโฆษณา c: \ windows \ system32 \ drivers \ etc \ hosts และทำงานได้ ขอบคุณ!
Radu Rădeanu

ฉันดึงผมออกมาหาสิ่งนี้และพบมันในเราเตอร์อย่างที่คุณแนะนำ ขอบคุณสำหรับข้อมูลรายละเอียด!
Jason Turan

ถ้าเป็นเครือข่าย บริษัท ฉันต้องบอกแผนกโครงสร้างพื้นฐาน การเพิ่ม linux mac ของฉันไปยังรายการเซิร์ฟเวอร์ DNS ใช่ไหม
WesternGun

24

ใช้Multicast DNS (mDNS) นี่เป็นโปรโตคอลการตั้งค่าเป็นศูนย์ที่ทำงานบนเครือข่ายย่อย LAN ไม่จำเป็นต้องใช้เซิร์ฟเวอร์ ใช้.localTLD (ซึ่งเป็นสิ่งที่คุณใช้อยู่แล้ว)

เพราะคุณถามทุกอย่างดูเหมือนจะเกินความจริง ถ้าไม่ใช่คุณอาจจะไม่ถาม


1
ดูเหมือนว่า mDNS จะไม่ได้รับการสนับสนุนบน Windows โดยไม่ต้องติดตั้งบางอย่างในกล่อง windows ทุกอัน
Zitrax

1
@Zitrax จุดที่ดี (นี่คือเว็บไซต์ * ระวัง!) ข้อมูลที่เกี่ยวข้องสำหรับการตั้งค่า Windows สามารถพบได้ที่นั่น - ค่อนข้างตรงไปตรงมา
TNE

3
Aka Zeroconf หรือ Bonjour จัดหาโดยavahiแพคเกจ คุณสามารถสอบถามเครือข่ายของคุณผ่านavahi-browse -alrตัวอย่างเช่น
DanMan

4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

และ

/etc/init.d/networking restart

ฉันควรรันสิ่งนี้กับไคลเอนต์หรือโฮสต์หรือไม่?
tshepang

บิตแรกจะถูกทำบนเซิร์ฟเวอร์ dhcp (และคุณต้องการเรียกใช้service restart dhcpd) ส่วนที่สองจะทำกับลูกค้าและใน distros service networking restartที่สุดในขณะนี้ควรจะใช้เป็น
คาเลบ

ขณะที่ผมจำได้ว่าผมจะต้องทำงานนี้ในฝั่งไคลเอ็นต์ ..
LanceBaynes

3

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

คุณจะต้องกำหนดค่าระบบอื่นของคุณเพื่อใช้บริการค้นหาชื่อบางประเภท ซึ่งสามารถอยู่/etc/hostsบนไคลเอนต์, ldap, nsswitch หรือเซิร์ฟเวอร์ DNS ปกติ ฉันใช้bindและป้อนเครื่องท้องถิ่นทั้งหมดภายในโดเมนท้องถิ่นจากนั้นให้บริการ DNS สำหรับไซต์นั้น

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