allow dns names in userallowedip,userblockedip,agentallowedip,agentblockedip #5089

Signed-off-by: si458 <simonsmith5521@gmail.com>
This commit is contained in:
si458 2025-06-21 20:32:18 +01:00
parent 3e07d92e6f
commit f2bb94c8ca

View File

@ -855,7 +855,7 @@ function CreateMeshCentralServer(config, args) {
} }
// Look for easy command line instructions and do them here. // Look for easy command line instructions and do them here.
obj.StartEx = function () { obj.StartEx = async function () {
var i; var i;
//var wincmd = require('node-windows'); //var wincmd = require('node-windows');
//wincmd.list(function (svc) { console.log(svc); }, true); //wincmd.list(function (svc) { console.log(svc); }, true);
@ -916,6 +916,13 @@ function CreateMeshCentralServer(config, args) {
if (typeof obj.args.trustedproxy == 'string') { obj.args.trustedproxy = obj.args.trustedproxy.split(' ').join('').split(','); } if (typeof obj.args.trustedproxy == 'string') { obj.args.trustedproxy = obj.args.trustedproxy.split(' ').join('').split(','); }
if (typeof obj.args.tlsoffload == 'string') { obj.args.tlsoffload = obj.args.tlsoffload.split(' ').join('').split(','); } if (typeof obj.args.tlsoffload == 'string') { obj.args.tlsoffload = obj.args.tlsoffload.split(' ').join('').split(','); }
// Check IP lists and ranges and if DNS return IP addresses
config.settings.userallowedip = await resolveDomainsToIps(config.settings.userallowedip);
config.settings.userblockedip = await resolveDomainsToIps(config.settings.userblockedip);
config.settings.agentallowedip = await resolveDomainsToIps(config.settings.agentallowedip);
config.settings.agentblockedip = await resolveDomainsToIps(config.settings.agentblockedip);
config.settings.swarmallowedip = await resolveDomainsToIps(config.settings.swarmallowedip);
// Check the "cookieIpCheck" value // Check the "cookieIpCheck" value
if ((obj.args.cookieipcheck === false) || (obj.args.cookieipcheck == 'none')) { obj.args.cookieipcheck = 'none'; } if ((obj.args.cookieipcheck === false) || (obj.args.cookieipcheck == 'none')) { obj.args.cookieipcheck = 'none'; }
else if ((typeof obj.args.cookieipcheck != 'string') || (obj.args.cookieipcheck.toLowerCase() != 'strict')) { obj.args.cookieipcheck = 'lax'; } else if ((typeof obj.args.cookieipcheck != 'string') || (obj.args.cookieipcheck.toLowerCase() != 'strict')) { obj.args.cookieipcheck = 'lax'; }
@ -1472,6 +1479,11 @@ function CreateMeshCentralServer(config, args) {
if (typeof obj.config.domains[i].userblockedip == 'string') { if (obj.config.domains[i].userblockedip == '') { delete obj.config.domains[i].userblockedip; } else { obj.config.domains[i].userblockedip = obj.config.domains[i].userblockedip.split(' ').join('').split(','); } } if (typeof obj.config.domains[i].userblockedip == 'string') { if (obj.config.domains[i].userblockedip == '') { delete obj.config.domains[i].userblockedip; } else { obj.config.domains[i].userblockedip = obj.config.domains[i].userblockedip.split(' ').join('').split(','); } }
if (typeof obj.config.domains[i].agentallowedip == 'string') { if (obj.config.domains[i].agentallowedip == '') { delete obj.config.domains[i].agentallowedip; } else { obj.config.domains[i].agentallowedip = obj.config.domains[i].agentallowedip.split(' ').join('').split(','); } } if (typeof obj.config.domains[i].agentallowedip == 'string') { if (obj.config.domains[i].agentallowedip == '') { delete obj.config.domains[i].agentallowedip; } else { obj.config.domains[i].agentallowedip = obj.config.domains[i].agentallowedip.split(' ').join('').split(','); } }
if (typeof obj.config.domains[i].agentblockedip == 'string') { if (obj.config.domains[i].agentblockedip == '') { delete obj.config.domains[i].agentblockedip; } else { obj.config.domains[i].agentblockedip = obj.config.domains[i].agentblockedip.split(' ').join('').split(','); } } if (typeof obj.config.domains[i].agentblockedip == 'string') { if (obj.config.domains[i].agentblockedip == '') { delete obj.config.domains[i].agentblockedip; } else { obj.config.domains[i].agentblockedip = obj.config.domains[i].agentblockedip.split(' ').join('').split(','); } }
// Check IP lists and ranges and if DNS return IP addresses
obj.config.domains[i].userallowedip = await resolveDomainsToIps(obj.config.domains[i].userallowedip);
obj.config.domains[i].userblockedip = await resolveDomainsToIps(obj.config.domains[i].userblockedip);
obj.config.domains[i].agentallowedip = await resolveDomainsToIps(obj.config.domains[i].agentallowedip);
obj.config.domains[i].agentblockedip = await resolveDomainsToIps(obj.config.domains[i].agentblockedip);
if (typeof obj.config.domains[i].ignoreagenthashcheck == 'string') { if (obj.config.domains[i].ignoreagenthashcheck == '') { delete obj.config.domains[i].ignoreagenthashcheck; } else { obj.config.domains[i].ignoreagenthashcheck = obj.config.domains[i].ignoreagenthashcheck.split(','); } } if (typeof obj.config.domains[i].ignoreagenthashcheck == 'string') { if (obj.config.domains[i].ignoreagenthashcheck == '') { delete obj.config.domains[i].ignoreagenthashcheck; } else { obj.config.domains[i].ignoreagenthashcheck = obj.config.domains[i].ignoreagenthashcheck.split(','); } }
if (typeof obj.config.domains[i].allowedorigin == 'string') { if (obj.config.domains[i].allowedorigin == '') { delete obj.config.domains[i].allowedorigin; } else { obj.config.domains[i].allowedorigin = obj.config.domains[i].allowedorigin.split(','); } } if (typeof obj.config.domains[i].allowedorigin == 'string') { if (obj.config.domains[i].allowedorigin == '') { delete obj.config.domains[i].allowedorigin; } else { obj.config.domains[i].allowedorigin = obj.config.domains[i].allowedorigin.split(','); } }
if ((obj.config.domains[i].passwordrequirements != null) && (typeof obj.config.domains[i].passwordrequirements == 'object')) { if ((obj.config.domains[i].passwordrequirements != null) && (typeof obj.config.domains[i].passwordrequirements == 'object')) {
@ -4033,6 +4045,25 @@ function checkResolveAll(names, func) {
} }
} }
// Resolve a list of domains to IP addresses, return a flat array of IPs.
async function resolveDomainsToIps(originalArray) {
if (!Array.isArray(originalArray)) { return undefined; }
const flatResult = [];
for (const item of originalArray) {
if (new require('ipcheck')(item).valid) {
flatResult.push(item);
continue;
}
try {
const results = await require('dns').promises.lookup(item, { all: true });
flatResult.push(...results.map(r => r.address));
} catch (err) {
console.log(`Could not resolve ${item}`);
}
}
return flatResult;
}
// Return the server configuration // Return the server configuration
function getConfig(createSampleConfig) { function getConfig(createSampleConfig) {
// Figure out the datapath location // Figure out the datapath location