Hướng dẫn cài đặt dns trên ubuntu server

Có rất nhiều cách khác nhau để bạn có thể thiết lập DNS nameserver như Network Manager GUI, netplain hoặc đơn giản và dễ sử dụng hơn là sử dụng file resolv.conf. Trong bài viết này mình sẽ hướng dẫn các bạn cách tùy chỉnh DNS nameserver trên thiết bị Ubuntu vĩnh viễn cho tới khi bạn tự mình thay đổi sang DNS nameserver khác trên thiết bị của mình.

Lưu ý: File /etc/resolv.conf sẽ bị ghi đè mỗi khi thiết bị khởi động lại, như vậy nghĩa là chúng ta sẽ không thể chỉnh sửa file này trực tiếp được. Thay vào đó, chúng ta sẽ chỉnh sửa một file khác vào sau đó tạo symbolic link tới /etc/resolv.conf

Một số dịch vụ DNS miễn phí

Trước khi đi vào chỉnh sửa DNS nameserver, mình sẽ chia sẻ tới bạn một số nhà cung cấp dịch vụ DNS miễn phí bên dưới đây – và mình khuyên bạn nên sử dụng DNS của Google và Cloudflare để tránh gặp vấn đề trong quá trình sử dụng. Và dưới đây là danh sách các nhà cung cấp dịch vụ DNS miễn phí:

GOOGLE
Primary IPv4: 8.8.8.8
Secondary IPv4: 8.8.4.4
Preferred IPv6: 2001:4860:4860::8888
Alternate IPv6: 2001:4860:4860::8844
Cloudflare
1.1.1.1
OPENDNS
Primary: 208.67.222.222
Secondary: 208.67.220.220
Preferred IPv6: 2620:0:ccc::2
Alternate IPv6: 2620:0:ccd::2
DNS.WATCH
Primary: 84.200.69.80
Secondary: 84.200.70.40
LEVEL3
Primary: 209.244.0.3
Secondary: 209.244.0.4
NORTON
Primary: 199.85.126.10
Secondary: 199.85.127.10
COMMODO
Primary: 8.26.56.26
Secondary: 8.20.247.20
VERISIGN
Primary: 64.6.64.6
Secondary: 64.6.65.6

Xem thêm: Public DNS server là gì

Cách thiết lập DNS nameserver

Chỉnh sửa file /etc/systemd/resolved.conf và bạn sẽ thấy trong file này mặc định sẽ chứa các thông tin như sau:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details
[Resolve]

# DNS=

# FallbackDNS=

# Domains=

# LLMNR=no

# MulticastDNS=no

# DNSSEC=no

# Cache=yes

# DNSStubListener=yes

Sau đó bạn sẽ thêm DNS nameserver mà bạn muốn sử dụng vào phần DNS dưới [Resolve], giả sử dụng mình sử dụng DNS của Google và Cloudflare thì kết quả sau khi chỉnh sửa file của mình sẽ thành như sau:

[Resolve]
DNS=8.8.8.8 1.1.1.1

# FallbackDNS=

# Domains=

# LLMNR=no

# MulticastDNS=no

# DNSSEC=no

# Cache=yes

# DNSStubListener=yes

Restart lại service để apply các DNS nameserver mới

service systemd-resolved restart

Như vậy là đã hoàn thành, lúc này nếu bạn kiểm tra file /etc/resolv.conf thì sẽ thấy nội dung bên trong file như sau nhưng sử dụng DNS nameserver mà bạn đã cấu hình trước đó:

nameserver 127.0.0.53

Nếu bạn muốn file /etc/resolv.conf hiển thị thông tin DNS nameserver mà bạn đã cấu hình – thì tiếp tục làm các bước tiếp sau đây.

Bạn cần xóa file /etc/resolv.conf đi để tạo symbolic link từ /run/systemd/resolve/resolv.conf

rm /etc/resolv.conf

Tạo symbolic link bằng cách chạy câu lệnh sau:

ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Cuối cùng bạn có thể sử dụng các công cụ như nslookup hoặc dig để kiểm tra xem liệu DNS nameserver đã phân giải được địa chỉ IP hay đã phân giải đúng chưa.

Kết luận

Khi thực hiện các hướng dẫn trên là bạn đã có thể thay đổi set cứng DNS nameserver trên thiết bị của mình được rồi đấy mà không còn lo việc file /etc/resolv.conf bị ghi đè mỗi khi thiết bị được boot lại.

Trên desktop environment, việc thay đổi cấu hình DNS cho một máy tính là việc đơn giản, bởi sự tồn tại của các chương trình network management rất trực quan. Tuy nhiên, trên môi trường server, khi chúng ta chỉ có shell, câu chuyện lại không hề dễ dàng. Cách thức mà hệ điều hành sử dụng để rút ra được cấu hình DNS để sử dụng hóa ra lại rất đa dạng. Và mỗi distro, mỗi nhà phân phối, mỗi bản phân phối tùy chỉnh đều có những giải pháp khác nhau. Mỗi giải pháp đặt lại cấu hình lại đều có những ưu nhược điểm riêng, tóm lại là khá vất vả.

Trên máy chủ Ubuntu, để thay đổi DNS, chúng ta có thể thực hiện một cách thức khá đơn giản. Chúng ta chỉnh sửa tập tin /etc/dhcp/dhclient.conf. Tìm tới dòng prepend domain-name-servers x.x.x.x, y.y.y.y; . Bỏ comment và sau đó thay đổi danh mục các DNS theo cách chúng ta muốn. Chẳng hạn:

prepend domain-name-servers 127.0.0.1, 1.1.1.1, 8.8.8.8;

Sau đó tìm cách để khởi động lại network manager. Việc này có thể sẽ khá khó khăn nếu chúng ta truy cập shell thông qua SSH. Cách dễ nhất là reboot.

Có thể bạn sẽ gặp phải vấn đề khi Ubuntu server 18 khởi động lại thì cấu hình của dns-nameserver bị thay đổi về địa chỉ 127.0.0.53. Điều này sẽ dẫn đến bạn không phân giải được tên miền (vẫn có ping hoặc kết nối vào được IP trên Internet).

Trong hướng dẫn này, HCD sẽ hướng dẫn bạn cấu hình để cố định dns-nameserver mỗi khi khởi động lại. Hãy bắt đầu ngay.

Hiện tượng

Sau khi reboot lại, file sẽ bị thay đổi về nội dung nameserver 127.0.0.53 (dòng gần cuối), mặc dù trước đó bạn đã thay đổi sang 8.8.8.8 :).

root@hcdserver01:~# cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 127.0.0.53
options edns0

Khi bạn thực hiện ping ra IP hoặc tên miền sẽ gặp thông báo như ảnh sau.

Hướng dẫn cài đặt dns trên ubuntu server
Ping ra tên miền báo không phân giải được.

Lý do đơn giản vì đây là một liên kết mềm (soft link) nên việc thay đổi ở đây không có tác dụng. Kiểm tra bằng lệnh ls -alh /etc/resolv.conf ta sẽ thấy file của link.

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

Cách xử lý

Để xử lý việc này, bạn hãy cài thêm gói

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

0 để xử lý vấn đề này. Lưu ý trước khi cài, bạn cần sửa lại dòng nameserver 127.0.0.53 ở file

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

2 thành

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

3 để có thể ra internet lấy gói trước nhé. Trong bài này sẽ thực hiện cấu hình với quyền

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

4 để thực hiện nhé.

apt -y install resolvconf

Sau khi cài xong, bạn dùng

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

5 hoặc tool quen thuộc để sửa file

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

6 với nội dung dưới.

# Make edits to /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.8.8
nameserver 8.8.4.4

Khởi động lại

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

0 để cấu hình được áp dụng.

service resolvconf restart

Sau đó reboot lại và kiểm tra kết quả bằng các thao tác sau

Kiểm tra nội dung file

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

2 bằng lệnh

root@hcdserver01:~# ls -alh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug  6  2020 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@hcdserver01:~#

9

root@hcdserver01:~# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 127.0.0.53

Ping thử ra ngoài bằng IP và Domain để đảm bảo internet đã thông.

Hướng dẫn cài đặt dns trên ubuntu server
Kết quả ping đã thông ra ngoài internet.

Tới đây học chủ động đã hướng dẫn mẹo nhỏ này với bạn, nếu thấy hay thì hãy share hoặc chia sẻ thêm cách bạn có nhé.