Parcourir la source

[3747] Updated User Guide with the match-client-id config examples.

Marcin Siodelski il y a 10 ans
Parent
commit
fa00f7c6fd
1 fichiers modifiés avec 165 ajouts et 0 suppressions
  1. 165 0
      doc/guide/dhcp4-srv.xml

+ 165 - 0
doc/guide/dhcp4-srv.xml

@@ -1950,6 +1950,171 @@ temporarily override a list of interface names and listen on all interfaces.
 </screen>
     </section>
 
+    <section id="dhcp4-match-client-id">
+      <title>Using Client Identifier and Hardware Address</title>
+      <para>DHCP server must be able to identify the client (distinguish it from
+      other clients) from which it receives the message. There are many reasons
+      why this identification is required and the most important ones are listed
+      below.
+      <itemizedlist>
+        <listitem><simpara>When the client contacts the server to allocate a new
+        lease, the server must store the client identification information in
+        the lease database as a search key.</simpara></listitem>
+        <listitem><simpara>When the client is trying to renew or release the existing
+        lease, the server must be able to find the existing lease entry in the
+        database for this client, using the client identification information as a
+        search key.</simpara></listitem>
+        <listitem><simpara>Some configurations use static reservations for the IP
+        addreses and other configuration information. The server's administrator
+        uses client identification information to create these static assignments.
+        </simpara></listitem>
+        <listitem><simpara>In the dual stack networks there is often a need to
+        correlate the lease information stored in DHCPv4 and DHCPv6 server for
+        a particular host. Using common identification information by the DHCPv4
+        and DHCPv6 client allows the network administrator to achieve this
+        correlation and better administer the network.</simpara></listitem>
+      </itemizedlist>
+      </para>
+
+      <para>The DHCPv4 makes use of two distinct identifiers which are placed
+      by the client in the queries sent to the server and copied by the server
+      to its responses to the client: 'chaddr' and 'client identifier'. The
+      former was introduced as a part of the BOOTP specification and it is also
+      used by DHCP to carry the hardware address of the interface used to send
+      the query to the server (MAC address for the Ethernet). The latter is
+      carried in the Client-identifier option, introduced in the
+      <ulink url="http://tools.ietf.org/html/rfc2132">RFC 2132</ulink>.
+      </para>
+
+      <para>The <ulink url="http://tools.ietf.org/html/rfc2131">RFC 2131</ulink>
+      indicates that the server may use both of these identifiers to identify
+      the client but the 'client identifier', if present, takes precedence
+      over 'chaddr'. One of the reasons for this is that 'client identifier'
+      is independent from the hardware used by the client to communicate with
+      the server. For example, if the client obtained the lease using one
+      network card and then the network card is moved to another host, the
+      server will wrongly identify this host is the one which has obtained
+      the lease. Moreover, the
+      <ulink url="https://tools.ietf.org/html/rfc4361">RFC 4361</ulink> gives
+      the recommendation to use DUID
+      (see <ulink url="https://tools.ietf.org/html/rfc3315">DHCPv6 specification</ulink>)
+      carried as 'client identifier' when dual stack networks are in use,
+      to provide consistent identification information of the client, regardless
+      of the protocol type it is using. Kea adheres to these specifications and
+      the 'client identifier' by default takes precedence over the value carried
+      in 'chaddr' field when the server searches, creates, updates or removes
+      the client's lease.
+      </para>
+
+      <para>When the server receives DHCPDISCOVER or DHCPREQUEST message from the
+      client, it will try to find out if the client already has a lease in the
+      database and will hand out the existing lease rather than allocate
+      a new one. Each lease in the lease database is associated with the
+      'client identifier' and/or 'chaddr'. The server will first use the
+      'client identifer' (if present) to search the lease. If the lease is
+      found, the server will consider that this lease belongs to this client,
+      regardless if the current 'chaddr' and the 'chaddr' associated with
+      the lease match. This facilitates the scenario when the network card
+      on the client system has been replaced and thus the new MAC address
+      appears in the messages sent by the DHCP client. If the server fails
+      to find the lease using the 'client identifier' it will use the 'chaddr'
+      and will perform another lookup. If this lookup returns no result, the
+      client is considered to not have a lease and the new lease will
+      be created.
+      </para>
+
+      <para>A common problem reported by the network operators is that bogus
+      client implementations do not use stable client identifiers, e.g.
+      new 'client identifier' is generated every time when the client connects
+      to the network. Another well known case is when the client changes its
+      'client identifier' during the multi-stage boot process (PXE). In those
+      cases, the MAC address of the client's interface remains stable and
+      using 'chaddr' field to identify the client guarantees that the
+      particular system is considered to be the same client, even though its
+      'client identifier' gets changed.
+      </para>
+
+      <para>To address this problem Kea includes a configuration option
+      which enables client identification using 'chaddr' and causes the
+      server to "ignore" the 'client identifier' during the lease lookup
+      and allocation for a particular subnet. Consider the following
+      simplified server configuration:</para>
+<screen>
+"Dhcp4": {
+    ...
+    <userinput>"match-client-id": true,</userinput>
+    ...
+    "subnet4": [
+    {
+        "subnet": "192.0.10.0/24",
+        "pools": [ { "pool": "192.0.2.23-192.0.2.87" } ],
+        <userinput>"match-client-id": false</userinput>
+    },
+    {
+        "subnet": "10.0.0.0/8",
+        "pools": [ { "pool": "10.0.0.23-10.0.2.99" } ],
+    }
+    ]
+}
+</screen>
+
+     <para>The <command>match-client-id</command> is a boolean value which
+     controls this behavior. The default value of <userinput>true</userinput>
+     indicates that the server will use the 'client identifier' for lease
+     lookups and 'chaddr' if the first lookup returns no results. The
+     <command>false</command> means that the server will only
+     use the 'chaddr' to search for client's lease. Whether the DHCID for
+     DNS updates is generated from the 'client identifier' or 'chaddr' is
+     controlled through the same parameter accordingly.</para>
+
+     <para>The <command>match-client-id</command> parameter may appear
+     both in the global configuration scope and/or under any subnet
+     declaration. In the example shown above, the effective value of the
+     <command>match-client-id</command> will be <userinput>false</userinput>
+     for the subnet 192.0.10.0/24, because the subnet specific setting
+     of the parameter overrides the global value of the parameter. The
+     effective value of the <command>match-client-id</command> for the subnet
+     10.0.0.0/8 will be set to <userinput>true</userinput> because the
+     subnet declaration lacks this parameter and the global setting is
+     by default used for this subnet. In fact, the global entry for this
+     parameter could be omitted in this case, because
+     <userinput>true</userinput> is the default value.
+     </para>
+
+     <para>It is important to explain what happens when the client obtains
+     its lease for one setting of the <command>match-client-id</command>
+     and then renews when the setting has been changed. Let's first consider
+     the case when the client obtains the lease when the
+     <command>match-client-id</command> is set to <userinput>true</userinput>.
+     The server will store the lease information including 'client identifier'
+     (if supplied) and 'chaddr' in the lease database. When the setting is
+     changed and the client renews the lease the server will determine that
+     it should use the 'chaddr' to search for the existing lease. If the
+     clien't hasn't changed its MAC address the server should successfully
+     find the existing lease. The 'client identifier' associated with the
+     returned lease is ignored and the client is allowed to use this lease.
+     When the lease is renewed only the 'chaddr' is recorded for this
+     lease according to the new server setting.
+     </para>
+
+     <para>In the second case the client has the lease with only a 'chaddr'
+     value recorded. When the setting is changed to
+     <command>match-client-id</command> set to <userinput>true</userinput>
+     the server will first try to use the 'client identifier' to find the
+     existing client's lease. This will return no results because the
+     'client identifier' was not recorded for this lease. The server will
+     then use the 'chaddr' and the lease will be successfully found. If the
+     lease appears to have no 'client identifier' recorded, the server will
+     assume that this lease belongs to the client and that it was created
+     with the previous setting of the <command>match-client-id</command>.
+     However, if the lease contains 'client identifier' which is different
+     from the 'client identifier' used by the client the lease will be
+     assumed to belong to another client and the new lease will be
+     allocated.
+     </para>
+
+    </section>
+
   </section> <!-- end of configuring kea-dhcp4 server section with many subsections -->
 
   <!-- Host reservation is a large topic. There will be many subsections,