{"id":8388,"date":"2025-10-15T01:28:58","date_gmt":"2025-10-14T23:28:58","guid":{"rendered":"https:\/\/www.lrob.fr\/?page_id=8388"},"modified":"2025-10-15T12:30:17","modified_gmt":"2025-10-15T10:30:17","slug":"deploy-secondary-slave-dns-servers-for-plesk","status":"publish","type":"page","link":"https:\/\/www.lrob.fr\/en\/doc\/documentation-serveurs-plesk-infogeres\/deployer-des-serveurs-dns-secondaires-slave-dns-pour-plesk\/","title":{"rendered":"Deploying slave DNS servers for Plesk"},"content":{"rendered":"<p>The aim is to set up one or more secondary (Slavic) DNS servers, automatically synchronized with a <strong>Plesk<\/strong> master DNS.<br>This architecture improves <strong>resilience<\/strong>the <strong>DNS propagation speed<\/strong>the <strong>simplicity<\/strong>and the <strong>overall reliability<\/strong> of your hosting infrastructure.<\/p>\n\n\n\n<p>This procedure is applied when you subscribe to the DNS slave management option via the<a href=\"https:\/\/www.lrob.fr\/en\/services\/plesk-web-server-outsourcing\/\">LRob outsourcing offer<\/a>. It will give you all the prerequisites and explain the procedure and system in place in this context.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware and architecture<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <strong>VPS 1 to 2 vCores<\/strong> and <strong>1 to 2 GB RAM<\/strong> are more than enough (excluding massive traffic: &gt;1M requests\/hour).<\/li>\n\n\n\n<li>2 to 3 servers <strong>slave DNS<\/strong> are recommended for redundancy.<\/li>\n\n\n\n<li>Compatible <strong>ARM64<\/strong> or <strong>x86_64<\/strong>.<\/li>\n\n\n\n<li>Recommended system : <strong>Debian<\/strong> - stable, lightweight, widely supported.<\/li>\n\n\n\n<li>Each slave server must be :\n<ul class=\"wp-block-list\">\n<li>Hosted on a <strong>network \/ separate supplier<\/strong> (different subnet).<\/li>\n\n\n\n<li>Accessible in <strong>IPv4 and IPv6<\/strong>each with its own <strong>Dedicated IP<\/strong>.<\/li>\n\n\n\n<li>With a <strong>hostname<\/strong> unique and correct.<\/li>\n\n\n\n<li>With a <strong>rDNS (reverse DNS)<\/strong> corresponding to its hostname.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Naming and domain<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dedicate a <strong>infrastructure sector<\/strong> for your DNS servers, for example :<br><code>example.net<\/code><\/li>\n\n\n\n<li>Declare the <strong>glue records<\/strong> IPv4 and IPv6 with your <strong>domain registry<\/strong> :<br>Example: <code>ns1.example.net<\/code>, <code>ns2.example.net<\/code>, <code>ns3.example.net<\/code><\/li>\n\n\n\n<li>Define these glue records as DNS servers for your domain.<\/li>\n<\/ul>\n\n\n\n<p>These records are essential for DNS resolvers to be able to reach your servers directly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation on the DNS slave server<\/h2>\n\n\n\n<p>Installation example for <strong>Debian 12<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Installing Bind9<\/h3>\n\n\n\n<p>In root :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt update &amp;&amp; apt upgrade\napt install bind9 bind9-utils bind9-doc<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configuration named (BIND9)<\/h3>\n\n\n\n<p>Let's edit the first configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>nano \/etc\/bind\/named.conf.options<\/code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>options {\n    directory \"\/var\/cache\/bind\";\n\n    listen-on { any; };\n    listen-on-v6 { any; };\n\n    dnssec-validation auto; \/\/ default config\n    recursion no; \/\/ no resolver function\n    allow-query { any; }; \/\/ allow public DNS queries\n    allow-transfer { none; }; \/\/ no zone transfers to others\n    allow-new-zones yes; \/\/ required for rndc addzone\n    auth-nxdomain no; \/\/ RFC1035 compliance\n    version \"none\"; \/\/ hide version info\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Control configuration <code>rndc<\/code><\/h3>\n\n\n\n<p>The rndc protocol is used to authorize control access to DNS slaves.<\/p>\n\n\n\n<p>Edit the second configuration file :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/bind\/named.conf.local<\/code><\/pre>\n\n\n\n<p>Authorize the IPs of your DNS master (Plesk server) here:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>controls {\n    inet * port 953 allow { IPv4_PLESK; IPv6_Plesk ; 127.0.0.1; };\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Raise the key <code>rndc<\/code><\/h3>\n\n\n\n<p>The key is stored in <code>\/etc\/bind\/rndc.key<\/code>.<\/p>\n\n\n\n<p>Display and write down the key, which you'll need for Plesk configuration.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/etc\/bind\/rndc.key<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>key \"rndc-key\" {\n        algorithm hmac-md5;\n        secret \"xxxxxxxxxxxxxxxxxxxxxxxxx==\";\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Restart BIND (named)<\/h3>\n\n\n\n<p>Restart the service to apply the config. Let's also check that everything is working normally.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl restart named\nrndc status<\/code><\/pre>\n\n\n\n<p>Repeat this operation for each DNS slave.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Plesk configuration (master server)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Install extension <strong>Slave DNS Manager<\/strong><\/h3>\n\n\n\n<p>In the Plesk interface :<br><strong>Extensions \u2192 Catalog \u2192 Slave DNS Manager \u2192 Install<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Add your Slavic servers<\/h3>\n\n\n\n<p>Open <strong>Tools &amp; Settings \u2192 Extensions \u2192 Slave DNS Manager \u2192 Settings<\/strong><\/p>\n\n\n\n<p>Add each slave server with :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP address<\/strong> Master IPv4 (Plesk server)<\/li>\n\n\n\n<li><strong>IP address<\/strong> IPv4 slave server<\/li>\n\n\n\n<li><strong>Port<\/strong> (RNDC): 953<\/li>\n\n\n\n<li><strong>Algorithm<\/strong> : hmac-sha256<\/li>\n\n\n\n<li><strong>Secret key<\/strong> the one recovered in <code>\/etc\/bind\/rndc.key<\/code><\/li>\n\n\n\n<li><strong>Server name<\/strong> (optional) : <code>ns1.example.net<\/code><\/li>\n<\/ul>\n\n\n\n<p>The extension will automatically create a local configuration for <code>rndc<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Refresh and resync<\/h3>\n\n\n\n<p>On the Plesk DNS Slave management home page :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on <strong>Refresh<\/strong><\/li>\n\n\n\n<li>Then click on <strong>Resynchronize<\/strong><\/li>\n<\/ul>\n\n\n\n<p>If everything is green: then the configuration is probably good.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How it works<\/h2>\n\n\n\n<p>As soon as a DNS zone is :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>created,<\/li>\n\n\n\n<li>modified,<\/li>\n\n\n\n<li>or deleted<\/li>\n<\/ul>\n\n\n\n<p>on the Plesk server, the Slave DNS Manager automatically sends the following commands to each slave server:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Action<\/th><th>Order executed<\/th><\/tr><\/thead><tbody><tr><td>Creation<\/td><td><code>\/usr\/sbin\/rndc -c slave.config addzone example.com '{ type slave; file \"\/var\/lib\/bind\/example.com\"; masters { ; }; };'<\/code><\/td><\/tr><tr><td>Update<\/td><td><code>\/usr\/sbin\/rndc -c slave.config refresh example.com<\/code><\/td><\/tr><tr><td>Delete<\/td><td><code>\/usr\/sbin\/rndc -c slave.config delzone example.com<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1 Structure of a default DNS zone<\/h2>\n\n\n\n<p>When a new domain is created on the server, <strong>Plesk<\/strong> automatically generates a DNS zone from a default template.<br>This model can (and must) be adapted to your hosting infrastructure to ensure consistency, security and smooth running of services.<\/p>\n\n\n\n<p>At <strong>LRob<\/strong>The default DNS zone contains all records essential for web, e-mail and domain security:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Recording<\/th><th>Type<\/th><th>Value \/ Example<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>.<\/code><\/td><td><strong>A<\/strong><\/td><td><code>&lt;ip&gt;<\/code><\/td><td>Main IPv4 address of the site<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>AAAA<\/strong><\/td><td><code>&lt;ipv6&gt;<\/code><\/td><td>Main IPv6 address of the site<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>MX (10)<\/strong><\/td><td><code>mail..<\/code><\/td><td>Domain mail server<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>TXT<\/strong><\/td><td><code>v=spf1 +mx include:_spf.lrob.net -all<\/code><\/td><td>SPF policy authorizing shipments via LRob<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>NS<\/strong><\/td><td><code>.<\/code><\/td><td>DNS master server (Plesk)<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>CAA (issuewild)<\/strong><\/td><td><code>letsencrypt.org<\/code><\/td><td>Allow Let's Encrypt to issue certificates<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>TXT<\/strong><\/td><td>Hosted by www.lrob.fr | WordPress Security Expert<\/td><td>WordPress Security Expert`<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>NS<\/strong><\/td><td><code>ns1.lrob.net.<\/code><\/td><td>Secondary DNS server n\u00b01<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>NS<\/strong><\/td><td><code>ns2.lrob.net.<\/code><\/td><td>Secondary DNS server n\u00b02<\/td><\/tr><tr><td><code>.<\/code><\/td><td><strong>NS<\/strong><\/td><td><code>ns3.lrob.net.<\/code><\/td><td>Secondary DNS server no. 3<\/td><\/tr><tr><td><code>_dmarc..<\/code><\/td><td><strong>TXT<\/strong><\/td><td><code>v=DMARC1; p=reject; sp=reject; aspf=s; rua=mailto:dmarcreport@lrob.fr; ruf=mailto:dmarcreport@lrob.fr; rf=afrf; pct=100; ri=172800<\/code><\/td><td>Strict DMARC policy for e-mail authentication<\/td><\/tr><tr><td><code>ftp..<\/code><\/td><td><strong>CNAME<\/strong><\/td><td><code>.<\/code><\/td><td>Alias for FTP<\/td><\/tr><tr><td><code>mail..<\/code><\/td><td><strong>A \/ AAAA<\/strong><\/td><td><code>&lt;ip&gt;<\/code> \/ <code>&lt;ipv6&gt;<\/code><\/td><td>Mail server pointing to main host<\/td><\/tr><tr><td><code>webmail..<\/code><\/td><td><strong>CNAME<\/strong><\/td><td><code>mail..<\/code><\/td><td>Alias for webmail access<\/td><\/tr><tr><td><code>www..<\/code><\/td><td><strong>CNAME<\/strong><\/td><td><code>.<\/code><\/td><td>Alias for the main site<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Remarks<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This configuration guarantees <strong>SPF + DMARC compliance<\/strong>the <strong>DNS redundancy<\/strong>and compatibility <strong>Let's Encrypt<\/strong> thanks to registration <code>CAA<\/code>.<\/li>\n\n\n\n<li>Registration <code>TXT<\/code> \"Hosted by LRob\" adds a touch of identification and transparency.<\/li>\n\n\n\n<li>The servers <code>NS<\/code> must point to your declared secondary DNS servers (including glue records).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d Testing and validation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Check external resolution<\/h3>\n\n\n\n<p>From any station:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig @ns1.example.net example.com\ndig @ns2.example.net example.com<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>L&rsquo;objectif est de mettre en place un ou plusieurs serveurs DNS secondaires (slaves) synchronis\u00e9s automatiquement avec un serveur Plesk principal (master DNS).Cette architecture am\u00e9liore la r\u00e9silience, la rapidit\u00e9 de propagation DNS, la simplicit\u00e9, et la fiabilit\u00e9 globale de votre infrastructure d\u2019h\u00e9bergement. Cette proc\u00e9dure est appliqu\u00e9e lors de la souscription \u00e0 l&rsquo;option de management des slave [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":926,"parent":8337,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8388","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/pages\/8388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/comments?post=8388"}],"version-history":[{"count":8,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/pages\/8388\/revisions"}],"predecessor-version":[{"id":8400,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/pages\/8388\/revisions\/8400"}],"up":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/pages\/8337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/media\/926"}],"wp:attachment":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/media?parent=8388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}