diff --git a/net/upnp/src/etc/inc/plugins.inc.d/miniupnpd.inc b/net/upnp/src/etc/inc/plugins.inc.d/miniupnpd.inc index 28a3aa65d..5c5a813ac 100644 --- a/net/upnp/src/etc/inc/plugins.inc.d/miniupnpd.inc +++ b/net/upnp/src/etc/inc/plugins.inc.d/miniupnpd.inc @@ -185,7 +185,7 @@ function miniupnpd_configure_do($verbose = false) /* configure STUN server if needed */ if (!empty($upnp_config['stun_host'])) { - $config_text .= "ext_perform_stun=yes\n"; + $config_text .= "ext_perform_stun=allow-filtered\n"; $config_text .= "ext_stun_host=" . ($upnp_config['stun_host']) . "\n"; $config_text .= "ext_stun_port=" . ($upnp_config['stun_port'] ?? "3478") . "\n"; } @@ -206,6 +206,10 @@ function miniupnpd_configure_do($verbose = false) $config_text .= "pcp_allow_thirdparty=no\n"; } + if (!empty($upnp_config['ipv6_disable'])) { + $config_text .= "ipv6_disable=yes\n"; + } + /* enable logging of packets handled by miniupnpd rules */ if (!empty($upnp_config['logpackets'])) { $config_text .= "packet_log=yes\n"; @@ -225,6 +229,13 @@ function miniupnpd_configure_do($verbose = false) $config_text .= "/\n"; } + if (!empty($upnp_config['friendly_name'])) { + // Encode required XML entities of text UPnP IGD config options until the daemon does so + $config_text .= "friendly_name=" . htmlspecialchars($upnp_config['friendly_name'], ENT_NOQUOTES | ENT_XML1) . "\n"; + } else { + $config_text .= "friendly_name=OPNsense UPnP IGD & PCP\n"; + } + /* set uuid and serial */ $config_text .= "uuid=" . miniupnpd_uuid() . "\n"; $config_text .= "serial=" . strtoupper(substr(miniupnpd_uuid(), 0, 8)) . "\n"; @@ -247,9 +258,14 @@ function miniupnpd_configure_do($verbose = false) $config_text .= "enable_upnp=" . ( $upnp_config['enable_upnp'] ? "yes\n" : "no\n" ); $config_text .= "enable_pcp_pmp=" . ( $upnp_config['enable_natpmp'] ? "yes\n" : "no\n" ); - # When building with IGDv2, infinite (IGDv1 only) lease time port maps are reduced to 7d - # following the IGDv2 standard. Disabling it at runtime allows IGDv2 incompatible clients - $config_text .= "force_igd_desc_v1=yes\n"; + // When building the daemon with UPnP IGDv2, infinite (IGDv1 only) lease duration port maps are reduced + // to 7d, following the IGDv2 standard. Disabling it at runtime allows IGDv2-incompatible clients + if ($upnp_config['upnp_igd_compat'] == 'igdv1') { + $config_text .= "force_igd_desc_v1=yes\n"; + } + + $config_text .= "lease_file=/var/run/miniupnpd.leases\n"; + $config_text .= "lease_file6=/var/run/miniupnpd.leases-ipv6\n"; /* write out the configuration */ file_put_contents('/var/etc/miniupnpd.conf', $config_text); diff --git a/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/ACL/ACL.xml b/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/ACL/ACL.xml index df50ca093..23a2fa96e 100644 --- a/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/ACL/ACL.xml +++ b/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/ACL/ACL.xml @@ -6,7 +6,7 @@ - Services: UPnP IGD & PCP: Port Maps + Services: UPnP IGD & PCP: Active Maps status_upnp.php* diff --git a/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/Menu/Menu.xml b/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/Menu/Menu.xml index ba129ede3..c040d5ea1 100644 --- a/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/Menu/Menu.xml +++ b/net/upnp/src/opnsense/mvc/app/models/OPNsense/UPnP/Menu/Menu.xml @@ -4,7 +4,7 @@ - + diff --git a/net/upnp/src/www/services_upnp.php b/net/upnp/src/www/services_upnp.php index 6a88aa9f7..e4919ab2c 100644 --- a/net/upnp/src/www/services_upnp.php +++ b/net/upnp/src/www/services_upnp.php @@ -75,7 +75,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { 'enable_natpmp', 'enable_upnp', 'ext_iface', + 'friendly_name', 'iface_array', + 'ipv6_disable', 'logpackets', 'overridesubnet', 'overridewanip', @@ -85,6 +87,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { 'num_permuser', 'sysuptime', 'upload', + 'upnp_igd_compat', ]; foreach (miniupnpd_permuser_list() as $permuser) { @@ -175,7 +178,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { // save form data $upnp = []; // boolean types - foreach (['enable', 'enable_upnp', 'enable_natpmp', 'logpackets', 'sysuptime', 'permdefault', 'allow_third_party_mapping'] as $fieldname) { + foreach (['enable', 'enable_upnp', 'enable_natpmp', 'logpackets', 'sysuptime', 'permdefault', 'allow_third_party_mapping', 'ipv6_disable'] as $fieldname) { $upnp[$fieldname] = !empty($pconfig[$fieldname]); } // numeric types @@ -183,7 +186,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $upnp['num_permuser'] = $pconfig['num_permuser']; } // text field types - foreach (['ext_iface', 'download', 'upload', 'overridewanip', 'overridesubnet', 'stun_host', 'stun_port'] as $fieldname) { + foreach (['ext_iface', 'download', 'upload', 'overridewanip', 'overridesubnet', 'stun_host', 'stun_port', 'friendly_name', 'upnp_igd_compat'] as $fieldname) { $upnp[$fieldname] = $pconfig[$fieldname]; } foreach (miniupnpd_permuser_list() as $fieldname) { @@ -257,7 +260,7 @@ include("head.inc"); - + /> + +