mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-11-03 19:30:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<style>
 | 
						|
</style>
 | 
						|
 | 
						|
<h2>Custom DNS</h2>
 | 
						|
 | 
						|
<p class="text-warning">This is an advanced configuration page.</p>
 | 
						|
 | 
						|
<p>It is possible to set custom DNS records on domains hosted here.</p>
 | 
						|
 | 
						|
<h3>Using a Secondary Nameserver</h3>
 | 
						|
 | 
						|
<p>If your TLD requires you to have two separate nameservers, you can either set up a secondary (aka “slave”) nameserver or, alternatively, set up <a href="#" onclick="return show_panel('external_dns')">external DNS</a> and ignore the DNS server on this box. If you choose to use a seconday/slave nameserver, you must find a seconday/slave nameserver service provider. Your domain name registrar or virtual cloud provider may provide this service for you. Once you set up the seconday/slave nameserver service, enter the hostname of <em>their</em> secondary nameserver:</p>
 | 
						|
 | 
						|
<form class="form-horizontal" role="form" onsubmit="do_set_secondary_dns(); return false;">
 | 
						|
  <div class="form-group">
 | 
						|
    <label for="secondarydnsHostname" class="col-sm-1 control-label">Hostname</label>
 | 
						|
    <div class="col-sm-10">
 | 
						|
      <input type="text" class="form-control" id="secondarydnsHostname" placeholder="ns1.cloudprovider.com">
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
  <div class="form-group">
 | 
						|
    <div class="col-sm-offset-1 col-sm-11">
 | 
						|
      <button type="submit" class="btn btn-primary">Update</button>
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
  <div id="secondarydns-clear-instructions" class="form-group" style="display: none">
 | 
						|
    <div class="col-sm-offset-1 col-sm-11">
 | 
						|
      <p class="small">Clear the input field above and click Update to use this machine itself as secondary DNS, which is the default/normal setup.</p>
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
</form>
 | 
						|
 | 
						|
<h3>Custom DNS API</h3>
 | 
						|
 | 
						|
<p>Use your box’s DNS API to set custom DNS records on domains hosted here. For instance, you can create your own dynamic DNS service.</p>
 | 
						|
 | 
						|
<p>Send a POST request like this:</p>
 | 
						|
 | 
						|
<pre>curl -d "" --user {email}:{password} https://{{hostname}}/admin/dns/set/<b>qname</b>[/<b>rtype</b>[/<b>value</b>]]</pre>
 | 
						|
 | 
						|
<h4>HTTP POST parameters</h4>
 | 
						|
 | 
						|
<table class="table">
 | 
						|
<thead><th>Parameter</th> <th>Value</th></thead>
 | 
						|
<tr><td>email</td> <td>The email address of any administrative user here.</td></tr>
 | 
						|
<tr><td>password</td> <td>That user’s password.</td></tr>
 | 
						|
<tr><td>qname</td> <td>The fully qualified domain name for the record you are trying to set.</td></tr>
 | 
						|
<tr><td>rtype</td> <td>The resource type. <code>A</code> if omitted. Possible values: <code>A</code> (an IPv4 address), <code>AAAA</code> (an IPv6 address), <code>TXT</code> (a text string), or <code>CNAME</code> (an alias, which is a fully qualified domain name).</td></tr>
 | 
						|
<tr><td>value</td> <td>The new record’s value. If omitted, the IPv4 address of the remote host is used. This is handy for dynamic DNS! To delete a record, use “__delete__”.</td></tr>
 | 
						|
</table>
 | 
						|
 | 
						|
<p style="margin-top: 1em">Note that <code>-d ""</code> is merely to ensure curl sends a POST request. You do not need to put anything inside the quotes. You can also pass the value using typical form encoding in the POST body.</p>
 | 
						|
 | 
						|
<p>Strict <a href="http://tools.ietf.org/html/rfc4408">SPF</a> and <a href="https://datatracker.ietf.org/doc/draft-kucherawy-dmarc-base/?include_text=1">DMARC</a> records will be added to all custom domains unless you override them.</p>
 | 
						|
 | 
						|
<h4>Examples:</h4>
 | 
						|
 | 
						|
<pre># sets laptop.mydomain.com to point to the IP address of the machine you are executing curl on
 | 
						|
curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/laptop.mydomain.com
 | 
						|
 | 
						|
# sets an alias
 | 
						|
curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/cname/bar.mydomain.com
 | 
						|
 | 
						|
# clears the alias
 | 
						|
curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/bar.mydomain.com/cname/__delete__
 | 
						|
 | 
						|
# sets a TXT record using the alternate value syntax
 | 
						|
curl -d "value=something%20here" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/txt
 | 
						|
</pre>
 | 
						|
 | 
						|
<script>
 | 
						|
function show_custom_dns() {
 | 
						|
 api(
 | 
						|
    "/dns/secondary-nameserver",
 | 
						|
    "GET",
 | 
						|
    { },
 | 
						|
    function(data) {
 | 
						|
      $('#secondarydnsHostname').val(data.hostname ? data.hostname : '');
 | 
						|
      $('#secondarydns-clear-instructions').toggle(data.hostname != null);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function do_set_secondary_dns() {
 | 
						|
 api(
 | 
						|
    "/dns/secondary-nameserver",
 | 
						|
    "POST",
 | 
						|
    {
 | 
						|
      hostname: $('#secondarydnsHostname').val()
 | 
						|
    },
 | 
						|
    function(data) {
 | 
						|
      if (data == "") return; // nothing updated
 | 
						|
      show_modal_error("Secondary DNS", $("<pre/>").text(data));
 | 
						|
      $('#secondarydns-clear-instructions').slideDown();
 | 
						|
    },
 | 
						|
    function(err) {
 | 
						|
      show_modal_error("Secondary DNS", $("<pre/>").text(err));
 | 
						|
    });
 | 
						|
}
 | 
						|
</script>
 |