Indeed, our current implementation causes a SPOF.
We use dnsmasq which doesn’t support any kind of lease and DNS replication. People who have such needs for a HA setup will usually want to run their own infrastructure for that.
For example, you could configure the same network on both hosts using LXD and the VXLAN tunnel option. Set both of them with a different IP, say x.x.x.1 for the first host and x.x.x.2 for the second but not enable DHCP or DNS on either of them.
They’re then both able to act as routers and you can now deploy your HA DHCP and DNS services as containers, one of each on each host, having the DHCP announce both gateways. It’s not quite as good as having a VIP for the gateway, but should be somewhat close.
Obviously the even more HA method would be to have an external HA router connected to the VXLAN you’re using for your containers. Modern L3 switches do tend to support VXLAN natively and so can do that for you. You’d obviously need an HA chassis for that.