Trong môi trường mạng nội bộ (LAN) với nhiều máy ảo Proxmox, việc cấu hình Local DNS là yếu tố quan trọng giúp các VM/CT container có thể giao tiếp với nhau qua tên miền thay vì địa chỉ IP. Bài viết này sẽ hướng dẫn chi tiết cách thiết lập Local DNS Network server sử dụng Dnsmasq hoặc Bind9 trong Proxmox VE, phù hợp cho home lab, văn phòng nhỏ hoặc doanh nghiệp vừa và nhỏ.

Tại sao cần Local DNS trong Proxmox?

Khi triển khai nhiều máy ảo trong Proxmox, mỗi VM thường có địa chỉ IP tĩnh. Nếu không có Local DNS Network, bạn phải nhớ tất cả các địa chỉ IP – điều này rất bất tiện và dễ gây nhầm lẫn. Local DNS giúp:

  • Truy cập các máy ảo qua tên dễ nhớ (ví dụ: nginx.vnhte.lan, mysql.vnhte.lan)
  • Dễ dàng thay đổi IP của các máy ảo mà không cần cập nhật cấu hình trên các máy khác
  • Tăng tốc độ phân giải Local DNS Network nội bộ, giảm độ trễ network
  • Hoạt động độc lập với DNS provider bên ngoài (không phụ thuộc internet)
  • Hỗ trợ DHCP tích hợp để cấp IP tự động cho các thiết bị mới

Chuẩn bị môi trường

Thông tin mạng mẫu

Thông sốGiá trị
Network Range192.168.1.0/24
Gateway192.168.1.1
Local DNS Network server (Proxmox)192.168.1.10
Tên miền nội bộvnhte.lan
Dải DHCP192.168.1.100 – 192.168.1.200

Yêu cầu

  • Proxmox VE 7.x hoặc 8.x đã cài đặt
  • Quyền truy cập root hoặc sudo
  • Một VM/CT chạy Debian/Ubuntu để cài Local DNS Network server
  • Card mạng bridge (vmbr0) đã được cấu hình

Phương pháp 1: Sử dụng Dnsmasq (Đơn giản)

Dnsmasq là Local DNS Network forwarder nhẹ, dễ cài đặt và cấu hình, phù hợp cho mạng nhỏ. Kết hợp cả DNS và DHCP trong một package duy nhất.

Bước 1: Cài đặt Dnsmasq

Tạo một LXC container hoặc VM mới chạy Debian/Ubuntu, sau đó cài đặt Dnsmasq:

apt update && apt install -y dnsmasq

Bước 2: Cấu hình Dnsmasq

Chỉnh sửa file cấu hình chính:

nano /etc/dnsmasq.conf

Thêm hoặc chỉnh sửa các dòng sau:

# Interface - chỉ listen trên LAN interface
interface=vmbr0

# Dia chi IP tinh cua Local DNS Network server
listen-address=192.168.1.10

# Tên miền nội bộ
domain=vnhte.lan
local=/vnhte.lan/

# Dải IP cấp qua DHCP (neu can)
dhcp-range=192.168.1.100,192.168.1.200,24h

# Cấu hình DHCP tĩnh theo MAC
dhcp-host=00:11:22:33:44:55,192.168.1.50,nginx-vm

# DNS upstream - forward các query ra internet
server=8.8.8.8
server=8.8.4.4

# Không đọc /etc/resolv.conf
no-resolv

# Cache DNS
cache-size=1000

Bước 3: Thêm DNS record tĩnh

Thêm các máy ảo vào file host:

nano /etc/hosts

Thêm nội dung:

192.168.1.11  nginx.vnhte.lan  nginx
192.168.1.12  mysql.vnhte.lan  mysql
192.168.1.13  redis.vnhte.lan  redis
192.168.1.14  prometheus.vnhte.lan  prometheus
192.168.1.15  grafana.vnhte.lan  grafana

Bước 4: Khởi động lại Dnsmasq

systemctl restart dnsmasq
systemctl enable dnsmasq

Bước 5: Kiểm tra

# Test phân giải nội bộ
nslookup nginx.vnhte.lan localhost

# Test từ Proxmox host
dig nginx.vnhte.lan @192.168.1.10

Phương pháp 2: Sử dụng Bind9 (Mạnh mẽ hơn)

Bind9 (named) là Local DNS Network server enterprise-grade, phù hợp cho mạng lớn với nhiều zone và record. Cung cấp đầy đủ tính năng DNS bao gồm forward zone, reverse zone, DNSSEC.

Bước 1: Cài đặt Bind9

apt update && apt install -y bind9 bind9utils bind9-doc

Bước 2: Cấu hình named.conf.options

nano /etc/bind/named.conf.options
options {
    directory "/var/cache/bind";

    // Cho phép truy vấn từ mạng LAN
    allow-query { 192.168.1.0/24; localhost; };

    // Forwarders - gửi request không biết đến Google DNS
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    // Không cho recursion từ bên ngoài
    recursion yes;

    // Log
    logging {
        channel default_log {
            file "/var/log/named/default.log" versions 3 size 5m;
            severity info;
            print-time yes;
            print-severity yes;
            print-category yes;
        };
        category default { default_log; };
    };
};

Bước 3: Tạo Forward Zone

nano /etc/bind/named.conf.local
// Forward zone cho vnhte.lan
zone "vnhte.lan" {
    type master;
    file "/etc/bind/zones/db.vnhte.lan";
    allow-transfer { none; };
};

// Reverse zone cho 192.168.1.0/24
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.192.168.1";
    allow-transfer { none; };
};

Bước 4: Tạo Zone file (Forward)

mkdir -p /etc/bind/zones

nano /etc/bind/zones/db.vnhte.lan
$TTL    86400
@       IN      SOA     ns.vnhte.lan. admin.vnhte.lan. (
                        2026060201  ; Serial (YYYYMMDDNN)
                        3600        ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        86400 )     ; Minimum TTL

; Name servers
@       IN      NS      ns.vnhte.lan.
ns      IN      A       192.168.1.10

; Hosts
nginx       IN      A       192.168.1.11
mysql       IN      A       192.168.1.12
redis       IN      A       192.168.1.13
prometheus  IN      A       192.168.1.14
grafana     IN      A       192.168.1.15
proxmox     IN      A       192.168.1.2

; CNAMEs
monitor    IN      CNAME   prometheus
dash       IN      CNAME   grafana

Bước 5: Tạo Reverse Zone file

nano /etc/bind/zones/db.192.168.1
$TTL    86400
@       IN      SOA     ns.vnhte.lan. admin.vnhte.lan. (
                        2026060201  ; Serial
                        3600        ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        86400 )     ; Minimum TTL

; Name servers
@       IN      NS      ns.vnhte.lan.

; PTR records
10      IN      PTR     ns.vnhte.lan.
11      IN      PTR     nginx.vnhte.lan.
12      IN      PTR     mysql.vnhte.lan.
13      IN      PTR     redis.vnhte.lan.
14      IN      PTR     prometheus.vnhte.lan.
15      IN      PTR     grafana.vnhte.lan.
2       IN      PTR     proxmox.vnhte.lan.

Bước 6: Kiểm tra và khởi động Bind9

# Kiem tra cau hinh
named-checkconf

# Check zone files
named-checkzone vnhte.lan /etc/bind/zones/db.vnhte.lan
named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1

# Khoi dong lai
systemctl restart named
systemctl enable named

Cấu hình Proxmox Host sử dụng Local DNS

Phương pháp 1: Chỉnh sửa /etc/resolv.conf

nano /etc/resolv.conf
nameserver 192.168.1.10
nameserver 8.8.8.8
search vnhte.lan

Phương pháp 2: Systemd-resolved (Proxmox 8.x)

# Tao override
mkdir -p /etc/systemd/resolved.conf.d
nano /etc/systemd/resolved.conf.d/dns.conf
[Resolve]
DNS=192.168.1.10
Domains=vnhte.lan
DNSStubListener=no
systemctl restart systemd-resolved

Phương pháp 3: Cấu hình DHCP Client

nano /etc/network/interfaces

Thêm dns-nameservers vào cấu hình bridge:

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.2/24
    gateway 192.168.1.1
    bridge-ports enp0s3
    bridge-stp off
    bridge-fd 0
    dns-nameservers 192.168.1.10 8.8.8.8
    dns-search vnhte.lan

Cấu hình DNS trên các VM container

Ubuntu/Debian

nano /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    ens18:
      addresses:
        - 192.168.1.11/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 192.168.1.10
          - 8.8.8.8
        search:
          - vnhte.lan
netplan apply

CentOS/RHEL

nano /etc/sysconfig/network-scripts/ifcfg-ens18
DEVICE=ens18
BOOTPROTO=static
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.10
DNS2=8.8.8.8
DOMAIN=vnhte.lan
ONBOOT=yes
systemctl restart network

Cấu hình Router/AP sử dụng Local DNS

Để tất cả thiết bị trong mạng LAN (điện thoại, laptop, smart TV) đều có thể sử dụng Local DNS Network, bạn cần cấu hình DNS trên router:

  • Đăng nhập vào router (thường là 192.168.1.1)
  • Tìm mục DHCP Settings hoặc LAN Settings
  • Đặt Primary DNS = 192.168.1.10 (Local DNS Network server của bạn)
  • Đặt Secondary DNS = 8.8.8.8 (dự phòng)
  • Disable Router DNS relay để client nhận trực tiếp Local DNS Network server

Kiểm tra hoạt động

Từ Proxmox Host

# Test Local DNS Network resolution
dig nginx.vnhte.lan

# Test reverse DNS
dig -x 192.168.1.11

# Test with nslookup
nslookup nginx.vnhte.lan 192.168.1.10

Từ VM

# Ping thử bằng tên
ping -c 3 nginx.vnhte.lan

# Kiem tra Local DNS Network server dang dung
systemd-resolve --status

Xử lý sự cố thường gặp

LỗiNguyên nhânGiải pháp
DNS không phân giải đượcFirewall chặn port 53Kiểm tra và mở port 53 UDP/TCP
Zone file chưa được loadZone file chưa được loadKiểm tra named-checkzone và restart service
Servfail responseForwarders không hoạt độngKiểm tra kết nối internet và forwarders
Timeout khi queryLocal DNS Network server khong reachableKiểm tra IP và interface binding

Các lệnh hữu ích để debug

# Kiem tra Local DNS Network server co dang listen khong
ss -tulpn | grep :53

# Kiểm tra log
journalctl -u named -f
tail -f /var/log/syslog | grep dnsmasq

# Test truy vấn trực tiếp đến upstream
dig @8.8.8.8 google.com

Phân Tích Chuyên Sâu Về Local DNS Network Trong Proxmox

Hệ thống Local DNS Network không chỉ đơn thuần là công cụ phân giải tên miền thành địa chỉ IP, mà nó còn đóng vai trò như một hệ thống danh bạ (directory service) trung tâm cho toàn bộ hạ tầng mạng LAN của bạn. Khi số lượng máy ảo (VM) và Linux Containers (LXC/Podman) trên cụm máy chủ ảo hóa tăng lên, việc quản lý IP thủ công thông qua file /etc/hosts trên từng máy trạm sẽ trở thành một cơn ác mộng quản trị hệ thống.

Tối ưu hóa quy trình DevOps và CI/CD

Một hệ thống Local DNS Network được cấu hình chuẩn xác là tiền đề bắt buộc để triển khai các 파i-p-line tự động hóa CI/CD (Continuous Integration / Continuous Deployment). Các công cụ như Jenkins, GitLab CI, Ansible hay Terraform luôn yêu cầu giao tiếp với các máy chủ đích thông qua tên miền (FQDN – Fully Qualified Domain Name) thay vì địa chỉ IP tĩnh. Việc này đảm bảo rằng các kịch bản tự động hóa (playbooks/scripts) có thể tái sử dụng trên nhiều môi trường khác nhau (như Staging, Testing, Production) mà không cần phải sửa đổi mã nguồn hay cấu hình phần cứng.

Bảo mật mạng và kiểm soát truy cập nội bộ

Bên cạnh yếu tố tiện lợi, Local DNS Network còn gia tăng đáng kể tính bảo mật cho hạ tầng mạng LAN. Thay vì phải mở port và thiết lập các quy tắc tường lửa (firewall rules) phức tạp dựa trên địa chỉ IP, quản trị viên có thể kết hợp Local DNS Network với các công cụ Reverse Proxy (như Nginx, HAProxy) để kiểm soát luồng truy cập nội bộ. Bằng cách chặn hoàn toàn các truy vấn Local DNS Network từ bên ngoài mạng LAN (thông qua cấu hình allow-query trong Bind9), hệ thống của bạn sẽ miễn nhiễm hoàn toàn với các cuộc tấn công DNS Spoofing hay DNS Cache Poisoning từ internet.

Tính khả dụng cao (High Availability) cho Local DNS Network server

Vì Local DNS Network đóng vai trò là “xương sống” của toàn bộ mạng LAN, nếu máy chủ Local DNS Network gặp sự cố, toàn bộ các dịch vụ nội bộ sẽ bị gián đoạn kết nối. Do đó, trong môi trường doanh nghiệp (Production), bạn không nên chỉ triển khai một máy chủ Local DNS Network duy nhất. Giải pháp tối ưu là thiết lập một cụm Master-Slave DNS (đối với Bind9) hoặc cấu hình nhiều máy chủ Dnsmasq chạy song song. Khi cấu hình DHCP trên Router, bạn sẽ cấp phát cả hai địa chỉ IP của Primary DNS và Secondary DNS cho các thiết bị client. Nếu máy chủ Primary bị sập, các thiết bị sẽ tự động chuyển hướng truy vấn sang máy chủ Secondary mà không gây ra bất kỳ thời gian chết (downtime) nào cho hệ thống mạng.

Kết luận

Việc cấu hình Local DNS trong Proxmox cho mạng LAN giúp quản lý hệ thống dễ dàng hơn, đặc biệt khi số lượng máy ảo tăng lên. Với Dnsmasq, bạn có giải pháp nhanh chóng và đơn giản. Còn Bind9 phù hợp khi cần mở rộng với nhiều zone và tính năng nâng cao.

Hãy bắt đầu với Dnsmasq nếu bạn mới tiếp cận, sau đó chuyển sang Bind9 khi nhu cầu tăng lên. Điều quan trọng nhất là đảm bảo Local DNS Network server luôn available và có backup DNS fallback.

Câu hỏi thường gặp (FAQ)

Có thể chạy DNS trực tiếp trên Proxmox host không?

Có thể, nhưng không khuyến khích vì có thể ảnh hưởng đến các service khác của Proxmox. Tốt nhất nên tạo một VM/CT riêng để chạy Local DNS Network server.

Local DNS có ảnh hưởng đến tốc độ internet không?

Ngược lại, hệ thống Local DNS Network thường tăng tốc độ vì cache lại các query DNS, giảm độ trễ cho các truy vấn nội bộ và các site thường xuyên truy cập.

Làm sao để thêm máy ảo mới vào DNS?

Với Dnsmasq: Thêm dòng vào /etc/hosts và restart dnsmasq. Với Bind9: Thêm record A vào zone file, tăng serial number và restart named.

Có cần thiết lập Reverse DNS không?

Reverse DNS (PTR record) cần thiết cho một số dịch vụ như SMTP, LDAP và các ứng dụng monitoring. Nên cấu hình để tránh lỗi khi sử dụng các dịch vụ này.

Làm sao để các thiết bị di động sử dụng Local DNS Network?

Thiết bị di động nhận DNS qua DHCP từ router. Chỉ cần cấu hình DNS trên router là các thiết bị sẽ tự động sử dụng Local DNS Network server của bạn.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...