Koozali.org: home of the SME Server
Contribs.org Forums => Koozali SME Server 10.x => Topic started by: NTILZA on August 17, 2022, 04:59:04 AM
-
Hello, all.
I was recently forced to transition to a new ISP as my prior ISP was acquired by a national carrier (Rogers).
Rogers DHCP lease is one hour.
Messages log shows the renewal time (roughly half what "ip -4 a s" reports), a ton of ignored DHCPREQUESTs to the IP of the DHCP server, then to 255.255.255.255, and finally a DHCPDISCOVER, DHCPREQUEST (to 255.255.255.255), DHCPOFFER (from the IP of the DHCP server) and finally a DHCPACK. All pretty much by the book.
But the IP must have been released when the handshake starts, as right after that, this happens:
Processing event: ip-change
Along with everything that entails. Every hour. The External IP does not change - I get the same one every time.
I set up a second server to test the behaviour, since I got bit by bug 11930 (https://bugs.koozali.org/show_bug.cgi?id=11930) before the patch came out, and it affected openvpn-bridge as well, which created quite a mess. I wanted to be sure the behaviour could be duplicated.
Normally, I wouldn't be too concerned, as this is "the way" of DHCP (and my :x new ISP), but it seems to disrupt any real-time goings-on (like Zoom/Teams meetings) and sometimes bad enough that the session needs to be restarted. And this should not happen.
Does anyone out there with more network savvy think this is a problem, or "de rigueur" where one hour leases are concerned?? Could the IP be held for a few extra seconds so as not to disrupt traffic or trigger ip-change??? (I'm guessing the latter would be an upstream problem, and likely not a problem at all - but I have to ask...)
Thanks in advance for the feedback.
-
I see two workarounds
- using another reason than BOUND in /etc/dhcp/dhclient-exit-hooks
- add an earlier check to compare old ip to new ip and do nothing if the same.
for first see man /usr/sbin/dhclient-script
for second I think it is a script run by root
you could do
if [ "$reason" = "BOUND" ]
then
oldip=$(/sbin/e-smith/config get ExternalIP)
if [ "$oldip" = "$new_ip_address" ]; then
echo "same ip $new_ip_address, doing nothing"
else
/sbin/e-smith/signal-event ip-change "$new_ip_address" "$interface"
fi
fi
-
Thank you, Jean-Philippe, for the suggestions. I've implemented the latter to test while I try to wrap my head around the former. I'll monitor it before I apply it to the production machine and give it a proper stress test.
I'll post again if I find a better solution using dhclient-script or other.
Thank you again for the assistance.