0027 | ปัญหาโลกแตกกับ DNS

ว่าไปก็เห็นจะโลกแตกจริงๆ แฮะ
กับปัญหาล้านแปด แต่ดั๊นมาเซตผิดอยู่ที่เดียวอะไรอย่างนี้
เลยกลายเป็น lookup ไม่ออกมั่ง ออกแต่ ip มั่วมั่ง อะไรพวกนี้บ่อยไปครับ

ก่อนอื่นก็ต้องมาไล่กันที่ระบบ Root DNS ก่อน

Tracing to icez.net[a] via I.ROOT-SERVERS.NET, maximum of 1 retries
I.ROOT-SERVERS.NET (192.36.148.17)
|\___ I.GTLD-SERVERS.net [net] (192.43.172.30)
|     |\___ ns6.thzhost.com [icez.net] (203.146.170.140) Got authoritative answer
|      \___ ns2.thzhost.com [icez.net] (203.146.129.182) Got authoritative answer
…..
|\___ K.GTLD-SERVERS.net [net] (192.52.178.30)
|     |\___ ns6.thzhost.com [icez.net] (203.146.170.140) (cached)
|      \___ ns2.thzhost.com [icez.net] (203.146.129.182) (cached)
\___ J.GTLD-SERVERS.net [net] (192.48.79.30)
|\___ ns6.thzhost.com [icez.net] (203.146.170.140) (cached)
\___ ns2.thzhost.com [icez.net] (203.146.129.182) (cached)

ns2.thzhost.com (203.146.129.182)       icez.net -> 203.146.129.182
ns6.thzhost.com (203.146.170.140)       icez.net -> 203.146.129.182

นี่แหละครับ วิธี lookup ของระบบ DNS
ไอ้เจ้า I.ROOT-SERVERS.NET นี่เป็น server ของ ICANN ครับ
ทำหน้าที่รองรับ DNS request ของระดับ TLD
คือเป็น authoritive zone ของ TLD ทุกอัน
หากเกิด TLD ใหม่ขึ้นมาก็มาถามที่นี่ได้ครับว่ามันชี้ไปที่ไหนต่อ
จริงๆ ROOT SERVERS นี่มีเยอะครับ แต่เผอิญว่า I.ROOT-SERVERS.NET มันอยู่ในไทย (ที่ กสท) ก็เลยใช้ตัวนี้ซะเลย

ลำดับต่อมา พอได้ DNS ของ TLD มาแล้ว ก็ไปถามต่อว่า domain เราอยู่ DNS ไหน
(จริงๆ มันถามแค่ที่เดียวนะครับ นี่พอดีใช้ tool ช่วยนิดหน่อย มันเลยขึ้นมาหมดเลย)
อย่างกรณี .com .net พวกนี้จะมี GTLD-SERVERS.NET ของ verisign เป็นผู้ดูแล
ของไทยก็เป็น THNIC ดูแลอยู่ อะไรประมาณนี้แหละครับ

ทีนี้ เวลาได้ “ชื่อ” ของ nameserver มาแล้วเนี่ย เซิฟเวอร์มันจะบอก “IP” มาให้ด้วยเลย
ตามที่เราได้ลงทะเบียน nameserver ไว้นั่นแหละครับ
นั่นหมายความว่า ไม่ใช่ว่าอยู่ดีๆ เราจะตั้ง nameserver ทั่วไปได้เลย
ยังไงก็ต้องลงทะเบียนกับผู้ให้บริการจดโดเมนก่อน
ถ้าเอา “ชื่อ” ของ nameserver ไป lookup ดูมันก็จะได้อย่างนี้ครับ

Tracing to ns2.thzhost.com[a] via I.ROOT-SERVERS.NET, maximum of 1 retries
I.ROOT-SERVERS.NET (192.36.148.17)
|\___ F.GTLD-SERVERS.NET [com] (192.35.51.30) Got answer
|     |\___ ns6.thzhost.com [thzhost.com] (203.146.170.140) Got authoritative answer
|      \___ ns2.thzhost.com [thzhost.com] (203.146.129.182) Got authoritative answer
|\___ E.GTLD-SERVERS.NET [com] (192.12.94.30) Got answer
|     |\___ ns6.thzhost.com [thzhost.com] (203.146.170.140) (cached)
|      \___ ns2.thzhost.com [thzhost.com] (203.146.129.182) (cached)
……
|\___ I.GTLD-SERVERS.NET [com] (192.43.172.30) Got answer

|     |\___ ns6.thzhost.com [thzhost.com] (203.146.170.140) (cached)
|      \___ ns2.thzhost.com [thzhost.com] (203.146.129.182) (cached)
|\___ H.GTLD-SERVERS.NET [com] (192.54.112.30) Got answer
|     |\___ ns6.thzhost.com [thzhost.com] (203.146.170.140) (cached)
|      \___ ns2.thzhost.com [thzhost.com] (203.146.129.182) (cached)
\___ G.GTLD-SERVERS.NET [com] (192.42.93.30) *

H.GTLD-SERVERS.NET (192.54.112.30)      ns2.thzhost.com -> 203.146.129.182
I.GTLD-SERVERS.NET (192.43.172.30)      ns2.thzhost.com -> 203.146.129.182
K.GTLD-SERVERS.NET (192.52.178.30)      ns2.thzhost.com -> 203.146.129.182
M.GTLD-SERVERS.NET (192.55.83.30)       ns2.thzhost.com -> 203.146.129.182
A.GTLD-SERVERS.NET (192.5.6.30)         ns2.thzhost.com -> 203.146.129.182
D.GTLD-SERVERS.NET (192.31.80.30)       ns2.thzhost.com -> 203.146.129.182
E.GTLD-SERVERS.NET (192.12.94.30)       ns2.thzhost.com -> 203.146.129.182
ns2.thzhost.com (203.146.129.182)       ns2.thzhost.com -> 203.146.129.182
ns6.thzhost.com (203.146.170.140)       ns2.thzhost.com -> 203.146.129.182
F.GTLD-SERVERS.NET (192.35.51.30)       ns2.thzhost.com -> 203.146.129.182

เห็นมั้ยครับว่า พอลงทะเบียน nameserver แล้ว
ไอ้ GTLD SERVERS แทนที่จะตอบว่า domain นี้มี dns อะไร
มันก็เลยตอบพ่วง IP มาให้ด้วยเลย

ตรงจุดนี้คือจุดที่ผิดพลาดกันอันดับแรกๆ เลยครับ
ก็คือ สมมติ domain icez.net ชี้ไปที่ ns2.thzhost.com กับ ns6.thzhost.com
แต่ใน domain thzhost.com ไม่มี record ของ ns2.thzhost.com กับ ns6.thzhost.com
ก็อาจทำให้ไม่สามารถ lookup ได้ เพราะ dns บางตัวจะไม่เอา ip มาจาก gtld-servers คือจะไป lookup หาเองตรงๆ
แล้วมันหา ip ของ nameserver ไม่เจอ หรือ IP ไม่ตรงกันกับที่ลงทะเบียนไว้ ก็เน่าครับ

———————————————

มากันที่จุดที่สอง: ว่าด้วย “NS record”
เหมือนจะง่ายครับ
แค่ชี้ใน domain ให้ตรงกับที่ lookup ขึ้นมาได้
อย่างของ icez.net ก็คือ ns2.thzhost.com กับ ns6.thzhost.com
ก็เข้าไปตั้งค่าใน DNS Server ตามนี้เลยครับ

icez.net. IN NS ns2.thzhost.com.
icez.net. IN NS ns6.thzhost.com.

———————————————

จุดที่สาม: IP ของ nameserver
นอกจากที่เราไปลงทะเบียน nameserver ไว้กับที่จดโดเมนแล้ว
เราก็ต้องมาเซตที่เครื่อง dns server เราด้วยครับ
ns2.thzhost.com กับ ns6.thzhost.com คือ subdomain ของ domain thzhost.com
ก็เข้าไปที่ DNS Server ของ thzhost.com
ไปเพิ่ม record ตามนี้ครับ

ns2 IN A 203.146.129.182
ns6 IN A 203.146.170.140

———————————————

จบ เห้อ ยาวดีจัง ไม่ได้เขียนอะไรยาวๆ แบบนี้มาพักนึงและ
ไม่รู้เรื่องอย่าว่ากันนะครับ (ฮา) เขียนตอนเช้าก็เงี้ย

Tags: ,

0026 | ค้นหา และแก้ไขแฟ้มบน linux แบบโคตรง่าย

เอามาเก็บไว้ เพิ่งแก้เครื่องเสร็จไปเครื่องนึง (มีแววได้ใช้อีกเร็วๆ นี้)

ก่อนอื่นเลย คำสั่งค้นหา (ขอบคุณพี่วุธ ผ่านพี่โดม thaicybergames ด้วยครับ)

find /path/ -type f 2>/dev/null | xargs -i grep -l "search" {}

แล้วก็… คำสั่ง replace

perl -pi -w -e 's/search/replace/g;' filename

ทีนี้ก็… เอามารวมร่างกัน ใช้แค่คำสั่งนี้อันเดียวจบ

find /path/ -type f 2>/dev/null | xargs -i grep -l "search" {} | xargs perl -pi -w -e 's/search/replace/g;'

อ้างอิง: Linux – Search and replace over multiple files

Tags: , ,