dhcp: auto-populate gateway from interface IP for DHCP ranges

Add get_interface_ip() helper to resolve an interface's IPv4 address
via 'ip -o addr show'.  Use it to back-propagate gateway into DHCP
ranges so clients receive their default route.

- set_dhcp_range() resolves gateway: explicit > existing range > iface IP
- DnsToFirewallSync and FirewallToDhcpSync sync ensure gateways are set
- Remove automatic masquerade toggle from DnsToFirewallSync
- Fix dnsmasq lease file path to /var/lib/misc/dnsmasq.leases
- Rename lease state field expires_at -> expires (ISO string)
- Add 'ip -o addr show' to sudo whitelist
This commit is contained in:
2026-07-09 00:58:09 +00:00
parent 5135de0921
commit 803258cf18
7 changed files with 143 additions and 35 deletions
+1 -3
View File
@@ -229,7 +229,7 @@ class TestDnsToFirewallSync:
@patch("lib.firewall.save_config")
@patch("lib.firewall.get_config")
@patch("lib.dnsmasq.get_config")
def test_adds_dhcp_dns_masquerade(self, mock_dm_get, mock_fw_get, mock_fw_save):
def test_adds_dhcp_dns(self, mock_dm_get, mock_fw_get, mock_fw_save):
mock_dm_get.return_value = {
"dhcp": {
"ranges": [
@@ -262,7 +262,6 @@ class TestDnsToFirewallSync:
saved_cfg = mock_fw_save.call_args[0][0]
assert "dhcp" in saved_cfg["zones"]["internal"]["services"]
assert "dns" in saved_cfg["zones"]["internal"]["services"]
assert saved_cfg["zones"]["internal"]["masquerade"] is True
@patch("lib.firewall.save_config")
@patch("lib.firewall.get_config")
@@ -288,7 +287,6 @@ class TestDnsToFirewallSync:
saved_cfg = mock_fw_save.call_args[0][0]
assert "dhcp" not in saved_cfg["zones"]["internal"]["services"]
assert "dns" not in saved_cfg["zones"]["internal"]["services"]
assert saved_cfg["zones"]["internal"]["masquerade"] is False
@patch("lib.firewall.save_config")
@patch("lib.firewall.get_config")