{"id":14232,"date":"2025-12-27T12:01:29","date_gmt":"2025-12-27T06:31:29","guid":{"rendered":"https:\/\/www.youstable.com\/blog\/?p=14232"},"modified":"2025-12-27T12:01:31","modified_gmt":"2025-12-27T06:31:31","slug":"create-dns-on-linux-server","status":"publish","type":"post","link":"https:\/\/www.youstable.com\/blog\/create-dns-on-linux-server","title":{"rendered":"How to Create DNS on Linux Server with BIND and Zone Files"},"content":{"rendered":"\n<p><strong>To create DNS on a Linux server<\/strong>, install BIND (named), add zones in named.conf, build forward and reverse zone files with SOA, NS, A\/MX\/CNAME and PTR records, open port 53 TCP\/UDP, start and enable named, test with dig, then register nameserver glue at your registrar to go live.<\/p>\n\n\n\n<p>In this guide, I\u2019ll show you how to create DNS on Linux server using BIND step by step. We\u2019ll cover authoritative and caching roles, Ubuntu\/Debian and RHEL\/Alma\/Rocky commands, zone files, firewall rules, testing with dig, and hardening. Follow along and you\u2019ll have a production-ready DNS service with confidence.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"what-youll-build-and-when-to-use-it\"><strong>What You\u2019ll Build and When to Use it?<\/strong><\/h2>\n\n\n\n<p>DNS translates domain names to IP addresses. On Linux, BIND (named) is the most widely used DNS software. You can deploy it as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Authoritative DNS:<\/strong> Serves your domain\u2019s official records (A, AAAA, MX, etc.).<\/li>\n\n\n\n<li><strong>Caching\/Resolver:<\/strong> Answers client queries and caches results to speed up lookups.<\/li>\n\n\n\n<li><strong>Split-DNS (Views): <\/strong>Different answers for internal vs. external clients.<\/li>\n<\/ul>\n\n\n\n<p>If your goal is \u201cHow to create DNS on Linux server\u201d for your own domains, you\u2019ll configure an authoritative server. If you just want faster, local lookups for a network, deploy a caching resolver only. You can also run both roles with proper access controls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"prerequisites\"><strong>Prerequisites<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Linux server (Ubuntu\/Debian or RHEL\/Alma\/Rocky\/CentOS) with static public IP<\/li>\n\n\n\n<li>Root or sudo privileges<\/li>\n\n\n\n<li>A domain you control at a registrar (for delegating nameservers)<\/li>\n\n\n\n<li>Firewall access to open ports 53 TCP and UDP<\/li>\n\n\n\n<li>Basic CLI familiarity and a text editor (nano\/vi)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-1-install-bind-named\"><strong>Step 1: Install BIND (named)<\/strong><\/h2>\n\n\n\n<p>Choose the commands matching your distribution.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ubuntu\/Debian\nsudo apt update\nsudo apt install bind9 bind9-utils bind9-dnsutils\n\n# RHEL\/CentOS\/Alma\/Rocky\nsudo dnf install bind bind-utils\n# On older CentOS: sudo <a href=\"https:\/\/www.youstable.com\/blog\/install-yum-on-linux\/\">yum install<\/a> bind bind-utils\n<\/code><\/pre>\n\n\n\n<p><strong>Service names differ slightly:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ubuntu\/Debian:<\/strong> service is bind9<\/li>\n\n\n\n<li><strong>RHEL-family: <\/strong>service is named<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-2-define-global-options-and-access-controls\"><strong>Step 2: Define Global Options and Access Controls<\/strong><\/h2>\n\n\n\n<p>On Ubuntu\/Debian, options live in <code>\/etc\/bind\/named.conf.options<\/code> and zones in <code>\/etc\/bind\/named.conf.local<\/code>. On RHEL, everything is typically in <code>\/etc\/named.conf<\/code> with zone files in <code>\/var\/named<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Ubuntu\/Debian: \/etc\/bind\/named.conf.options\noptions {\n    directory \"\/var\/cache\/bind\";\n    dnssec-validation auto;\n\n    \/\/ Allow recursion only to trusted clients (for caching role).\n    recursion yes;\n    allow-recursion { 127.0.0.1; 10.0.0.0\/8; 192.168.0.0\/16; };\n\n    \/\/ Who can query this server.\n    allow-query { any; };\n\n    \/\/ Listen addresses\n    listen-on { any; };\n    listen-on-v6 { any; };\n};\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ RHEL\/Alma\/Rocky: \/etc\/named.conf (partial)\noptions {\n    directory \"\/var\/named\";\n    dnssec-validation auto;\n\n    recursion yes;\n    allow-recursion { 127.0.0.1; 10.0.0.0\/8; 192.168.0.0\/16; };\n    allow-query     { any; };\n\n    listen-on port 53 { any; };\n    listen-on-v6 { any; };\n};\n<\/code><\/pre>\n\n\n\n<p><strong>Security tip: <\/strong>If this server is public and authoritative only, disable recursion and restrict queries if needed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>recursion no;\nallow-recursion { none; };\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-3-add-your-zones-authoritative\"><strong>Step 3: Add Your Zones (Authoritative)<\/strong><\/h2>\n\n\n\n<p>Assume your domain is <code>example.com<\/code> and your DNS server\u2019s public IP is <code>203.0.113.10<\/code>. We\u2019ll create a forward zone for example.com and a reverse zone for <code>203.0.113.0\/24<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"ubuntu-debian-zone-declarations\"><strong>Ubuntu\/Debian zone declarations<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/bind\/named.conf.local\nzone \"example.com\" {\n    type master;\n    file \"\/etc\/bind\/zones\/db.example.com\";\n};\n\nzone \"113.0.203.in-addr.arpa\" {\n    type master;\n    file \"\/etc\/bind\/zones\/db.203.0.113\";\n};\n<\/code><\/pre>\n\n\n\n<p><strong>Create the zones directory and files:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/etc\/bind\/zones\nsudo nano \/etc\/bind\/zones\/db.example.com\nsudo nano \/etc\/bind\/zones\/db.203.0.113\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"rhel-alma-rocky-zone-declarations\"><strong>RHEL\/Alma\/Rocky zone declarations<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/named.conf (add inside the main config)\nzone \"example.com\" IN {\n    type master;\n    file \"db.example.com\";\n};\n\nzone \"113.0.203.in-addr.arpa\" IN {\n    type master;\n    file \"db.203.0.113\";\n};\n<\/code><\/pre>\n\n\n\n<p><strong>Create zone files under <code>\/var\/named<\/code> and set permissions:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/var\/named\/db.example.com\nsudo nano \/var\/named\/db.203.0.113\nsudo chown root:named \/var\/named\/db.*\nsudo chmod 640 \/var\/named\/db.*\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-4-build-forward-and-reverse-zone-files\"><strong>Step 4: Build Forward and Reverse Zone Files<\/strong><\/h2>\n\n\n\n<p>Here\u2019s a minimal, production-ready example with SOA, NS, A, AAAA, MX, CNAME, and TXT records.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;$ORIGIN example.com.\n;$TTL 3600\n@   IN SOA ns1.example.com. hostmaster.example.com. (\n        2025010101 ; serial (YYYYMMDDNN)\n        3600       ; refresh\n        900        ; retry\n        1209600    ; expire\n        300 )      ; negative cache\n\n    IN NS   ns1.example.com.\n    IN NS   ns2.example.com.\n\nns1 IN A    203.0.113.10\nns2 IN A    203.0.113.11\n\n@   IN A    203.0.113.20\n@   IN AAAA 2001:db8::20\n\nwww IN CNAME @\nmail IN A    203.0.113.30\n@   IN MX 10 mail.example.com.\n\n_txt IN TXT \"v=spf1 a mx ~all\"\n_dmarc IN TXT \"v=DMARC1; p=none; rua=mailto:dmarc@example.com\"\n<\/code><\/pre>\n\n\n\n<p><strong>Reverse zone (PTR) example for <code>203.0.113.0\/24<\/code>:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;$ORIGIN 113.0.203.in-addr.arpa.\n;$TTL 3600\n@   IN SOA ns1.example.com. hostmaster.example.com. (\n        2025010101\n        3600\n        900\n        1209600\n        300 )\n    IN NS ns1.example.com.\n    IN NS ns2.example.com.\n\n10  IN PTR ns1.example.com.\n11  IN PTR ns2.example.com.\n20  IN PTR example.com.\n30  IN PTR mail.example.com.\n<\/code><\/pre>\n\n\n\n<p>Always increment the SOA <code>serial<\/code> on every change. The common pattern is YYYYMMDDNN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-5-open-firewall-and-enable-the-service\"><strong>Step 5: Open Firewall and Enable the Service<\/strong><\/h2>\n\n\n\n<p>DNS uses UDP 53 for most queries and TCP 53 for zone transfers and large responses.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># UFW (Ubuntu)\nsudo ufw allow 53\/udp\nsudo ufw allow 53\/tcp\n\n# firewalld (RHEL\/Alma\/Rocky)\nsudo firewall-cmd --add-service=dns --permanent\nsudo firewall-cmd --reload\n<\/code><\/pre>\n\n\n\n<p><strong>Start and enable BIND:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ubuntu\/Debian\nsudo systemctl enable --now bind9\nsudo systemctl status bind9\n\n# RHEL-family\nsudo systemctl enable --now named\nsudo systemctl status named\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-6-test-with-dig\"><strong>Step 6: Test with dig<\/strong><\/h2>\n\n\n\n<p>Use dig to verify your records locally before delegating at your registrar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig @127.0.0.1 example.com A +short\ndig @127.0.0.1 www.example.com CNAME +short\ndig @127.0.0.1 mail.example.com A +short\ndig @127.0.0.1 -x 203.0.113.20 +short\n\n# Check SOA and NS\ndig @127.0.0.1 example.com SOA +noall +answer\ndig @127.0.0.1 example.com NS +noall +answer\n<\/code><\/pre>\n\n\n\n<p><strong>If dig fails, inspect logs:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ubuntu\/Debian\nsudo journalctl -u bind9 -e\nsudo named-checkconf\nsudo named-checkzone example.com \/etc\/bind\/zones\/db.example.com\n\n# RHEL-family\nsudo journalctl -u named -e\nsudo named-checkconf\nsudo named-checkzone example.com \/var\/named\/db.example.com\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-7-delegate-your-domain-registrar-glue\"><strong>Step 7: Delegate Your Domain (Registrar Glue)<\/strong><\/h2>\n\n\n\n<p><strong>At your domain registrar:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create host\/glue records for ns1.example.com = 203.0.113.10 and ns2.example.com = 203.0.113.11.<\/li>\n\n\n\n<li>Set your domain\u2019s nameservers to ns1.example.com and ns2.example.com.<\/li>\n\n\n\n<li>Wait for propagation (often minutes to a few hours).<\/li>\n<\/ul>\n\n\n\n<p>Once delegated, public queries to example.com should resolve from your Linux DNS server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"authoritative-vs-caching-quick-configuration-notes\"><strong>Authoritative vs. Caching: Quick Configuration Notes<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Authoritative-only: <\/strong><code>recursion no;<\/code>, serve only your zones, limit <code>allow-transfer<\/code> to secondaries.<\/li>\n\n\n\n<li><strong>Caching-only: <\/strong>No master zones; enable <code>recursion yes;<\/code>, restrict <code>allow-recursion<\/code> to your LAN.<\/li>\n\n\n\n<li><strong>Mixed role:<\/strong> Use BIND views to separate internal clients from public.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"security-and-reliability-best-practices\"><strong>Security and Reliability Best Practices<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Limit zone transfers: <\/strong><code>allow-transfer { 203.0.113.11; };<\/code><\/li>\n\n\n\n<li>Use TSIG keys for secure transfers between primary\/secondary.<\/li>\n\n\n\n<li><strong>Harden recursion:<\/strong> only for internal IP ranges if needed.<\/li>\n\n\n\n<li>Enable DNSSEC validation for resolvers; consider signing zones if you manage a public authoritative setup.<\/li>\n\n\n\n<li>Run as non-root (default), keep BIND updated, and monitor logs.<\/li>\n\n\n\n<li>Rate-limit responses (Response Policy\/Rate Limiting) to reduce abuse.<\/li>\n\n\n\n<li>Monitor with <code>rndc status<\/code> and external uptime checks.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"common-dns-records-youll-use\"><strong>Common DNS Records You\u2019ll Use<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A\/AAAA: <\/strong>Map names to IPv4\/IPv6 addresses.<\/li>\n\n\n\n<li><strong>CNAME: <\/strong>Alias one name to another (don\u2019t use at zone apex).<\/li>\n\n\n\n<li><strong>MX: <\/strong>Mail exchanger for your domain.<\/li>\n\n\n\n<li><strong>TXT: <\/strong>SPF, DKIM, DMARC, and verification tokens.<\/li>\n\n\n\n<li><strong>NS:<\/strong> Authoritative nameservers for the zone.<\/li>\n\n\n\n<li><strong>PTR: <\/strong>Reverse DNS mapping IP to hostname (critical for email IPs).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"troubleshooting-checklist\"><strong>Troubleshooting Checklist<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Port 53 in use? On Ubuntu, systemd-resolved may conflict. Disable the stub listener:<br><pre class=\"wp-block-code\"><code>sudo sed -i 's\/#DNSStubListener=yes\/DNSStubListener=no\/' \/etc\/systemd\/resolved.conf<br>sudo systemctl restart systemd-resolved<\/code><\/pre><br>Ensure BIND listens on your server IP, not 127.0.0.53.<\/li>\n\n\n\n<li><strong>Syntax errors: <\/strong>Run <code>named-checkconf<\/code> and <code>named-checkzone<\/code>.<\/li>\n\n\n\n<li><strong>Firewall\/NAT: <\/strong>Open UDP\/TCP 53 and forward correctly if behind a router.<\/li>\n\n\n\n<li><strong>Serial not incremented:<\/strong> Secondary won\u2019t update; increase SOA serial.<\/li>\n\n\n\n<li><strong>Glue missing: <\/strong>Public cannot find ns1\/ns2; add host records at registrar.<\/li>\n\n\n\n<li><strong>Reverse DNS: <\/strong>Your ISP often controls PTR for public IP blocks\u2014request delegation or add PTR via their portal.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"when-to-use-managed-dns-and-how-youstable-helps\"><strong>When to Use Managed DNS (and How YouStable Helps)<\/strong><\/h2>\n\n\n\n<p>Running DNS yourself offers control, but you must handle availability, DDoS resilience, and global latency. If your domain is mission-critical, consider managed DNS or pair your authoritative BIND with secondary DNS on a <a href=\"https:\/\/www.youstable.com\/blog\/tally-on-cloud-vs-local-installation\/\">cloud<\/a> network. YouStable\u2019s managed VPS and cloud instances provide high availability, anycast-friendly networking, and 24\/7 support\u2014so your DNS stays fast and reliable while you focus on apps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"faqs\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1765962008048\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"what-is-the-easiest-way-to-create-a-dns-server-on-linux\"><strong>What is the easiest way to create a DNS server on Linux?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Install BIND and add a master zone. On Ubuntu: <code>apt install bind9<\/code>, declare zones in <code>\/etc\/bind\/named.conf.local<\/code>, create zone files, open port 53, then test with <code>dig<\/code>. For many small teams, a caching-only resolver is even simpler\u2014no zones, just safe recursion for your LAN.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765962027842\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"should-i-use-bind-dnsmasq-or-unbound\"><strong>Should I use BIND, dnsmasq, or Unbound?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>BIND is the most feature-complete for authoritative + recursive + views + DNSSEC signing. Unbound excels as a modern, secure caching resolver. dnsmasq is lightweight for small networks (DHCP + DNS). If you need authoritative for public domains, BIND is the standard choice.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765962043148\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-set-up-reverse-dns-ptr-for-my-server\"><strong>How do I set up reverse DNS (PTR) for my server?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Create a reverse zone (in-addr.arpa for IPv4 or ip6.arpa for IPv6) and add PTR records. However, for public IPs, your ISP usually controls rDNS. Open a ticket or use their portal to point your IP to the desired hostname. Keep A\/AAAA and PTR consistent, especially for mail servers.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765962058534\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"what-ports-do-i-open-for-dns\"><strong>What ports do I open for DNS?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Open UDP 53 for standard queries and TCP 53 for zone transfers and large responses (DNS over TCP). On RHEL-based systems use <code>firewall-cmd --add-service=dns --permanent<\/code>. On Ubuntu, allow both <code>53\/udp<\/code> and <code>53\/tcp<\/code> in UFW.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765962070051\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-make-my-dns-highly-available\"><strong>How do I make my DNS highly available?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Run at least two authoritative servers (ns1\/ns2) in different networks, restrict zone transfers with TSIG, and monitor with external health checks. Consider secondary DNS on another provider or anycast. If you prefer simplicity, YouStable can provision redundant VPS instances with global monitoring for resilient DNS.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>To create DNS on a Linux server, install BIND (named), add zones in named.conf, build forward and reverse zone files [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":16341,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[350],"tags":[],"class_list":["post-14232","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledgebase"],"acf":[],"featured_image_src":"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/How-to-Create-DNS-on-Linux-Server-with-BIND-and-Zone-Files.jpg","author_info":{"display_name":"Sanjeet Chauhan","author_link":"https:\/\/www.youstable.com\/blog\/author\/sanjeet"},"_links":{"self":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/14232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/comments?post=14232"}],"version-history":[{"count":6,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/14232\/revisions"}],"predecessor-version":[{"id":16343,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/14232\/revisions\/16343"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media\/16341"}],"wp:attachment":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media?parent=14232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/categories?post=14232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/tags?post=14232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}