@Tom-Elliott, disregard this request.
I edited the ‘addsubnetgroup.hook.php’ which simplified getting the client IP and adding the host to the respective group. I understand this also removes certain checks that were in place but for my environment it is now working as intended.
Old 'addSubnetgroupHost function:
public function addSubnetgroupHost($arguments)
{
if (!in_array($this->node, (array)self::$pluginsinstalled)) {
return;
}
$Host = $arguments['Host'];
$mac = $Host->get('mac');
if (!isset($mac)) {
return;
}
// Setup for tests
$name = $ipn = $Host->get('name');
$ip = $Host->get('ip');
$ipr = self::resolveHostname($name);
// Perform all tests.
$ip1t = filter_var($ip, FILTER_VALIDATE_IP);
$ip2t = filter_var($ipn, FILTER_VALIDATE_IP);
$ip3t = filter_var($ipr, FILTER_VALIDATE_IP);
// If resolve hostname returns a valid IP, set IP appropriately.
// Otherwise, if the name is valid, use it.
// Otherwise, return if base $ip is false.
if (false !== $ip3t) {
$ip = $ipr;
} elseif (false !== $ip2t) {
$ip = $ipn;
} elseif (false === $ip1t) {
return;
}
// Now list our subnet groups.
Route::listem('subnetgroup');
$SNGroups = json_decode(Route::getData());
foreach ($SNGroups->subnetgroups as &$SNGroup) {
if (in_array($SNGroup->groupID, $Host->get('groups'))) {
$Host->removeGroup($SNGroup->groupID)->save();
}
$subnetList = str_replace(' ', '', $SNGroup->subnets);
$subnets = explode(',', $subnetList);
foreach ($subnets as &$subnet) {
if ($this->_ipCIDRCheck($ip, $subnet)) {
$Host->addGroup($SNGroup->groupID)->save();
unset($subnet);
continue 2;
}
unset($subnet);
}
unset($SNGroup);
}
}
New code:
public function addSubnetgroupHost($arguments)
{
if (!in_array($this->node, (array)self::$pluginsinstalled)) {
return;
}
$Host = $arguments['Host'];
$mac = $Host->get('mac');
if (!isset($mac)) {
return;
}
// Use the real source IP from the request
$ip = $_SERVER['REMOTE_ADDR'];
// Now list our subnet groups.
Route::listem('subnetgroup');
$SNGroups = json_decode(Route::getData());
foreach ($SNGroups->subnetgroups as &$SNGroup) {
if (in_array($SNGroup->groupID, $Host->get('groups'))) {
$Host->removeGroup($SNGroup->groupID)->save();
}
$subnetList = str_replace(' ', '', $SNGroup->subnets);
$subnets = explode(',', $subnetList);
foreach ($subnets as &$subnet) {
if ($this->_ipCIDRCheck($ip, $subnet)) {
$Host->addGroup($SNGroup->groupID)->save();
unset($subnet);
continue 2;
}
unset($subnet);
}
unset($SNGroup);
}
}