Skip to content
Snippets Groups Projects
dns.xml 16.3 KiB
Newer Older
Goik Martin's avatar
Goik Martin committed
<?xml version="1.0" encoding="UTF-8"?>
Goik Martin's avatar
Goik Martin committed
<chapter annotations="slide" version="5.1" xml:id="sdiDns"
         xmlns="http://docbook.org/ns/docbook"
Goik Martin's avatar
Goik Martin committed
         xmlns:xlink="http://www.w3.org/1999/xlink"
Goik Martin's avatar
Goik Martin committed
         xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
Goik Martin's avatar
Goik Martin committed
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:svg="http://www.w3.org/2000/svg"
         xmlns:ns="http://docbook.org/ns/transclusion"
Goik Martin's avatar
Goik Martin committed
         xmlns:m="http://www.w3.org/1998/Math/MathML"
         xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns:db="http://docbook.org/ns/docbook">
Goik Martin's avatar
Goik Martin committed
  <title><xref linkend="glo_DNS"/></title>
Goik Martin's avatar
Goik Martin committed

  <section xml:id="sdiDnsPrelim">
    <title>Preliminaries</title>

Goik Martin's avatar
Goik Martin committed
    <figure xml:id="sdiDnsLinks">
      <title>Documentation links</title>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
      <itemizedlist>
Goik Martin's avatar
Goik Martin committed
        <listitem>
          <para><link
          xlink:href="https://www.cloudflare.com/learning/dns/what-is-dns">What
          Is DNS? | How DNS Works</link></para>
        </listitem>

Goik Martin's avatar
Goik Martin committed
        <listitem>
          <para><link
          xlink:href="http://www.htmlgoodies.com/beyond/webmaster/article.php/3473261/An-Introduction-to-DNS.htm">An
          Introduction to DNS</link></para>
        </listitem>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
        <listitem>
          <para><link xlink:href="http://www.zytrax.com/books/dns">DNS for
          Rocket Scientists</link></para>
        </listitem>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
        <listitem>
          <para><link
          xlink:href="https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-14-04">How
          To Configure BIND as a Private Network DNS Server on
          Ubuntu</link></para>
        </listitem>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
        <listitem>
          <para><link xlink:href="https://bind9.readthedocs.io/en/latest">BIND
          9 Administrator Reference Manual</link></para>
Goik Martin's avatar
Goik Martin committed
        </listitem>
      </itemizedlist>
    </figure>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
    <figure xml:id="sdiDnsQueryCommands">
      <title><xref linkend="glo_DNS"/> query commands</title>
Goik Martin's avatar
Goik Martin committed

      <itemizedlist>
        <listitem>
Goik Martin's avatar
Goik Martin committed
          <para><command
          xlink:href="https://manpages.debian.org/buster/dnsutils/dig.1.en.html">dig</command>
          (<emphasis role="red">d</emphasis>omain <emphasis
          role="red">i</emphasis>nformation <emphasis
          role="red">g</emphasis>roper)</para>
Goik Martin's avatar
Goik Martin committed
        </listitem>

        <listitem>
Goik Martin's avatar
Goik Martin committed
          <para><command
          xlink:href="https://manpages.debian.org/buster/dnsutils/nslookup.1.en.html">nslookup</command></para>
Goik Martin's avatar
Goik Martin committed
        </listitem>
      </itemizedlist>
Goik Martin's avatar
Goik Martin committed
    </figure>

    <figure xml:id="sdiDnsForwardLookup">
      <title><xref linkend="glo_DNS"/> forward lookup</title>

      <screen>&gt; dig <emphasis role="red">learn.mi.hdm-stuttgart.de</emphasis>

; &lt;&lt;&gt;&gt; DiG 9.16.1-Ubuntu &lt;&lt;&gt;&gt; learn.mi.hdm-stuttgart.de
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 63891
...
;; ANSWER SECTION:
learn.mi.hdm-stuttgart.de. 6593	IN	A	<emphasis role="red">141.62.64.28</emphasis>

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) ...</screen>
    </figure>

    <figure xml:id="sdiDnsResultOnly">
      <title>Display A-record result only</title>

      <screen>&gt; dig <emphasis role="red">+noall +answer</emphasis> <emphasis>www.hdm-stuttgart.de</emphasis>
www.hdm-stuttgart.de.	3600	IN	A	141.62.1.53
www.hdm-stuttgart.de.	3600	IN	A	141.62.1.59</screen>
    </figure>

    <figure xml:id="sdiDnsImportantRecordTypes">
      <title>Important record types</title>

      <informaltable border="1">
        <tr>
          <th>Record</th>

          <th>Explanation</th>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/a-records">A</link></td>

          <td valign="top">IPV4 Host address</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/aaaa-records">AAAA</link></td>

          <td valign="top">IPv6 host address</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/alias-records">ALIAS</link></td>

          <td valign="top">Auto resolved alias</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/cname-records">CNAME</link></td>

          <td valign="top">Canonical name for an alias</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/mx-records">MX</link></td>

          <td valign="top">Mail eXchange</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/ns-records">NS</link></td>

          <td valign="top">Name Server</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/ptr-records">PTR</link></td>

          <td valign="top">Pointer</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/soa-records">SOA</link></td>

          <td valign="top">Start Of Authority</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/srv-records">SRV</link></td>

          <td valign="top">location of service</td>
        </tr>

        <tr>
          <td valign="top"><link
          xlink:href="https://simpledns.plus/help/txt-records">TXT</link></td>

          <td valign="top">Descriptive text</td>
        </tr>
      </informaltable>
    </figure>

    <figure xml:id="sdiDnsQueryNs">
      <title>Name Servers: Query type <code>NS</code></title>

      <screen>dig +noall +answer <emphasis role="red">-t NS</emphasis> hdm-stuttgart.de
hdm-stuttgart.de.	3600	IN	NS	iz-net-4.hdm-stuttgart.de.
hdm-stuttgart.de.	3600	IN	NS	dns3.belwue.de.
hdm-stuttgart.de.	3600	IN	NS	iz-net-3.hdm-stuttgart.de.
hdm-stuttgart.de.	3600	IN	NS	dns1.belwue.de.
hdm-stuttgart.de.	3600	IN	NS	iz-net-2.hdm-stuttgart.de.</screen>
    </figure>
  </section>

  <section xml:id="sdiDnsExercises">
    <title>Exercises</title>

    <section xml:id="sdiDnsUseDig">
      <title>Querying <xref linkend="glo_DNS"/> data.</title>

      <para>Use the <command>dig</command> command to query <code>A</code> /
      <code>CNAME</code> / <code>MX</code> / <code>NS</code> records from
      various machines / domains of your choice. Then execute reverse lookups
      as well.</para>
    </section>

    <section xml:id="sdiBindInstall">
      <title>Installing <xref linkend="glo_Soft_Bind"/></title>

Goik Martin's avatar
Goik Martin committed
      <para>You may follow:</para>

      <itemizedlist>
        <listitem>
          <para><link
          xlink:href="https://www.linuxbabe.com/debian/authoritative-dns-server-debian-10-buster-bind9">Set
          Up BIND Authoritative DNS Server on Debian</link></para>
        </listitem>

        <listitem>
          <para><link
          xlink:href="https://cloudinfrastructureservices.co.uk/how-to-install-bind-dns-on-debian-11-server-setup-configure">How
          to Install Bind DNS on Debian 11 Server</link></para>
        </listitem>

        <listitem>
          <para><link
          xlink:href="https://www.zytrax.com/books/dns/ch8/soa.html">Start of
          Authority Resource Record</link></para>
        </listitem>
      </itemizedlist>

Goik Martin's avatar
Goik Martin committed
      <para>Install the <productname>bind9</productname> server package on
      your <quote>a</quote> virtual machine. The MI department has already set
      up a <xref linkend="glo_DNS"/> service for
      <code>mi.hdm-stuttgart.de</code>. But regarding upcoming exercises we
Goik Martin's avatar
Goik Martin committed
      want to be able configuring private host aliases.</para>
Goik Martin's avatar
Goik Martin committed

      <para>Consider the example virtual machine
Goik Martin's avatar
Goik Martin committed
      <code>sdi04a.mi.hdm-stuttgart.de / 141.62.75.104</code> hosting a <xref
      linkend="glo_DNS"/> server. Create a complete new zone describing a
      domain sdi4<code>.mi.hdm-stuttgart.de</code> containing both your
Goik Martin's avatar
Goik Martin committed
      machine's <code>sdi04a.sdi4.mi.hdm-stuttgart.de</code> and
      <code>sdi04b.sdi4.mi.hdm-stuttgart.de</code> address records. Your <xref
Goik Martin's avatar
Goik Martin committed
      linkend="glo_DNS"/> server should provide at least the following
Goik Martin's avatar
Goik Martin committed
      data:</para>

      <glosslist>
        <glossentry>
Goik Martin's avatar
Goik Martin committed
          <glossterm>Your sdi4.mi.hdm-stuttgart.de domain's primary
          nameserver</glossterm>
Goik Martin's avatar
Goik Martin committed

          <glossdef>
            <para>Primary name server for domain
Goik Martin's avatar
Goik Martin committed
            <code>sdi4.mi.hdm-stuttgart.de</code>.</para>
Goik Martin's avatar
Goik Martin committed
          </glossdef>
        </glossentry>

        <glossentry>
Goik Martin's avatar
Goik Martin committed
          <glossterm>sdi04a.sdi4.mi.hdm-stuttgart.de</glossterm>
Goik Martin's avatar
Goik Martin committed

          <glossdef>
Goik Martin's avatar
Goik Martin committed
            <para>Your first machine's host name.</para>
Goik Martin's avatar
Goik Martin committed
          </glossdef>
        </glossentry>

        <glossentry>
Goik Martin's avatar
Goik Martin committed
          <glossterm>sdi04b.sdi4.mi.hdm-stuttgart.de</glossterm>

          <glossdef>
Goik Martin's avatar
Goik Martin committed
            <para>Your second machine's host name.</para>
Goik Martin's avatar
Goik Martin committed
          </glossdef>
        </glossentry>

        <glossentry>
          <glossterm>www4.sdi4.mi.hdm-stuttgart.de and
Goik Martin's avatar
Goik Martin committed
          www4-2.sdi4.mi.hdm-stuttgart.de</glossterm>
Goik Martin's avatar
Goik Martin committed

          <glossdef>
Goik Martin's avatar
Goik Martin committed
            <para>An (<code>CNAME</code>) alias to
            sdi04a.sdi4.mi.hdm-stuttgart.de.</para>
Goik Martin's avatar
Goik Martin committed
          </glossdef>
        </glossentry>
      </glosslist>

Goik Martin's avatar
Goik Martin committed
      <para>All host names (albeit not yet existing) should point to your
      virtual machine's IP. This requires setting up a forward zone
      file.</para>
Goik Martin's avatar
Goik Martin committed

      <tip>
        <orderedlist>
          <listitem>
            <para>The <command>named-checkzone</command> command helps you to
            check for your two zone files' correctness</para>
          </listitem>

          <listitem>
            <para>The <command>named-checkconf</command> command checks for
            your configuration's overall correctness.</para>
          </listitem>

          <listitem>
            <para>You may use the <command>nslookup</command> command to query
            your <xref linkend="glo_DNS"/> server. The <option>set
            type=ns</option> option allows to query for the domain's primary
            name server.</para>
          </listitem>
        </orderedlist>
      </tip>
Goik Martin's avatar
Goik Martin committed

      <itemizedlist>
        <listitem>
          <para><code>ns</code> (Nameserver)</para>
        </listitem>

        <listitem>
Goik Martin's avatar
Goik Martin committed
          <para><code>www</code>4 (Future webserver, see <xref
Goik Martin's avatar
Goik Martin committed
          linkend="sdiApache"/>).</para>
        </listitem>
      </itemizedlist>

      <para>Test your configuration using <code>dig</code> <option>@&lt;your
      host-IP&gt;</option> <option>...</option> . You should be able to
Goik Martin's avatar
Goik Martin committed
      resolve e.g. <code>www4.sdi4.mi.hdm-stuttgart.de</code> to your local
      host's IP address.</para>
Goik Martin's avatar
Goik Martin committed
    </section>

    <section xml:id="sdiDnsReverse">
      <title>Reverse lookups</title>

      <para>Define a reverse zone file to answer queries asking for an IP
      address' machine name <abbrev>i.e.</abbrev> resolving
      <code>141.62.75.104</code> to
Goik Martin's avatar
Goik Martin committed
      <code>sdi04a.mi.hdm-stuttgart.de</code>.</para>
Goik Martin's avatar
Goik Martin committed
    </section>

    <section xml:id="sdiDnsForwarder">
      <title>Forwarders</title>

Goik Martin's avatar
Goik Martin committed
      <para>Enable recursive queries to parent name servers enabling your name
      server to resolve external machines like <code>www.w3.org</code> by
Goik Martin's avatar
Goik Martin committed
      delegation.</para>
Goik Martin's avatar
Goik Martin committed

      <tip>
        <para>You may have to disable <code>DNSSEC</code> in order to allow
        for recursive queries.</para>
      </tip>
    </section>

    <section xml:id="sdiBindMx">
      <title>Mail exchange record</title>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
      <para>Provide a mail exchange record pointing to mx1.hdm-stuttgart.de.
Goik Martin's avatar
Goik Martin committed
      Test this configuration using dig accordingly.</para>
Goik Martin's avatar
Goik Martin committed

Goik Martin's avatar
Goik Martin committed
      <para>Caveat: Configuring a client machine using your name server and
Goik Martin's avatar
Goik Martin committed
      sending a mail to <code>xy123@sdi04.mi.hdm-stuttgart.de</code> won't
      work since <code>mail.hdm-stuttgart.de</code> will reject mails being
      sent to any domain other than <code>hdm-stuttgart.de</code>.</para>
Goik Martin's avatar
Goik Martin committed
    </section>
Goik Martin's avatar
Goik Martin committed

    <section xml:id="sdiDnsProjectNameServer">
      <title>SDI exercises related <xref linkend="glo_DNS"/> server</title>

      <para>This section explains how to define two publicly visible <xref
      linkend="glo_DNS"/> A records to your VMs. The objective is defining two
      <code>A</code> records <code>sdi1</code> and <code>sdi2</code> within
      your respective <xref linkend="glo_DNS"/> domain.</para>

      <para>With respect to upcoming <link
      xlink:href="sdiApacheVirtualHosts">virtual host exercises</link> the MI
      department provides a public <xref linkend="glo_DNS"/> integrated <xref
      linkend="glo_Soft_Bind"/> based server
      <code>nssdi.mi.hdm-stuttgart.de</code> allowing for <xref
      linkend="glo_CLI"/> updates. This works as follows:</para>

      <itemizedlist>
        <listitem>
          <para>Each working group being registered below <link
          xlink:href="https://learn.mi.hdm-stuttgart.de/ilias/goto.php?target=crs_12398&amp;client_id=iliasclient1">113475
          Software defined Infrastructure</link> has access to a respective
          zone file defining a subdomain of
          <code>sdi.mi.hdm-stuttgart.de</code>.</para>
Goik Martin's avatar
Goik Martin committed

          <itemizedlist>
            <listitem>
              <para>Assuming you belong to <emphasis role="red">group
              3</emphasis> your corresponding subdomain is <emphasis
              role="red"><code>g3</code></emphasis>.<code>sdi.mi.hdm-stuttgart.de</code>.</para>
            </listitem>

            <listitem>
              <para>You'll find a <filename>dnsupdate.sec</filename> file
              containing the secret for authorizing your individual zone's
              management:</para>

              <screen>hmac-sha256:mykey.<emphasis role="red">g3</emphasis>:I5sDDS3L1BUHNGWU2n7LEmkWJfNq/giDuXb1u076VjQ=</screen>

              <note>
                <para>The per zone secrets are being created using <link
                xlink:href="https://manpages.ubuntu.com/manpages/jammy/man8/ddns-confgen.8.html">tsig-keygen</link>.
                The value appearing here does not reflect a production
                setting.</para>
              </note>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para><link
          xlink:href="https://linux.die.net/man/8/nsupdate">nsupdate</link>
          allows for zone management as being explained below.</para>
        </listitem>
      </itemizedlist>

      <para>Adding an <code>A</code> record for <acronym>e.g.</acronym> your
      second <code>sdi2</code> VM requires:</para>

      <programlisting language="bash">HMAC=hmac-sha256:mykey.<emphasis
          role="red">g3</emphasis>:I5sDDS3L1BUHNGWU2n7LEmkWJfNq/giDuXb1u076VjQ=

goik&gt;nsupdate -y $HMAC
&gt; server nssdi.mi.hdm-stuttgart.de
&gt; update add sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de 86400 A 172.16.1.1
&gt; send
&gt; quit
goik&gt;dig +noall +answer @nssdi.mi.hdm-stuttgart.de sdi2.<emphasis
          role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de
sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de. 86400	IN A	172.16.1.1</programlisting>

      <para>This entry will be globally visible:</para>

      <programlisting language="none">goik&gt;dig +noall +answer  sdi2.<emphasis
          role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de
sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de. 7069 IN A	172.16.1.1</programlisting>

      <para>You should now be able to use your VMs <xref linkend="glo_DNS"/>
      name rather than its raw IP:</para>
Goik Martin's avatar
Goik Martin committed

      <programlisting language="none">&gt;ssh ...@sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de</programlisting>

      <para>Deleting this <xref linkend="glo_DNS"/> record works
      accordingly:</para>

      <programlisting language="none">goik&gt;nsupdate -y $HMAC
&gt; server nssdi.mi.hdm-stuttgart.de
&gt; 
&gt; update del sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de A
&gt; send
&gt; quit
goik&gt;
goik&gt;dig +noall +answer @nssdi.mi.hdm-stuttgart.de sdi2.<emphasis
          role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de</programlisting>

      <para>Due to caching it'll however take up to you <abbrev>SOA</abbrev>
      or record specific settings for this deletion to be reflected globally.
      The subsequent query result indicates another 7069 seconds to go before
      issuing the next query:</para>

      <programlisting language="none">goik&gt;dig +noall +answer  sdi2.<emphasis
          role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de
sdi2.<emphasis role="red">g3</emphasis>.sdi.mi.hdm-stuttgart.de. 7069 IN A	172.16.1.1</programlisting>
    </section>
Goik Martin's avatar
Goik Martin committed
  </section>
</chapter>