[kea-dev] More Kea/OpenWRT integration

Philip Prindeville philipp_subx at redfish-solutions.com
Thu Jan 29 19:35:17 UTC 2026


Hi,

On OpenWRT we support a host having multiple MAC addresses for the same IP, to allow people to have laptops with docking stations and WiFi and to roam without losing connectivity.

On my Mac mini (not exactly roamable) I'm seeing the following logging:

Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:02.143 INFO  [kea-dhcp4.dhcp4/32099.140385214077752] DHCP4_QUERY_LABEL received query: [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:02.144 INFO  [kea-dhcp4.packets/32099.140385214077752] DHCP4_PACKET_RECEIVED [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: DHCPDISCOVER (type 1) received from 0.0.0.0 to 255.255.255.255 on interface eth1
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:02.145 WARN  [kea-dhcp4.alloc-engine/32099.140385214077752] ALLOC_ENGINE_V4_DISCOVER_ADDRESS_CONFLICT [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: conflicting reservation for address 192.168.3.5 with existing lease Address:       192.168.3.5
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Valid life:    43200
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Cltt:          1769709549
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Hardware addr: 5c:e9:1e:e5:cf:fe
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Client id:     01:5c:e9:1e:e5:cf:fe
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Subnet ID:     1
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Pool ID:       0
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: State:         default
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Relay ID:      (none)
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: Remote ID:     (none)
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:02.146 INFO  [kea-dhcp4.leases/32099.140385214077752] DHCP4_LEASE_OFFER [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: lease 192.168.3.32 will be offered
Jan 29 11:35:02 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:02.150 INFO  [kea-dhcp4.packets/32099.140385214077752] DHCP4_PACKET_SEND [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: trying to send packet DHCPOFFER (type 2) from 192.168.3.1:67 to 192.168.3.32:68 on interface eth1
Jan 29 11:35:03 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:03.157 INFO  [kea-dhcp4.dhcp4/32099.140385213934392] DHCP4_QUERY_LABEL received query: [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83
Jan 29 11:35:03 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:03.158 INFO  [kea-dhcp4.packets/32099.140385213934392] DHCP4_PACKET_RECEIVED [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: DHCPREQUEST (type 3) received from 0.0.0.0 to 255.255.255.255 on interface eth1
Jan 29 11:35:03 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:03.159 INFO  [kea-dhcp4.leases/32099.140385213934392] DHCP4_LEASE_ALLOC [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: lease 192.168.3.32 has been allocated for 43200 seconds
Jan 29 11:35:03 OpenWrt2 kea-dhcp4[32099]: 2026-01-29 11:35:03.163 INFO  [kea-dhcp4.packets/32099.140385213934392] DHCP4_PACKET_SEND [hwtype=1 5c:e9:1e:e3:de:58], cid=[01:5c:e9:1e:e3:de:58], tid=0x94514e83: trying to send packet DHCPACK (type 5) from 192.168.3.1:67 to 192.168.3.32:68 on interface eth1


I'm not sure why it's handing out .32 instead of .5.

My config is:

{
  "Dhcp4": {
    "lease-database": {
      "type": "memfile",
      "persist": true,
      "name": "/var/lib/kea/kea-leases4.csv",
      "lfc-interval": 900,
      "max-row-errors": 1
    },
    "interfaces-config": {
      "interfaces": [
        "eth1"
      ],
      "re-detect": false,
      "dhcp-socket-type": "raw",
      "outbound-interface": "same-as-inbound"
    },
    "authoritative": true,
    "ip-reservations-unique": false,
    "ddns-qualifying-suffix": "redfish-solutions.com.",
    "ddns-send-updates": true,
    "valid-lifetime": 3600,
    "max-valid-lifetime": 86400,
    "renew-timer": 1800,
    "option-data": [
      {
        "name": "domain-name",
        "data": "redfish-solutions.com"
      }
    ],
    "subnet4": [
      {
        "id": 1,
        "subnet": "192.168.3.0/24",
        "pools": [
          {
            "pool": "192.168.3.32 - 192.168.3.253"
          }
        ],
        "valid-lifetime": 43200,
        "max-valid-lifetime": 43200,
        "option-data": [
          {
            "name": "subnet-mask",
            "data": "255.255.255.0"
          },
          {
            "name": "broadcast-address",
            "data": "192.168.3.255"
          },
          {
            "name": "routers",
            "data": "192.168.3.1"
          },
          {
            "name": "domain-name-servers",
            "data": "192.168.3.1"
          },
          {
            "name": "domain-search",
            "data": "redfish-solutions.com"
          },
          {
            "name": "ntp-servers",
            "data": "192.168.4.6,192.168.3.1"
          }
        ],
        "reservations": [
...
            "hostname": "macmini2",
            "hw-address": "5c:e9:1e:e3:de:58",
            "ip-address": "192.168.3.5",
            "option-data": [
              {
                "name": "host-name",
                "data": "macmini2"
              }
            ]
          },
          {
            "hostname": "macmini2",
            "hw-address": "5c:e9:1e:e5:cf:fe",
            "ip-address": "192.168.3.5",
            "option-data": [
              {
                "name": "host-name",
                "data": "macmini2"
              }
            ]
          },
...
        ]
      }
    ],
    "host-reservation-identifiers": [
      "hw-address",
      "client-id"
    ],
    "reservations-in-subnet": true
  }
}

(Yes, that's synthesized from UCI by a shell script using an old ISC-DHCP config...)

So what am I missing?  What config is necessary to allow the same lease to go out to TWO different MACs?

In this case, the 192.168.3.5 lease is held by the 2nd MAC address, which is the WiFi of my MacMini.  I'd rather use the Ethernet address because it's a lot faster.

I wanted to also not hand out addresses for unknown MAC's like ISC-DHCP can do, but that's a feature that's not yet release:

https://gitlab.isc.org/isc-projects/kea/-/issues/4110

Thanks,

-Philip



More information about the kea-dev mailing list