# # {{ ansible_managed }} # # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. authoritative; # The style parameter must be one of ad-hoc, interim or none. The # ddns-update-style statement is only meaningful in the outer scope - it # is evaluated once after reading the dhcpd.conf file, rather than each # time a client is assigned an IP address, so there is no way to use # different DNS update styles for different clients. The default is # nonrent DNS update styles for different clients. The default is none. ddns-update-style interim; # The first point to understand about this style of DNS update is that # unlike the ad-hoc style, the DHCP server does not necessarily always # update both the A and the PTR records. The FQDN option includes a flag # which, when sent by the client, indicates that the client wishes to # update its own A record. In that case, the server can be configured # either to honor the client’s intentions or ignore them. This is # done with the statement allow client-updates; or the statement ignore # client-updates;. By default, client updates are allowed. ignore client-updates; {% for key in dhcpd_tsigkeys %} key "{{ key.name }}" { algorithm {{ key.algorithm }}; secret "{{ key.secret }}"; } {% endfor %} {% for zone in dhcpd_zones %} zone {{ zone.name }} { primary {{ zone.primary }}; key "{{ zone.key }}"; } {% endfor %} {% for subnet in dhcpd_subnets %} subnet {{ subnet.network_start }} netmask {{ subnet.network_netmask }} { interface {{ subnet.interface }}; range {{ subnet.network_range }}; # Time should be the length in seconds that will be assigned to a # lease if the client requesting the lease does not ask for a specific # expiration time. This is used for both DHCPv4 and DHCPv6 leases (it # is also known as the "valid lifetime" in DHCPv6). default-lease-time {{ subnet.default_lease_time }}; # Time should be the maximum length in seconds that will be assigned # to a lease. If not defined, the default maximum lease time is 86400. # The only exception to this is that Dynamic BOOTP lease lengths, # which are not specified by the client, are not limited by this # maximum. max-lease-time {{ subnet.max_lease_time }}; # Time should be the minimum length in seconds that will be assigned # to a lease. The default is the minimum of 300 seconds or # max-lease-time. min-lease-time {{ subnet.min_lease_time }}; # The name parameter should be the domain name that will be appended # to the client's hostname to form a fully-qualified domain-name # (FQDN). ddns-domainname "{{ subnet.ddns_domainname }}"; # The update-static-leases flag, if enabled, causes the DHCP server to # do DNS updates for clients even if those clients are being assigned # their IP address using a fixed-address statement - that is, the # client is being given a static assignment. This can only work with # the interim DNS update scheme. It is not recommended because the # DHCP server has no way to tell that the update has been done, and # therefore will not delete the record when it is not in use. Also, # the server must attempt the update each time the client renews its # lease, which could have a significant performance impact in # environments that place heavy demands on the DHCP server. update-static-leases on; option broadcast-address {{ subnet.option_broadcast_address }}; # option domain-name "{{ subnet.option_domain_name }}"; option domain-name-servers {{ subnet.option_domain_name_servers }}; option routers {{ subnet.option_routers }}; option subnet-mask {{ subnet.option_subnet_mask }}; # PXE-Boot-Settings # allow booting; # allow bootp; # next-server 192.168.179.15; # filename "pxelinux.0"; } {% endfor %} {% if dhcpd_static_hosts is defined and dhcpd_static_hosts | length > 0 %} {% for host in dhcpd_static_hosts %} host {{ host.name }} { {% if host.ddns_hostname is defined %} ddns-hostname {{ host.ddns_hostname }}; {% endif %} {% if host.fixed_address is defined %} fixed-address {{ host.fixed_address }}; {% endif %} hardware ethernet {{ host.hardware_ethernet }}; } {% endfor %} {% endif %}