gluon-core: allow multiple domain names for next_node-feature
* change type of next_node.name * create domain entry for each entry and add to dnsmasq configuration [Matthias Schiffer: reword documentation]
This commit is contained in:
parent
b3762fc61c
commit
9711afaf69
@ -83,6 +83,7 @@
|
|||||||
-- connected to using a known IP address.
|
-- connected to using a known IP address.
|
||||||
next_node = {
|
next_node = {
|
||||||
-- anycast IPs of all nodes
|
-- anycast IPs of all nodes
|
||||||
|
-- name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||||
ip4 = '10.xxx.0.xxx',
|
ip4 = '10.xxx.0.xxx',
|
||||||
ip6 = 'fdxx:xxxx:xxxx::xxxx',
|
ip6 = 'fdxx:xxxx:xxxx::xxxx',
|
||||||
},
|
},
|
||||||
|
@ -163,6 +163,7 @@ next_node \: package
|
|||||||
::
|
::
|
||||||
|
|
||||||
next_node = {
|
next_node = {
|
||||||
|
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||||
ip4 = '10.23.42.1',
|
ip4 = '10.23.42.1',
|
||||||
ip6 = 'fdca:ffee:babe:1::1',
|
ip6 = 'fdca:ffee:babe:1::1',
|
||||||
mac = '16:41:95:40:f7:dc'
|
mac = '16:41:95:40:f7:dc'
|
||||||
@ -174,6 +175,13 @@ next_node \: package
|
|||||||
changed, but it can be adjusted to match existing deployments that use a
|
changed, but it can be adjusted to match existing deployments that use a
|
||||||
different value.
|
different value.
|
||||||
|
|
||||||
|
When the nodes' next-node address is used as a DNS resolver by clients
|
||||||
|
(by passing it via DHCP or router advertisements), it may be useful to
|
||||||
|
allow resolving a next-node hostname without referring to an upstream DNS
|
||||||
|
server (e.g. to allow reaching the node using such a hostname via HTTP or SSH
|
||||||
|
in isolated mesh segments). This is possible by providing one or more names
|
||||||
|
in the ``name`` field.
|
||||||
|
|
||||||
mesh \: optional
|
mesh \: optional
|
||||||
Options specific to routing protocols.
|
Options specific to routing protocols.
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ if need_table({'dns'}, nil, false) then
|
|||||||
need_number({'dns', 'cacheentries'}, false)
|
need_number({'dns', 'cacheentries'}, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
need_string_array(in_domain({'next_node', 'name'}), false)
|
||||||
need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false)
|
need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false)
|
||||||
need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false)
|
need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false)
|
||||||
|
|
||||||
|
@ -25,22 +25,21 @@ if dns.servers then
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
if next_node.name and next_node.ip4 then
|
local function set_dns_record(name, ip, sectionname)
|
||||||
uci:section('dhcp', 'domain', 'nextnode4', {
|
if not ip then return end
|
||||||
name = next_node.name,
|
uci:section('dhcp', 'domain', sectionname, {
|
||||||
ip = next_node.ip4,
|
name = name,
|
||||||
|
ip = ip,
|
||||||
})
|
})
|
||||||
else
|
|
||||||
uci:delete('dhcp', 'domain', 'nextnode4')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if next_node.name and next_node.ip6 then
|
uci:delete_all('dhcp', 'domain', function(s)
|
||||||
uci:section('dhcp', 'domain', 'nextnode6', {
|
return (s['.name'] and string.match(s['.name'], "^nextnode[46]"))
|
||||||
name = next_node.name,
|
end)
|
||||||
ip = next_node.ip6,
|
|
||||||
})
|
for i, name in ipairs(next_node.name or {}) do
|
||||||
else
|
set_dns_record(name, next_node.ip4, 'nextnode4_' .. i)
|
||||||
uci:delete('dhcp', 'domain', 'nextnode6')
|
set_dns_record(name, next_node.ip6, 'nextnode6_' .. i)
|
||||||
end
|
end
|
||||||
|
|
||||||
uci:save('dhcp')
|
uci:save('dhcp')
|
||||||
|
Loading…
Reference in New Issue
Block a user