traceroute แก้ไขชื่ออย่างไร


11

ในขณะที่เขียนสคริปต์ฉันต้องการอ้างอิงเครื่องด้วยชื่อคอมพิวเตอร์ที่ฉันให้ไว้ (เช่น "selenium-rc") ฉันไม่สามารถ ping ได้โดยใช้ "selenium-rc" ดังนั้นฉันจึงลองใช้คำสั่งต่อไปนี้เพื่อดูว่าชื่อนั้นเป็นที่รู้จักหรือไม่

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

ตกลง traceroute "พบ" ชื่อ อย่างไร? ต่อไป ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

อืม ... กลไกการค้นหาที่นี่จะต้องแตกต่างเพราะโฮสต์ไม่รู้จัก ฉันสมมติว่านี่คือการใช้กระบวนการแก้ปัญหาชื่อระบบในขณะที่ตัวอย่างแรกคือการใช้กระบวนการที่เฉพาะเจาะจงเพื่อ traceroute แก้ไข?

จากนั้นเมื่อฉันกลับมาอีกครั้งในภายหลัง ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

ตกลงผลลัพธ์ที่แตกต่าง ชื่อ "selenium-rc" ไม่ได้เปลี่ยนแปลงบนเครื่อง แต่กระบวนการแก้ไขชื่อชื่อ traceroute จะต้องมีลำดับความสำคัญบางอย่างและในขณะนี้จะให้ผลลัพธ์ที่เชื่อถือได้มากกว่าที่มอบหมายโดยระบบ / บริการอื่นบนเครือข่าย (น่าเสียดายที่ฉันสมมติว่าเป็นชื่อแบบไดนามิกที่ฉันไม่สามารถควบคุมได้และดังนั้นจึงไม่มีประโยชน์ในสคริปต์)

มีคนอธิบายผลลัพธ์ได้ไหม

คำตอบ:


9

โดยทั่วไปใน Linux และ Unix traceroute และ ping จะใช้การเรียกไปยัง gethostbyname () เพื่อค้นหาชื่อของระบบ gethostbyname () จะใช้ไฟล์กำหนดค่าระบบเพื่อกำหนดลำดับการสืบค้นฐานข้อมูลการตั้งชื่อเช่น / etc / hosts และ DNS

ใน Linux การกระทำเริ่มต้นคือ (หรืออาจเคยเป็น) เพื่อสืบค้น DNS ก่อนจากนั้นจึง / etc / hosts สิ่งนี้สามารถเปลี่ยนแปลงหรือปรับปรุงโดยการตั้งค่าลำดับที่ต้องการใน /etc/host.conf

หากต้องการค้นหา / etc / hosts ก่อน DNS ให้ตั้งค่าลำดับต่อไปนี้ใน /etc/host.conf:

order hosts,bind

ใน Solaris คำสั่งเดียวกันนี้ถูกควบคุมผ่านไฟล์ /etc/nsswitch.conf ในรายการสำหรับฐานข้อมูลโฮสต์

โฮสต์: ไฟล์ DNS

ตั้งค่าลำดับการค้นหาให้ค้นหาใน / etc / hosts ก่อนค้นหา DNS

Traceroute และ ping จะใช้วิธีการเหล่านี้เพื่อค้นหาฐานข้อมูลการตั้งชื่อที่ตั้งค่าไว้ทั้งหมด hostและnslookupคำสั่งการใช้งานทั้งเท่านั้น DNS ดังนั้นพวกเขาจะไม่จำเป็นต้องทำซ้ำผลลัพธ์ที่สอดคล้องกันดูเหมือนว่าคุณกำลังเห็น

Solaris มีเครื่องมือค้นหาgetentซึ่งสามารถใช้เพื่อระบุโฮสต์หรือที่อยู่ในลักษณะเดียวกับที่ traceroute และ ping do - โดยทำตามชุดฐานข้อมูลการตั้งชื่อที่กำหนดค่าเพื่อค้นหา

getent hosts <hostname>

จะค้นหาฐานข้อมูลอะไรก็ตามที่อยู่ในรายการโฮสต์ใน /etc/nsswitch.conf

ดังนั้น. ในกรณีของคุณเพื่อให้ได้ผลลัพธ์ที่สอดคล้องกันให้เพิ่มสิ่งต่อไปนี้ลงใน / etc / hosts

192.168.235.41 selenium-rc

และตรวจสอบให้แน่ใจว่า /etc/host.conf มี:

order hosts,bind

หรือตรวจสอบให้แน่ใจว่า /etc/nsswitch.conf มี:

hosts: files dns

เมื่อเสร็จแล้วคุณควรเห็นผลลัพธ์ที่สอดคล้องกันทั้ง ping และ traceroute รวมถึงคำสั่งอื่น ๆ เช่น ssh, telnet, curl, wget เป็นต้น


เมื่อฉันสอบถามเซิร์ฟเวอร์ DNS ที่แสดงรายการในไฟล์ resolv.conf พร้อมยูทิลิตี dig ฉันพบทั้งสองรายการ ฉันคิดว่า traceroute ชอบคนที่มีคุณสมบัติครบถ้วน
Keith Bentrup

2

ดูเหมือนว่าคุณได้ตั้งค่าการค้นหาแบบย้อนกลับ แต่ไม่ส่งต่อ

ระบบของคุณสามารถค้นหาที่อยู่ IP 192.168.235.41 และรับรู้ว่ามันเป็นselenium-rcแต่เมื่อมันพยายามค้นหาselenium-rcมันล้มเหลว

ฉันแนะนำให้คุณตรวจสอบ/etc/hostsและ/etc/resolv.conf; พฤติกรรมของการgetaddrinfoเรียกใช้ระบบถูกกำหนดโดยผู้หลังและอ้างอิงถึงอดีต


1

การเดาของฉัน: การเรียกใช้traceroute 192.168.235.41ทำให้เกิดคำขอ DNS เพื่อออกไปหาชื่อที่มีที่อยู่ IP 192.168.235.41 traceroute -n 192.168.235.41เป็นวิธีเริ่ม traceroute โดยไม่ทำการค้นหา DNS ในแต่ละที่อยู่ IP ที่พบ เซิร์ฟเวอร์ DNS ใช้เวลาตอบสนองนานกว่าระบบ DNS ที่ต้องการรอดังนั้นในตอนแรก traceroute ไม่ได้ให้ชื่อโฮสต์สำหรับ 192.168.235.41 เมื่อเวลา traceroute ส่งและรับแพ็กเก็ตจาก 192.168.235.41 เซิร์ฟเวอร์ DNS ของคุณได้ตอบกลับดังนั้น traceroute จึงสามารถให้ชื่อโฮสต์แก่มันได้

ดังนั้นฉันจะพูดว่า "ปัญหาเซิร์ฟเวอร์ DNS" ด้วยเวลาที่สะดวกมากที่ทำให้คุณสงสัยในสิ่งอื่น คิดว่า "กฎของ Murphy" ที่นี่ เมื่อคุณกลับมาอีกครั้งในภายหลังคุณจะได้รับชื่อที่แตกต่างกันสำหรับที่อยู่ IP เดียวกันซึ่งทำให้ฉันคิดว่าอาจมีคนมายุ่งเกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ DNS ในช่วงเวลาที่คุณกำลังทำ traceroutes

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