แก้ไขปัญหา BIND DNS ขึ้น named error (network unreachable) resolving

หากต้องการแก้ไขปัญหาการใช้งาน BIND เพื่อรันเซอร์วิสเป็น DNS Server สามารถดูเหตุการณ์หรือข้อผิดพลาด (error) ที่เกิดขึ้นในไฟล์ /var/log/messages โดยจะใช้ชื่อโปรแกรมเป็น named

ปัญหาหนึ่งที่ค่อนข้างกวนใจสำหรับการใช้งาน คือมักจะขึ้นข้อความ error (network unreachable) resolving ตามด้วยชื่อหรือโดเมนที่ต้องการหา แล้วตามด้วยเลข IPv6

ตัวอย่างเช่นไคลเอ้นต์พยายามจะแปลง (resolve) ชื่อ www.google.com จะมีข้อผิดพลาด (error) เกิดขึ้นในไฟล์ /var/log/messages ดังนี้

[root@cent6 ~]# tail -f /var/log/messages
Dec 15 23:14:33 cent6 named[1743]: error (network unreachable) resolving 'google.com/DS/IN': 2001:503:a83e::2:30#53
Dec 15 23:14:33 cent6 named[1743]: error (network unreachable) resolving 'google.com/DS/IN': 2001:503:231d::2:30#53
Dec 15 23:14:35 cent6 named[1743]: error (network unreachable) resolving 'www.google.com.dlv.isc.org/DLV/IN': 2001:500:2f::f#53
Dec 15 23:14:35 cent6 named[1743]: error (network unreachable) resolving './NS/IN': 2001:500:2f::f#53
Dec 15 23:14:35 cent6 named[1743]: error (network unreachable) resolving 'www.google.com.dlv.isc.org/DLV/IN': 2001:500:e::1#53
Dec 15 23:14:35 cent6 named[1743]: error (network unreachable) resolving 'www.google.com.dlv.isc.org/DLV/IN': 2001:500:f::1#53
Dec 15 23:14:35 cent6 named[1743]: error (network unreachable) resolving 'www.google.com.dlv.isc.org/DLV/IN': 2001:500:60::30#53

แม้จะมี error เกิดขึ้นในไฟล์ ไคลเอ้นต์ก็ยังได้ผลลัพธ์ที่ต้องการ ทั้ง IPv4 และ IPv6

[user1@client ~]$ host www.google.com 192.168.1.1
Using domain server:
Name: 192.168.1.1
Address: 192.168.1.1#53
Aliases:
www.google.com has address 74.125.135.103
www.google.com has address 74.125.135.105
www.google.com has address 74.125.135.147
www.google.com has address 74.125.135.106
www.google.com has address 74.125.135.99
www.google.com has address 74.125.135.104
www.google.com has IPv6 address 2404:6800:4001:c01::6a

ถ้าเราจะไม่สนใจ error ที่เกิดขึ้นในไฟล์ /var/log/messages ก็ได้ แต่เนื่องจากไฟล์นี้จะเป็นไฟล์ศูนย์กลางทีี่ kernel, โปรแกรมหรือเซอร์วิสต่างๆ ที่รันบนเครื่องไว้สำหรับแจ้งข้อผิดพลาดที่เกิดขึ้น ถ้าเราไม่แก้ไข error ที่เกิดขึ้นจาก bind หรือ named ตลอดเวลาแบบนี้ อาจทำให้ไม่เห็นหรือแก้ไขข้อผิดพลาดอื่นๆ ที่เกิดขึ้นในเครื่องได้

สาเหตุที่ขึ้น error แบบนี้ ก็เป็นเพราะว่าเน็ตเวิร์กที่เราใช้งาน ยังรองรับ IPv6 ไม่สมบูรณ์ ทำให้เวลา DNS server หรือ named พยายามจะใช้ IPv6 ในการถามข้อมูลจาก DNS Server ปลายทาง จึงไม่สำเร็จ

หากต้องการปิด error นี้ออก ต้องแก้ไขใน BIND ใช้ IPv4 หรือ IP Address ธรรมดาที่เราใช้อยู่อย่างเดียว รอจนกระทั่งโครงข่ายของเรารองรับ IPv6 ได้สมบูรณ์ จึงค่อยเปิด (ไม่รู้ว่าต้องรออีกนานแค่ไหน)

การแก้ไขให้ BIND ใช้ IPv4 อย่างเดียวเท่านั้น บน CentOS หรือลีนุกซ์ตระกูล RedHat ทำได้โดยแก้ไขไฟล์ /etc/sysconfig/named เพิ่มบรรทัด OPTIONS=”-4″ ต่อท้ายไฟล์ไป ตามตัวอย่าง

[root@cent6 ~]# vi /etc/sysconfig/named
...
...
OPTIONS="-4"

ใช้คำสั่ง service named restart เพื่อให้คอนฟิกใหม่มีผล

[root@cent6 ~]# service named restart
Stopping named:                   [ OK ]
Starting named:                   [ OK ]
[root@cent6 ~]#

ลอง resolve ชื่อจากไคลเอ้นต์อีกครั้ง ก็จะไม่มี error ขึ้นในไฟล์แล้ว

ถึงแม้ว่าจะใช้เฉพาะ IPv4 ในการ resolve ชื่อ แต่ผลลัพธ์ที่ได้ ก็มีการแปลงชื่อเป็น IPv6 address มาด้วย

ตัวอย่างการถามชื่อ www.facebook.com หลังจากแก้ไขคอนฟิกแล้ว

[root@cent6 ~]# host www.facebook.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 173.252.100.27
star.c10r.facebook.com has IPv6 address 2a03:2880:2110:df01:face:b00c:0:8

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.