<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><div id="bloop_customfont" style="margin:0px">Fair enough! I’ll keep this on the public list so it might help others.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">This morning I tried to create as minimal a lab environment as I could. There’s just the DHCP server and one client, both running CentOS 7.2 with the latest updates. I was able to reproduce the problem. (In fact I was unable not to.)</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">There's a lot of information to share, so I stored most of it in gists. I hope that's okay.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">Here's my kea.conf file:</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px"><a href="https://gist.github.com/jefferyharrell/dcbd9cc40a533bab493ae06ddcbdb1d7">https://gist.github.com/jefferyharrell/dcbd9cc40a533bab493ae06ddcbdb1d7</a></div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">This is the good part:</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">"subnet4":</div><div id="bloop_customfont" style="margin:0px">[</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">    {</div><div id="bloop_customfont" style="margin:0px">        "id": 199,</div><div id="bloop_customfont" style="margin:0px">        "subnet": "<a href="http://10.14.199.0/24">10.14.199.0/24</a>",</div><div id="bloop_customfont" style="margin:0px">        "valid-lifetime": 120,</div><div id="bloop_customfont" style="margin:0px">        "option-data":</div><div id="bloop_customfont" style="margin:0px">        [</div><div id="bloop_customfont" style="margin:0px">            { "name": "routers", "data": "10.14.199.254" }</div><div id="bloop_customfont" style="margin:0px">        ],</div><div id="bloop_customfont" style="margin:0px">        "pools": [</div><div id="bloop_customfont" style="margin:0px">            { "pool": "10.14.199.201 - 10.14.199.249" }</div><div id="bloop_customfont" style="margin:0px">        ]</div><div id="bloop_customfont" style="margin:0px">    }</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">]</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">I tested both with and without the "pools" declaration. With "pools" kea-dhcp4 allocates a lease from the pool. Without "pools", kea-dhcp4 fails to allocate a lease. Also the ludicrously short lease lifetime is a testing parameter; I’ve tried this with longer, more plausible settings and it made no difference.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">Here's the debug log captured during a reboot of the test client.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px"><a href="https://gist.github.com/jefferyharrell/0dc515a2d6a9bf639a5e6f8be03e01eb">https://gist.github.com/jefferyharrell/0dc515a2d6a9bf639a5e6f8be03e01eb</a></div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">This is the good part:</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">2016-07-18 11:03:26.980 DEBUG [kea-dhcp4.hosts/4637] HOSTS_CFG_GET_ALL_IDENTIFIER_COUNT using identifier hwaddr=000C29D4074D, found 0 host(s)</div><div id="bloop_customfont" style="margin:0px">2016-07-18 11:03:26.980 DEBUG [kea-dhcp4.hosts/4637] HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER_NULL host not found using subnet id 199 and identifier hwaddr=000C29D4074D</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">Despite the protestations in the log file, such a host reservation really does exist in the database:</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px"><a href="https://gist.github.com/jefferyharrell/17261c44930d83be858bb712a6b72a03">https://gist.github.com/jefferyharrell/17261c44930d83be858bb712a6b72a03</a></div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">So what it looks like to me (I AM NOT A DHCP EXPERT) is that kea-dhcp4 is simply failing, for one reason or another, to query MySQL for host reservations. This is supported by the fact that during the reboot as logged above, no MySQL queries were executed by the program.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px"><a href="https://gist.github.com/jefferyharrell/388f8cc282c15b41bfea0accbf9c9f21">https://gist.github.com/jefferyharrell/388f8cc282c15b41bfea0accbf9c9f21</a></div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">(Immediately after I quit kea-dhcp4, which is where the close-close-close-quit came from.)</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">I was thinking maybe this is a build-environment bug, maybe I'm linking against a slightly incompatbile version of the MySQL library? But that library has been around for ages largely unchanged, so that seemed unlikely, plus there would've been an error reported somewhere, I can only assume.</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">Any thoughts?</div><div id="bloop_customfont" style="margin:0px"><br></div><div id="bloop_customfont" style="margin:0px">Thanks so much in advance for your help.</div></div> <br> <div id="bloop_sign_1468859082651924992" class="bloop_sign"></div> <br><p class="airmail_on">On July 18, 2016 at 12:30:24 AM, Marcin Siodelski (<a href="mailto:marcin@isc.org">marcin@isc.org</a>) wrote:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>On 17.07.2016 21:24, Jeffery Harrell wrote:
<br>> I feel like I’m doing something stupid, but I’ll ask anyway: Is it
<br>> possible that MySQL host reservations are currently not working in the
<br>> Github master branch?
<br>>
<br>> I discovered what I think may be a very obscure bug in 1.0.0 having to
<br>> do with OFFER replies meant for VMs running on hosts on VLAN trunks (no
<br>> seriously), so I wanted to check the latest version of the project to
<br>> see if it’s already been taken care of. I set up a lab system, cloned
<br>> the repo and made a build with –with-dhcp-mysql. I set up a new database
<br>> with dhcpdb_create.mysql from Github and inserted a host according to
<br>> <a href="https://kea.isc.org/wiki/HostReservationsHowTo">https://kea.isc.org/wiki/HostReservationsHowTo</a>.
<br>>
<br>> This test server will happily serve up pool addresses (and will stash
<br>> the lease info in MySQL, so the database connection is for-sure working)
<br>> but it completely and obstinately ignores the contents of the hosts
<br>> database table. I’ve tried both same-subnet and through-a-relay clients
<br>> and the server claims to be unable to find a host for hardware address
<br>> such-and-whatever.
<br>>
<br>> Here’s the relevant part of my config file:
<br>>
<br>> |"interfaces-config": { "interfaces": [ "eth0" ], "dhcp-socket-type":
<br>> "raw" }, "lease-database": { "type": "mysql", "name": "[REDACTED]",
<br>> "host": "[REDACTED]", "user": "[REDACTED]", "password": "[REDACTED]" },
<br>> "hosts-database": { "type": "mysql", "name": "[REDACTED]", "host":
<br>> "[REDACTED]", "user": "[REDACTED]", "password": "[REDACTED]" },
<br>> "expired-leases-processing": { "reclaim-timer-wait-time": 10,
<br>> "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600,
<br>> "max-reclaim-leases": 100, "max-reclaim-time": 250,
<br>> "unwarned-reclaim-cycles": 5 }, "option-data": [ { "name":
<br>> "domain-name-servers", "data": "[REDACTED]" }, { "name":
<br>> "domain-search", "data": "[REDACTED]" } ], "valid-lifetime": 3600,
<br>> "subnet4": [ { "id": [REDACTED], "subnet": "[REDACTED]/24",
<br>> "valid-lifetime": 3600, "option-data": [ { "name": "routers", "data":
<br>> "[REDACTED]" } ] } ] |
<br>>
<br>> And here’s the SQL statement I used to insert the host reservation:
<br>>
<br>> |INSERT INTO hosts (dhcp_identifier, dhcp_identifier_type,
<br>> dhcp4_subnet_id, ipv4_address, hostname) VALUES
<br>> (UNHEX(REPLACE('[REDACTED]', ':', '')), (SELECT type FROM
<br>> host_identifier_type WHERE name='hw-address'), [REDACTED],
<br>> INET_ATON('[REDACTED]'), '[REDACTED]'); |
<br>>
<br>> Am I doing something wrong?
<br>>
<br>
<br>I don't see any obvious errors in what you're doing. But, since most of
<br>the values are "redacted" I can't say if there are any typos in the
<br>configuration etc.
<br>
<br>Host reservations in MySQL should work fine on the latest github
<br>version. If the server is unable to find the reservation for a client,
<br>I'd think there is some configuration error. Typically, this might be a
<br>subnet-id mismatch between the configuration and the value stored in the
<br>database, or mismatch in the HW address between the host reservation
<br>entry and the client contacting the server. One more thing is that the
<br>reserved address can be hijacked by another client at the time when the
<br>reservation didn't exist. But, if this is a simple test with only one
<br>client, that's rather unlikely.
<br>
<br>I am willing to assist you in further investigating this issue, but I
<br>don't see much I could do without some additional data. Ideally it would be:
<br>- The contents of the database, e.g. SELECT * FROM hosts;
<br>- The subnet configuration in Kea, including subnet-id
<br>- wireshark capture including the communication of this particular
<br>client with the server.
<br>- Server log on debug level.
<br>
<br>If this is sensitive information you don't want to post to the list,
<br>you're welcome to contact me privately.
<br>
<br>Thanks for trying out Kea!
<br>
<br>Marcin Siodeski
<br>DHCP Software Engineer,
<br>ISC
<br>
<br>
<br>
<br></div></div></span></blockquote></body></html>