dhcrelay: migrate IPv6 data, consolidation cleanups #6983
Menu, ACL and XMLRPC wer consolidated into the IPv4 flag. IPv6 is no longer functional and operates from the shared reimplementation now. Syslog doesn't work on OpenBSD dhcrelay especially since we start it with -d so it tries to spam to stderr which is ignored by daemon -f to background it properly with a pid file (it's a long story, don't ask).
This commit is contained in:
parent
53a95b0190
commit
ad5fed3c4d
1
LICENSE
1
LICENSE
|
@ -30,7 +30,6 @@ Copyright (c) 2009-2012 Jim Pingle <jimp@pfsense.org>
|
|||
Copyright (c) 2012 Jonas von Andrian
|
||||
Copyright (c) 2004-2005 Jonathan Watt <jwatt@jwatt.org>
|
||||
Copyright (c) 2015 Jos Schellevis <jos@opnsense.org>
|
||||
Copyright (c) 2003-2004 Justin Ellison <justin@techadvise.com>
|
||||
Copyright (c) 2021 Kyle Evans <kevans@FreeBSD.org>
|
||||
Copyright (c) 2015 Manuel Faux <mfaux@conf.at>
|
||||
Copyright (c) 2003-2006 Manuel Kasper <mk@neon1.net>
|
||||
|
|
2
plist
2
plist
|
@ -605,6 +605,7 @@
|
|||
/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Menu/Menu.xml
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/ACL/ACL.xml
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.php
|
||||
/usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.xml
|
||||
|
@ -2080,7 +2081,6 @@
|
|||
/usr/local/www/services_dhcp_edit.php
|
||||
/usr/local/www/services_dhcpv6.php
|
||||
/usr/local/www/services_dhcpv6_edit.php
|
||||
/usr/local/www/services_dhcpv6_relay.php
|
||||
/usr/local/www/services_dnsmasq.php
|
||||
/usr/local/www/services_dnsmasq_domainoverride_edit.php
|
||||
/usr/local/www/services_dnsmasq_edit.php
|
||||
|
|
|
@ -405,12 +405,6 @@ function core_xmlrpc_sync()
|
|||
'id' => 'dhcpdv6',
|
||||
'services' => ["dhcpdv6", "radvd"],
|
||||
);
|
||||
$result[] = array(
|
||||
'description' => gettext('DHCPv6: Relay'),
|
||||
'section' => 'dhcrelay6',
|
||||
'id' => 'dhcrelay6',
|
||||
'services' => ["dhcrelay6"],
|
||||
);
|
||||
$result[] = array(
|
||||
'description' => gettext('Virtual IPs'),
|
||||
'help' => gettext('Synchronize the CARP Virtual IPs to the other HA host.'),
|
||||
|
|
|
@ -115,16 +115,6 @@ function dhcpd_services()
|
|||
$services[] = $pconfig;
|
||||
}
|
||||
|
||||
if (isset($config['dhcrelay6']['enable'])) {
|
||||
$pconfig = array();
|
||||
$pconfig['name'] = "dhcrelay6";
|
||||
$pconfig['description'] = gettext("DHCPv6 Relay");
|
||||
$pconfig['php']['restart'] = array('dhcpd_dhcrelay6_configure');
|
||||
$pconfig['php']['start'] = array('dhcpd_dhcrelay6_configure');
|
||||
$pconfig['pidfile'] = '/var/run/dhcrelay6.pid';
|
||||
$services[] = $pconfig;
|
||||
}
|
||||
|
||||
if (dhcpd_dhcpv4_enabled()) {
|
||||
$pconfig = array();
|
||||
$pconfig['name'] = 'dhcpd';
|
||||
|
@ -1599,13 +1589,6 @@ EOD;
|
|||
service_log("done.\n", $verbose);
|
||||
}
|
||||
|
||||
function dhcpd_dhcrelay_configure($verbose = false, $family = null, $id = null)
|
||||
{
|
||||
if ($family == null || $family == 'inet6') {
|
||||
dhcpd_dhcrelay6_configure($verbose);
|
||||
}
|
||||
}
|
||||
|
||||
function dhcpd_dhcrelay6_configure($verbose = false)
|
||||
{
|
||||
global $config;
|
||||
|
|
|
@ -60,8 +60,8 @@ function dhcrelay_xmlrpc_sync()
|
|||
$result = [];
|
||||
|
||||
$result[] = [
|
||||
'description' => gettext('DHCPv4: Relay'),
|
||||
'section' => 'dhcrelay,OPNsense.DHCRelay',
|
||||
'description' => gettext('DHCRelay'),
|
||||
'section' => 'dhcrelay,dhcrelay6,OPNsense.DHCRelay',
|
||||
'services' => ['dhcrelay'],
|
||||
'id' => 'dhcrelay',
|
||||
];
|
||||
|
|
|
@ -420,12 +420,6 @@
|
|||
<pattern>services_dhcp.php*</pattern>
|
||||
</patterns>
|
||||
</page-services-dhcpserver>
|
||||
<page-services-dhcpv6relay>
|
||||
<name>Services: DHCPv6 Relay</name>
|
||||
<patterns>
|
||||
<pattern>services_dhcpv6_relay.php*</pattern>
|
||||
</patterns>
|
||||
</page-services-dhcpv6relay>
|
||||
<page-services-dhcpserverv6-editstaticmapping>
|
||||
<name>Services: DHCPv6 Server: Edit static mapping</name>
|
||||
<patterns>
|
||||
|
|
|
@ -174,7 +174,6 @@
|
|||
<LogFile VisibleName="Log File" order="400" url="/ui/diagnostics/log/core/dhcpd"/>
|
||||
</ISC_DHCPv4>
|
||||
<ISC_DHCPv6 VisibleName="ISC DHCPv6" cssClass="fa fa-bullseye fa-fw">
|
||||
<Relay order="300" url="/services_dhcpv6_relay.php"/>
|
||||
<Leases order="400" url="/ui/dhcpv6/leases"/>
|
||||
</ISC_DHCPv6>
|
||||
<OpenDNS VisibleName="OpenDNS" url="/services_opendns.php" cssClass="fa fa-tags fa-fw"/>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<model>
|
||||
<mount>//OPNsense/DHCRelay</mount>
|
||||
<version>1.0.0</version>
|
||||
<version>1.0.1</version>
|
||||
<description>DHCRelay configuration</description>
|
||||
<items>
|
||||
<relays type="ArrayField">
|
||||
|
|
|
@ -60,8 +60,8 @@ class M1_0_0 extends BaseModelMigration
|
|||
foreach (explode(',', (string)$legacy->interface) as $interface) {
|
||||
$node = $model->relays->add();
|
||||
$node->setNodes([
|
||||
'agent_info' => !empty($legacy->agentoption),
|
||||
'enabled' => !empty($legacy->enable),
|
||||
'agent_info' => !empty($legacy->agentoption) ? '1' : '0',
|
||||
'enabled' => !empty($legacy->enable) ? '1' : '0',
|
||||
'interface' => (string)$interface,
|
||||
'destination' => $dest_uuid,
|
||||
]);
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2024 Deciso B.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
namespace OPNsense\DHCRelay\Migrations;
|
||||
|
||||
use OPNsense\Base\BaseModelMigration;
|
||||
use OPNsense\Base\FieldTypes\BooleanField;
|
||||
use OPNsense\Base\FieldTypes\NetworkField;
|
||||
use OPNsense\Base\FieldTypes\PortField;
|
||||
use OPNsense\Core\Config;
|
||||
|
||||
class M1_0_1 extends BaseModelMigration
|
||||
{
|
||||
/**
|
||||
* Migrate older models into shared model
|
||||
* @param $model
|
||||
*/
|
||||
public function run($model)
|
||||
{
|
||||
$config = Config::getInstance()->object();
|
||||
|
||||
$legacy = $config->dhcrelay6;
|
||||
if (empty($legacy->interface) || empty($legacy->server)) {
|
||||
/* no value in partial migration so skip all */
|
||||
return;
|
||||
}
|
||||
|
||||
$node = $model->destinations->add();
|
||||
$node->setNodes([
|
||||
'name' => 'Migrated IPv6 server entry',
|
||||
'server' => (string)$legacy->server,
|
||||
]);
|
||||
$dest_uuid = $node->getAttribute('uuid');
|
||||
|
||||
foreach (explode(',', (string)$legacy->interface) as $interface) {
|
||||
$node = $model->relays->add();
|
||||
$node->setNodes([
|
||||
'agent_info' => !empty($legacy->agentoption) ? '1' : '0',
|
||||
'enabled' => !empty($legacy->enable) ? '1' : '0',
|
||||
'interface' => (string)$interface,
|
||||
'destination' => $dest_uuid,
|
||||
]);
|
||||
$node->interface->normalizeValue();
|
||||
if (empty((string)$node->interface)) {
|
||||
$model->relays->del($node->getAttribute('uuid'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function post($model)
|
||||
{
|
||||
$config = Config::getInstance()->object();
|
||||
unset($config->dhcrelay6);
|
||||
}
|
||||
}
|
|
@ -2,5 +2,5 @@
|
|||
# Local syslog-ng configuration filter definition [dhcpd].
|
||||
###################################################################
|
||||
filter f_local_dhcpd {
|
||||
facility(local7) or program("dhcpd") or program("dhcrelay");
|
||||
facility(local7) or program("dhcpd");
|
||||
};
|
||||
|
|
|
@ -244,12 +244,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* make sure that the DHCP Relay isn't enabled on this interface */
|
||||
if (isset($config['dhcrelay'][$if]['enable'])) {
|
||||
$input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."),
|
||||
!empty($config['interfaces'][$if]['descr']) ? htmlspecialchars($config['interfaces'][$if]['descr']) : strtoupper($if));
|
||||
}
|
||||
}
|
||||
|
||||
if (count($input_errors) == 0) {
|
||||
|
@ -424,9 +418,6 @@ include("head.inc");
|
|||
<section class="page-content-main">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<?php if (!empty($config['dhcrelay6']['enabled'])): ?>
|
||||
<?php print_info_box(gettext('DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.')); ?>
|
||||
<?php else: ?>
|
||||
<?php if (isset($input_errors) && count($input_errors) > 0) print_input_errors($input_errors); ?>
|
||||
<?php if (isset($savemsg)) print_info_box($savemsg); ?>
|
||||
<?php if (is_subsystem_dirty('staticmaps')): ?><p>
|
||||
|
@ -798,7 +789,6 @@ include("head.inc");
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,186 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014-2016 Deciso B.V.
|
||||
* Copyright (C) 2003-2004 Justin Ellison <justin@techadvise.com>
|
||||
* Copyright (C) 2010 Ermal Luçi
|
||||
* Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
require_once("guiconfig.inc");
|
||||
require_once("interfaces.inc");
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||
$pconfig['enable'] = isset($config['dhcrelay6']['enable']);
|
||||
if (empty($config['dhcrelay6']['interface'])) {
|
||||
$pconfig['interface'] = array();
|
||||
} else {
|
||||
$pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']);
|
||||
}
|
||||
if (empty($config['dhcrelay6']['server'])) {
|
||||
$pconfig['server'] = "";
|
||||
} else {
|
||||
$pconfig['server'] = $config['dhcrelay6']['server'];
|
||||
}
|
||||
$pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']);
|
||||
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$input_errors = array();
|
||||
$pconfig = $_POST;
|
||||
|
||||
/* input validation */
|
||||
$reqdfields = explode(" ", "server interface");
|
||||
$reqdfieldsn = array(gettext("Destination Server"), gettext("Interface"));
|
||||
|
||||
do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors);
|
||||
|
||||
if (!empty($pconfig['server'])) {
|
||||
$checksrv = explode(",", $pconfig['server']);
|
||||
foreach ($checksrv as $srv) {
|
||||
if (!is_ipaddrv6($srv)) {
|
||||
$input_errors[] = gettext("A valid Destination Server IPv6 address must be specified.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count($input_errors) == 0) {
|
||||
$config['dhcrelay6']['enable'] = !empty($pconfig['enable']);
|
||||
$config['dhcrelay6']['interface'] = implode(",", $pconfig['interface']);
|
||||
$config['dhcrelay6']['agentoption'] = !empty($pconfig['agentoption']);
|
||||
$config['dhcrelay6']['server'] = $pconfig['server'];
|
||||
write_config();
|
||||
plugins_configure('dhcrelay', false, array('inet6'));
|
||||
header(url_safe('Location: /services_dhcpv6_relay.php'));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/* set the enabled flag which will tell us if DHCP server is enabled
|
||||
* on any interface. We will use this to disable dhcp-relay since
|
||||
* the two are not compatible with each other.
|
||||
*/
|
||||
$dhcpd_enabled = false;
|
||||
if (is_array($config['dhcpdv6'])) {
|
||||
foreach($config['dhcpdv6'] as $intf => $dhcp) {
|
||||
if (isset($dhcp['enable']) && !empty($config['interfaces'][$intf]['enable'])) {
|
||||
$dhcpd_enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$service_hook = 'dhcrelay6';
|
||||
|
||||
include("head.inc");
|
||||
|
||||
?>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<?php include("fbegin.inc"); ?>
|
||||
<section class="page-content-main">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<?php if ($dhcpd_enabled):
|
||||
print_info_box(gettext('The DHCPv6 server is currently enabled. Cannot enable the DHCPv6 relay while the DHCPv6 server is enabled on any interface.'));
|
||||
else: ?>
|
||||
<?php if (isset($input_errors) && count($input_errors) > 0) print_input_errors($input_errors); ?>
|
||||
<?php if (isset($savemsg)) print_info_box($savemsg); ?>
|
||||
<section class="col-xs-12">
|
||||
<div class="content-box">
|
||||
<form method="post" name="iform" id="iform">
|
||||
<div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped opnsense_standard_table_form">
|
||||
<tr>
|
||||
<td style="width:22%"><strong><?=gettext("DHCPv6 Relay configuration"); ?></strong></td>
|
||||
<td style="width:78%; text-align:right">
|
||||
<small><?=gettext("full help"); ?> </small>
|
||||
<i class="fa fa-toggle-off text-danger" style="cursor: pointer;" id="show_all_help_page"></i>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="fa fa-info-circle text-muted"></i> <?= gettext('Enable') ?></td>
|
||||
<td>
|
||||
<input name="enable" type="checkbox" value="yes" <?=!empty($pconfig['enable']) ? "checked=\"checked\"" : ""; ?>/>
|
||||
<strong><?=gettext("Enable DHCPv6 relay on interface");?></strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a id="help_for_interface" href="#" class="showhelp"><i class="fa fa-info-circle"></i></a> <?= gettext('Interface(s)') ?></td>
|
||||
<td>
|
||||
<select name="interface[]" multiple="multiple" class="selectpicker">
|
||||
<?php
|
||||
$iflist = get_configured_interface_with_descr();
|
||||
foreach ($iflist as $ifent => $ifdesc):
|
||||
if (!is_ipaddrv6(get_interface_ipv6($ifent))) {
|
||||
continue;
|
||||
}?>
|
||||
|
||||
<option value="<?=$ifent;?>" <?=!empty($pconfig['interface']) && in_array($ifent, $pconfig['interface']) ? " selected=\"selected\"" : "";?> >
|
||||
<?=$ifdesc;?>
|
||||
</option>
|
||||
<?php
|
||||
endforeach;?>
|
||||
</select>
|
||||
<div class="hidden" data-for="help_for_interface">
|
||||
<?=gettext("Interfaces without an IPv6 address will not be shown."); ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a id="help_for_agentoption" href="#" class="showhelp"><i class="fa fa-info-circle"></i></a> <?=gettext("Append circuit ID");?></td>
|
||||
<td>
|
||||
<input name="agentoption" type="checkbox" value="yes" <?=!empty($pconfig['agentoption']) ? "checked=\"checked\"" : ""; ?> />
|
||||
<div class="hidden" data-for="help_for_agentoption">
|
||||
<?= gettext('If this is checked, the DHCPv6 relay will append the circuit ID (interface number) and the agent ID to the DHCPv6 request.') ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a id="help_for_server" href="#" class="showhelp"><i class="fa fa-info-circle"></i></a> <?=gettext("Destination server");?></td>
|
||||
<td>
|
||||
<input name="server" type="text" value="<?=!empty($pconfig['server']) ? htmlspecialchars($pconfig['server']):"";?>" />
|
||||
<div class="hidden" data-for="help_for_server">
|
||||
<?= gettext('This is the IPv6 address of the server to which DHCPv6 requests are relayed. You can enter multiple server IPv6 addresses, separated by commas.') ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<input name="Submit" type="submit" class="btn btn-primary" value="<?=html_safe(gettext('Save'));?>" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<?php include("foot.inc"); ?>
|
Loading…
Reference in New Issue