Kea DHCP: Difference between revisions

From Dave-Wiki
Jump to navigation Jump to search
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Links=
==Control==
 
===Get DHCP4 Server Status===
 
  keactrl status -s dhcp4
 
===Reload DHCP4 Server===
 
You'll want to do this after making changes to the kea-dhcp4.conf file.


;ISC-Kea: https://kea.readthedocs.io/en/latest/arm/config.html
  keactrl reload -s dhcp4
;Stork: https://stork.readthedocs.io/en/v1.8.0/
: https://gitlab.isc.org/isc-projects/stork/-/wikis/Screenshots


=Leases=
==Leases==


Leases are stored in memfile, by default. But you can also have them written to a CSV file:
Leases are stored in memfile, by default. But you can also have them written to a CSV file:
Line 17: Line 23:
   },
   },


=MySQL Integration=
==MySQL==


To use host reservations from MySQL, you need to add the "hosts-database" section to the "Dhcp4" section of the config file. Subnet-Ids need to be defined in your subnet declarations, too.
To use host reservations from MySQL, you need to add the <code>"hosts-database"</code> section to the <code>"Dhcp4"</code> section of the config file, like this:


==IPv4 Reservations - Insert Statement==
  "hosts-database": {
      "type": "mysql",
      "name": "kea_db",
      "user": "kea-user",
      "password": "super-secret-password",
      "host": "localhost",
      "port": 3306
  },
 
Subnet-Ids need to be defined in your subnet declarations, too.
 
You can use both the hosts database and the configuration file for host reservations at the same time.
 
===IPv4 Reservations===
 
Insert Statement Example:


   SELECT host_id,dhcp_identifier,dhcp4_subnet_id,ipv4_address,hostname FROM hosts;
   SELECT host_id,dhcp_identifier,dhcp4_subnet_id,ipv4_address,hostname FROM hosts;
Line 45: Line 66:
   COMMIT;
   COMMIT;


==MySQL Performance Tuning==
===Sync db Between Two Hosts===
 
====Manual Dump of Host Reservations====
 
  mysqldump kea_db -u kea-user -p --tables hosts > kea-hosts.sql
 
====Crontab for use on Standby peers====
 
  */5 * * * * mysqldump -h net1.lambnet.us -u net2 -p<password> --single-transaction kea_db hosts | mysql -u net2 -p<password> kea_db
 
...
 
===MySQL Performance Tuning===


Configure in <code>/etc/mysql/my.cnf</code>:
Configure in <code>/etc/mysql/my.cnf</code>:
Line 52: Line 85:
  innodb_flush_log_at_trx_commit=2
  innodb_flush_log_at_trx_commit=2


===SystemD Tip===


=Control-Agent Commands=
You may encounter an issue where kea-dhcp4 fails to start at boot. Try adding this to <code>/usr/lib/systemd/system/kea-dhcp4.service</code>, at the end of the <code>[Unit]</code> section:


  After=mysqld.service
==Kea-Shell==
===Commands===
[ { "arguments": [ "build-report", "config-backend-pull", "config-get", "config-reload", "config-set", "config-test", "config-write", "dhcp-disable", "dhcp-enable", "ha-continue", "ha-heartbeat", "ha-maintenance-cancel", "ha-maintenance-notify", "ha-maintenance-start", "ha-reset", "ha-scopes", "ha-sync", "ha-sync-complete-notify", "lease4-add", "lease4-del", "lease4-get", "lease4-get-all", "lease4-get-by-client-id", "lease4-get-by-hostname", "lease4-get-by-hw-address", "lease4-get-page", "lease4-resend-ddns", "lease4-update", "lease4-wipe", "lease6-add", "lease6-bulk-apply", "lease6-del", "lease6-get", "lease6-get-all", "lease6-get-by-duid", "lease6-get-by-hostname", "lease6-get-page", "lease6-resend-ddns", "lease6-update", "lease6-wipe", "leases-reclaim", "libreload", "list-commands", "server-tag-get", "shutdown", "statistic-get", "statistic-get-all", "statistic-remove", "statistic-remove-all", "statistic-reset", "statistic-reset-all", "statistic-sample-age-set", "statistic-sample-age-set-all", "statistic-sample-count-set", "statistic-sample-count-set-all", "status-get", "version-get" ], "result": 0 } ]
[ { "arguments": [ "build-report", "config-backend-pull", "config-get", "config-reload", "config-set", "config-test", "config-write", "dhcp-disable", "dhcp-enable", "ha-continue", "ha-heartbeat", "ha-maintenance-cancel", "ha-maintenance-notify", "ha-maintenance-start", "ha-reset", "ha-scopes", "ha-sync", "ha-sync-complete-notify", "lease4-add", "lease4-del", "lease4-get", "lease4-get-all", "lease4-get-by-client-id", "lease4-get-by-hostname", "lease4-get-by-hw-address", "lease4-get-page", "lease4-resend-ddns", "lease4-update", "lease4-wipe", "lease6-add", "lease6-bulk-apply", "lease6-del", "lease6-get", "lease6-get-all", "lease6-get-by-duid", "lease6-get-by-hostname", "lease6-get-page", "lease6-resend-ddns", "lease6-update", "lease6-wipe", "leases-reclaim", "libreload", "list-commands", "server-tag-get", "shutdown", "statistic-get", "statistic-get-all", "statistic-remove", "statistic-remove-all", "statistic-reset", "statistic-reset-all", "statistic-sample-age-set", "statistic-sample-age-set-all", "statistic-sample-count-set", "statistic-sample-count-set-all", "status-get", "version-get" ], "result": 0 } ]
====Get Status====
  kea-shell --host 10.144.30.8 --service dhcp4 status-get
=Links=
;ISC-Kea: https://kea.readthedocs.io/en/latest/arm/config.html
;Stork: https://stork.readthedocs.io/en/v1.8.0/
: https://gitlab.isc.org/isc-projects/stork/-/wikis/Screenshots

Latest revision as of 00:12, 20 July 2024

Control

Get DHCP4 Server Status

 keactrl status -s dhcp4

Reload DHCP4 Server

You'll want to do this after making changes to the kea-dhcp4.conf file.

 keactrl reload -s dhcp4

Leases

Leases are stored in memfile, by default. But you can also have them written to a CSV file:

 "lease-database": {
     "type": "memfile", // write leases to memfile...
     "persist": true,
     "name": "/tmp/kea-leases4.csv", // ...but also write them to csv
     "lfc-interval": 3600,
     "max-row-errors": 100
 },

MySQL

To use host reservations from MySQL, you need to add the "hosts-database" section to the "Dhcp4" section of the config file, like this:

 "hosts-database": {
     "type": "mysql",
     "name": "kea_db",
     "user": "kea-user",
     "password": "super-secret-password",
     "host": "localhost",
     "port": 3306
 },

Subnet-Ids need to be defined in your subnet declarations, too.

You can use both the hosts database and the configuration file for host reservations at the same time.

IPv4 Reservations

Insert Statement Example:

 SELECT host_id,dhcp_identifier,dhcp4_subnet_id,ipv4_address,hostname FROM hosts;
 
 START TRANSACTION;
 SET @ipv4_reservation='10.1.70.11';
 SET @hostname = 'windows-pc';
 SET @identifier_type='hw-address';
 SET @identifier_value='be:ef:be:ef:be:ef';
 SET @dhcp4_subnet_id=70;
 
 INSERT INTO hosts (dhcp_identifier,
                    dhcp_identifier_type,
                    dhcp4_subnet_id,
                    ipv4_address,
                    hostname)
 VALUES (UNHEX(REPLACE(@identifier_value, ':', )),
 	(SELECT type FROM host_identifier_type WHERE name=@identifier_type),
         @dhcp4_subnet_id,
         INET_ATON(@ipv4_reservation),
         @hostname);
 
 COMMIT;

Sync db Between Two Hosts

Manual Dump of Host Reservations

 mysqldump kea_db -u kea-user -p --tables hosts > kea-hosts.sql

Crontab for use on Standby peers

 */5 * * * * mysqldump -h net1.lambnet.us -u net2 -p<password> --single-transaction kea_db hosts | mysql -u net2 -p<password> kea_db

...

MySQL Performance Tuning

Configure in /etc/mysql/my.cnf:

[mysqld]
innodb_flush_log_at_trx_commit=2

SystemD Tip

You may encounter an issue where kea-dhcp4 fails to start at boot. Try adding this to /usr/lib/systemd/system/kea-dhcp4.service, at the end of the [Unit] section:

 After=mysqld.service

Kea-Shell

Commands

[ { "arguments": [ "build-report", "config-backend-pull", "config-get", "config-reload", "config-set", "config-test", "config-write", "dhcp-disable", "dhcp-enable", "ha-continue", "ha-heartbeat", "ha-maintenance-cancel", "ha-maintenance-notify", "ha-maintenance-start", "ha-reset", "ha-scopes", "ha-sync", "ha-sync-complete-notify", "lease4-add", "lease4-del", "lease4-get", "lease4-get-all", "lease4-get-by-client-id", "lease4-get-by-hostname", "lease4-get-by-hw-address", "lease4-get-page", "lease4-resend-ddns", "lease4-update", "lease4-wipe", "lease6-add", "lease6-bulk-apply", "lease6-del", "lease6-get", "lease6-get-all", "lease6-get-by-duid", "lease6-get-by-hostname", "lease6-get-page", "lease6-resend-ddns", "lease6-update", "lease6-wipe", "leases-reclaim", "libreload", "list-commands", "server-tag-get", "shutdown", "statistic-get", "statistic-get-all", "statistic-remove", "statistic-remove-all", "statistic-reset", "statistic-reset-all", "statistic-sample-age-set", "statistic-sample-age-set-all", "statistic-sample-count-set", "statistic-sample-count-set-all", "status-get", "version-get" ], "result": 0 } ]

Get Status

 kea-shell --host 10.144.30.8 --service dhcp4 status-get

Links

ISC-Kea
https://kea.readthedocs.io/en/latest/arm/config.html
Stork
https://stork.readthedocs.io/en/v1.8.0/
https://gitlab.isc.org/isc-projects/stork/-/wikis/Screenshots