25.10 Series
The OPNsense business edition transitions to this 25.10 release including revamped frontend grid UI, experimental privilege separation for the GUI, a new and improved firewall automation GUI, performance enhancements especially for numerous aliases being used at once, OpenID Connect integration, captive portal backend rewrite, Greek as a new language, FreeBSD 14.3 plus much more.
Please make sure to read the migration notes before upgrading.
Download link is as follows. An installation guide [1] and the checksums for the images can be found below as well.
https://downloads.opnsense.com/
25.10.1 (December 10, 2025)
This business release is based on the OPNsense 25.7.8 community version with additional reliability improvements, but without revamped Unbound blocklists for the time being.
Please be aware that during the update check the new package manager will be installed, but will fail to report the update status like it always had before and so you will end up with an error that will require checking for updates again. The fix is in this update, but impossible to install without upgrading the package manager first. We hope this will only be a minor inconvenience during the process.
Also, Python has reported security issues of which a DoS in http.client could potentially affect existing installations given that an HTTP server sends a malicious response which “can consume a large amount of memory and CPU time and cause swapping”. Python has not released an update for version 3.11 at this point in time.
Here are the full patch notes:
system: use new file_safe() in two instances
system: improve the HA VIP sync code
system: simplify RRD backup code and remove exec() usage [1] (reported by Alex Williams from Pellera Technologies working with Trend Zero Day Initiative)
system: move valid_from search criteria to log_matcher for faster end of search
system: use file_safe() in gateway monitor watcher
system: refactor factory reset page to MVC and add a reset per component operating on models
system: fix a HA sync regression introduced in 25.7.6 that prevented a sync from succeeding in an edge case
system: defaults: properly delete empty model containers in the configuration
system: switch int/bool to string in gateway properties
system: ignore TypeErrors when parsing log lines in the backend
system: replace various raw exec(), system(), passthru() and shell_exec() calls with safer variants
system: add host route deletion support to system_host_route()
system: move the general page host route removal to system_host_route()
system: add CA chain to PKCS12 export
system: fix hidden syslog HA XMLRPC sync option
interfaces: fix permission of packet capture file in strict security mode
interfaces: ifctl: always allow reads to internal state files
interfaces: fix overview details button not working
interfaces: support link-local IPv6 mode
interfaces: also stop PPPoE connections when CARP is temporarily disabled (contributed by René Mayrhofer)
interfaces: fix packet capture and ping buttons not working since 25.7.7
interfaces: limit execution of sysctl scope in PPP device edit code
interfaces: safer interfaces_pfsync_configure() handling
firewall: refactor live log using a ring buffer
firewall: add toggles to disable selected automatic rules
firewall: enable “safe delete” for categories
firewall: improved stats rendering on automation rules
firewall: allow searching aliases in automation rules inspect mode by IP address
firewall: automation: fix alias IP address search
firewall: automation: allow interface parameter to contain a list of interfaces for API users
firewall: aliases: replace invalid unicode chars (contributed by Marius Halden)
firewall: live log: only execute redraw on visibility state transition
firewall: live log: optimize viewbuffer rendering
firewall: live log: prevent re-resolving in-flight requests and move host lookup to current filtered view
firewall: live log: fix data ordering and add table/history limit options
firewall: live log: use “badge” class like before
firewall: live log: make this grid static and slightly adjust info column width
firewall: live log: backwards compatibility for old “interface_name” field type
firewall: live log: fix wrong variable scope
firewall: live log: restructure DOM layout to reduce wasted header space
firewall: live log: revert static property, persistence is disabled for this grid
firewall: states: fix delete_selected firewall states (contributed by Alexander Sulfrian)
firewall: do not allow nesting in GeoIP aliases
firewall: automation: split search logic and normalize legacy output
firewall: aliases: add a few GeoIP related logging messages
firewall: mute pfctl-based table entry expire to avoid cron noise due to stderr use
firewall: aliases: missing placeholder for username in basic auth type selection
firewall: support “0” as valid rule ID in rule lookup redirect
firewall: automation: add per-rule state timeouts for “udp.first”, “udp.multiple” and “udp.single”
captive portal: fix selectpicker #voucher-groups not being re-rendered after change event
captive portal: move grid init to tab show event
dnsmasq: strict hostname and domain validation plus improved ipset validations
dnsmasq: add optgroup support to DHCP option fields and expose all DHCPv4 options
dnsmasq: switch to file_safe() use in backend
dnsmasq: minor safe execution changes in backend
firmware: package manager upgrade changes for pkg 2.x
intrusion detection: remove obsolete “ac-bs” pattern matcher algorithm
ipsec: sessions: add datakey property for row mapping
ipsec: status: search phase 2 triggered twice on click and cleanup tooltip event as well
ipsec: disable model caching on SPD page
ipsec: add AES256GCM16 to the child ESP proposals list
ipsec: hide phase 2 output based on phase 1 status instead of the row count for phase 2
ipsec: add “reqid_base” setting to advanced settings
ipsec: sessions: fix missing commands translation
ipsec: connections: prevent model caching when referring items within the same model
isc-dhcp: adjust backend for safe execution
kea-dhcp: automatic route support for PD leases
kea-dhcp: case insensitive MAC address comparison
openssh: minor safe execution change in backend
openvpn: add support for pushing excluded routes via net_gateway (contributed by Patrice Damezin)
openvpn: allow multiple domains settings for client connection (contributed by Krisztian Ivancso)
openvpn: use file_safe() to write CRL files
openvpn: swap description and mode in “tls_key” and require a description for static keys
openvpn: one safe execution change
openvpn: add fast-io option (contributed by mdten)
radvd: safe execution changes
unbound: use file_safe() for root hint creation
unbound: deprecate unmaintained AdAway blocklist (contributed by Maurice Walker)
unbound: duplicate pointer records due to not casting the field types
unbound: missing lock in del_host_override action
wireguard: add debug option to instances
wireguard: fix wrong maximum value for “PersistentKeepalive”
backend: add file_safe() helper for atomic file creation
backend: rename “realif” variables to “device” in a number of spots
backend: avoid the use of get_real_interface() when it does not matter and remove dead code associated with that
backend: exend shell_safe() to emulate exec() $output argument magic
backend: reimplement existing command execution functions with Shell class implementation
backend: replace mwexecf_bg() with mwexecfb() for clarity
mvc: add RegexField to properly validate PCRE2 syntax
mvc: support arrays in search clauses
mvc: OptionField: properly translate optgroup
mvc: JsonKeyValueStoreField: fix race condition when using SourceField in the model
mvc: persist models description in root attribute of its respective configuration
mvc: move translation to menu system and add “FixedName” property
mvc: extend ModelRelationField so it can optionally disable caching
mvc: rewrite the old Shell class according to our current standards for safe command execution (exec_safe() wrapper)
mvc: fix default sort order being ignored in fetchBindRequest()
mvc: make “data_change_message_content” configurable
rc: do not clear /tmp on a diskless install
rc: secure an exec() in the recovery script
shell: assorted cleanups in console menu related scripts
ui: assorted adjustments for dark theme
ui: always show bootgrid reset button
ui: improve grid responsiveness via minWidth()
ui: remove this.dataIdentifier as datakey defines the key to be used when asking “row-id” or getSelectedRows
ui: SimpleActionButton: add support for icons in action buttons
ui: recompile default themes using dart sass (1.93.2) which changes color rendering
ui: keyboard shortcuts for “a”dvanced and “h”elp in MVC pages (contributed by Konstantinos Spartalis)
ui: bail out on dynamic grid resize if data is loading
ui: bootgrid: prevent full table redraw without onDataProcessed trigger
ui: bootgrid: add missing datakeys to two pages
ui: fix tokenizer event trigger loop
plugins: os-OPNWAF 2.1
plugins: os-ddclient 1.28 [2]
plugins: os-freeradius 1.9.28 [3]
plugins: os-frr 1.49 [4]
plugins: os-git-backup 1.1 [5]
plugins: os-ndp-proxy-go 1.0 is a hot-off-the-press userspace IPv6 Neighbor Discovery Proxy [6]
plugins: os-q-feeds-connector 1.3 [7]
plugins: os-tailscale 1.3 [8]
plugins: os-tayga 1.3 [9]
plugins: os-theme-flexcolor 1.0 is a new 3-in one theme [10] (contributed by Schnuffel2008)
plugins: os-zabbix-proxy 1.15 [11]
src: dhclient: improve UDP checksum handling
src: dummynet: move excessive logging messages under debug output
src: ice: add PCI IDs for E835 devices
src: ice: add support for E835-XXV-4 adapter
src: if_vxlan: fix byteorder of source port
src: ifconfig: assorted stable branch improvements
src: igb: fix out-of-bounds register access on VFs
src: ipfw: check for errors from sooptcopyin() and sooptcopyout()
src: ipfw: pmod: avoid further rule processing after tcp-mod failures
src: ix/ixv: add support for new Intel Ethernet E610 family devices
src: ixl: fix multicast promiscuous mode state tracking and filter management
src: net: validate interface group names in ioctl handlers
src: netlink: in snl_init_writer() do not overwrite error in case of failure
src: pf: improve add state validation
src: pf: improve DIOCRCLRTABLES validation
src: pf: SCTP abort messages fully close the connection
src: sctp, tcp, udp: improve deferred computation of checksums
src: SO_REUSEPORT_LB breaks connect(2) for UDP sockets [12]
src: vtnet: assorted stable branch improvements
ports: curl 8.17.0 [13]
ports: kea 3.0.2 [14]
ports: libxml 2.14.6 [15]
ports: nss 3.118.1 [16]
ports: openssh 10.2p1 [17]
ports: openvpn 2.6.17 [18]
ports: pcre2 10.47 [19]
ports: php 8.3.28 [20]
ports: pkg 2.3.1
ports: python 3.11.14 [21]
ports: sqlite 3.50.4 [22]
ports: strongswan 6.0.3 [23]
ports: suricata 8.0.2 [24]
ports: syslog-ng 4.10.2 [25]
ports: unbound 1.24.2 [26]
A hotfix release was issued as 25.10.1_2:
firewall: clean up rules edit cancel button
firmware: opnsense-update: remove architecture pinning for -X option
mvc: FilterBaseController: move shared automation rule logic here
src: e1000: do not enable ASPM L1 without L0s
src: e1000: bump 82574/82583 PBA to 32K
src: if_ovpn: use IFT_TUNNEL
src: ifconfig: bring back -L for netlink
src: igb: fix VLAN support on VFs
src: irdma: fix potential memory leak on qhash cqp operation
src: ix: add support for debug dump for E610 adapters
src: netmap: fix error handling in nm_os_extmem_create()
src: pf: reading rules with a read lock on ioctl
src: pf: relax sctp v_tag verification
src: pf: handle divert packets
src: pfsync: fix incorrect unlock during destroy
src: rtsold: remote code execution via ND6 router advertisements [27]
25.10 (October 15, 2025)
The OPNsense business edition transitions to this 25.10 release including revamped frontend grid UI, experimental privilege separation for the GUI, a new and improved firewall automation GUI, performance enhancements especially for numerous aliases being used at once, OpenID Connect integration, captive portal backend rewrite, Greek as a new language, FreeBSD 14.3 plus much more.
Please make sure to read the migration notes before upgrading.
Download link is as follows. An installation guide [1] and the checksums for the images can be found below as well.
https://downloads.opnsense.com/
This business release is based on the OPNsense 25.7.5 community version with additional reliability improvements.
Here are the full patch notes against version 25.4.3:
system: the setup wizard was rewritten using MVC/API
system: change default DHCP use from ISC to Dnsmasq for factory reset and console port and address assignments
system: numerous permission, ownership and directory alignments for web GUI privilege separation
system: allow experimental feature to run web GUI privilege separated as “wwwonly” user
system: add a banner when trying to revert the privilege separated GUI back to root at run time
system: consistently use empty() checks on “blockbogons”, “blockpriv”, “dnsallowoverride” and “dnsallowoverride_exclude”
system: change default system domain to “internal” (contributed by Self-Hosting-Group)
system: remove the “optional” notion of tunables known to the system
system: enable kernel timestamps by default
system: allow CSR to be downloaded from System/Trust/Certificates (contributed by Gavin Chappell)
system: HTML decode entities when generating new QR code for user
system: add missing timestamp formatter in snapshots
system: prevent misconfigurations with the automatic user creation option
system: add pluginctl hook for cache_flush
system: rewrite wwwonly bootstrap procedure
system: allow authentication events from wwwonly user
system: fix two regressions due to stream output path safety addition
system: fix reconfigure control on HA status page for small viewports
system: add pluginctl -m and -v options for model migrations and validations calls
system: add “power off” backend action to GUI cron options
system: add the pfsync “defer” option to high availability
system: return both interfaces in a single call for get_nameservers()
system: safeguard legacy local_sync_accounts() against malformed user entries
system: change atrun interval to every minute
reporting: removed the unused second argument in getSystemHealthAction()
reporting: renamed getRRDlistAction() to getRrdListAction()
reporting: fixed internal parameter names in insight graphs
interfaces: fix media settings write issue since 24.7 as it would not apply when “autoselect” result already matched
interfaces: removed defunct SLAAC tracking functionality (SLAAC on WAN still works fine)
interfaces: no longer fix improper WLAN clone naming at run time as it should be ensured by code for a long time now
interfaces: remove the functions get_configured_carp_interface_list() and get_configured_ip_aliases_list()
interfaces: add VIP grid formatter to hide row field content based on the set mode
interfaces: drop redundant updates in rtsold_resolvconf.sh (contributed by Andrew Baumann)
interfaces: moved get_real_interface() to util.inc
interfaces: replace MAC vendor database from py-netaddr with a simple local implementation
interfaces: refactor getting both devices from interface in settings page
interfaces: get both devices of interface in one call
interfaces: fix flags display in interface overview detail
firewall: add expire option to external aliases to automatically cleanup tables via cron
firewall: removed the expiretable binary use in favour of the builtin pfctl
firewall: speed up alias functionality by using the new model caching
firewall: consolidated ipfw/dnctl scripting and fix edge case reloads
firewall: code cleanup and performance improvements for alias diagnostics page
firewall: assorted UI updates for automation pages
firewall: a few minor improvements in automation GUI
firewall: remove unused “set loginterface” clause
firewall: additional statistics for alias grid
firewall: fix shaper reset button
firewall: add “quick” mode in alias update to skip table size comparison during schedules
firewall: adjust firewall_rule_lookup to open correct interface and rule from firewall live log
firewall: add port alias selection to source_port and destination_port
firewall: implement alias description tooltip and other UX tweaks
firewall: add optional Tabulator tree view to show categories as rule folders in automation
firewall: put sequence and sort_order in advanced mode of automation rules
firewall: front-end table rendering performance improvement for alias diagnostics
firewall: also set groups for special IPv6 interfaces
firewall: ignore empty lines for pf table counting
firewall: support tags in source NAT automation rules
firewall: allow alias nesting for URL tables
firewall: fix interface_net aliases not being populated
firewall: fix return value when failing to resolve host entries for aliases and no previous content is known
firewall: treat “skip” protocol as a string to avoid syntax error
firewall: improve alias parsing performance in diagnostics page
firewall: support IPinfo format for GeoIP [2]
firewall: adapt default table size calculation
captive portal: migrate backend from IPFW to PF
captive portal: fix regression when NAT reflection is enabled
captive portal: fix command line argument parsing in backend
captive portal: remove obsolete interfaces_inbound option that works by default now
captive portal: missing fix for command line argument parsing in backend
captive portal: fix display issue for pass rule when client not in zone
captive portal: allow disabling automatic firewall rules
captive portal: exclude portal table in destination
captive portal: restore the logging of drop reasons
captive portal: fix last_accessed being cached from previous entries if N/A
captive portal: mark alias as type external for use in rules
captive portal: align accounting session timeout with API
captive portal: balance fastcgi servers a bit better
captive portal: do not share a fastcgi socket with web GUIo firewall: fix flags not showing on GeoIP selection
captive portal: make room for additional authentication profiles
captive portal: API dispatcher is now privilege separated via “wwwonly” user and group
captive portal: preparations for SSO identification support
captive portal: move backend scripts directory
captive portal: various style cleanups
captive portal: restyle default login template
captive portal: case insensitive MAC parsing
captive portal: remove stale dir-listing.activate from web server
captive portal: support OpenID Connect authentication through custom template
dnsmasq: add optional subnet mask to “dhcp-range” to satisfy DHCP relay requirements
dnsmasq: sync CSV export with ISC and Kea structure
dnsmasq: add CNAME configuration option to host overrides
dnsmasq: add ipset support
dnsmasq: swap hosts and domains tab for consistency reasons
dnsmasq: allow disabling local for DHCP domains
dnsmasq: add Tabulator “groupBy” functionality to group by interfaces
dnsmasq: add leases widget that shows latest leases
dnsmasq: refine the selection of automatic DHCP rules for eligible interfaces
firmware: opnsense-version: build time package variable replacements can now be read at run time
firmware: hide community plugins by default and add a checkbox to unhide them on the same page
firmware: introduce a new support tier 4 for development and otherwise unknown plugins
firmware: disable the FreeBSD-kmods repository by default
firmware: opnsense-version: support more elaborate -R replacement
firmware: store update and upgrade logs in edge cases
firmware: opnsense-version: support file based -R option
firmware: opnsense-update: support -g for update log view
firmware: remove tier 2 workaround for Zenarmor plugins
firmware: add date to modal header
firmware: opnsense-patch: fix cache flush using new hook
firmware: add vuxml.freebsd.org to CRL handling hostnames
firmware: switch business mirror layout
intrusion detection: add JA4 support (contributed by Maxime Thiebaut)
intrusion detection: fix interface name conversion
intrusion detection: fix ja4 option templating
intrusion detection: fix and simplify grid search in download tab
intrusion detection: fix downloads tab not loading with Tabulator
intrusion detection: revert “fix downloads tab not loading with Tabulator”
intrusion detection: make grids virtual to fix performance issues
ipsec: fix regression in configuration write with introduced volatile fields
ipsec: add firewall rules skip option for VTIs
ipsec: deprecate legacy stroke and implement swanctl for overview
ipsec: add default value to “make_before_break” that retains disabled default
ipsec: fix bulk operations in SPD page
ipsec: dots are not allowed in pool names
ipsec: allow underscores in PSK identifiers
isc-dhcp: show tracking IPv6 interfaces when automatically enabled and offer an explicit disable
isc-dhcp: hide IPv4 menu items when Dnsmasq DHCP is enabled to improve out of the box experience
isc-dhcp: add static mapping CSV export
isc-dhcp: allow static mapping export for disabled entries
kea-dhcp: honour IPv4 client specific reservation domain name option (contributed by NOYB)
kea-dhcp: expose lease expiration settings to the GUI (contributed by Konstantinos Spartalis)
kea-dhcp: support DHCP option 121 (classless static routes)
lang: add Greek as a new language (contributed by sopex)
lang: make more strings translate-able (contributed by Tobias Degen)
lang: updates for Chinese, Czech, German and Greek
lang: new Ukrainian language and assorted updates
monit: move backend scripts directory
monit: fix migration weirdness with run/post use
openvpn: the server wizard functionality has been permanently removed as it required the old wizard implementation
radvd: refine checks that ignored 6rd and 6to4
wireguard: move backend scripts to proper location
unbound: fix error in edge case of initial model migration
unbound: configurable top domain list length in reporting view (contributed by sopex)
unbound: remove unknown model reference and protect/simplify remaining one
unbound: add support for TXT records in host overrides
backend: trigger boot template reload without using configd
backend: added IPv6 bracket helper for templates (contributed by BPplays)
backend: add “!” operator to execute and flush cache when it exists
mvc: introduce generic model caching to improve operational performance
mvc: field types quality of life improvements with new getValues() and isEqual() functions
mvc: filed types deprecated getCurrentValue() in favour of getValue() and removed isEmptyString()
mvc: new BaseSetField() as a parent class for several other field types and numerous new and improved unit tests
mvc: support chown/chgrp in File and FileObject classes
mvc: use getNodeContent() to gather grid data
mvc: allow PortOptional=Y for IPPortField
mvc: remove SelectOptions support for CSVListField
mvc: migrated use of setInternalIsVirtual() to volatile field types
mvc: fix getDescription() in NetworkAliasField
mvc: improve resilience of VPNIdField and LinkAddressField
mvc: repair side affect of getDescription() change causing performance regressions
mvc: modify existing and add missing descriptions in models
mvc: set default validation message for CertificateField
mvc: BaseModel: minor non-functional cleanups
mvc: ModelRelationField: keep array structure in memory to avoid reinitiating object construction
mvc: tweaked model definitions, especially descriptions and validation message style
mvc: slightly adjust two getOption() calls in constraints
mvc: BaseListField: always map values in getDescription()
mvc: BaseListField: account for option container and passthrough value
mvc: remove getCurrentValue() compatibility wrapper
mvc: Backend: always return strings in configdRun() and configdpRun()
mvc: improve replaceInputWithSelector() to support an empty placeholder
mvc: setDefault() not fired as setValue() was set with an empty string
mvc: allow empty responses to fix a regression due to stream output safety path addition
mvc: remove empty string fallbacks for backend invokes that are no longer needed
mvc: more style changes on existing core models
mvc: disable Dnsmasq/Unbound template generation
mvc: remove getDescription() overlay in ModelRelationField
mvc: protect JSON response against UFT-8 encoding failures
mvc: HTML-decode select element values
rc: make changes to php,var,tmp bootstrap
ui: switch from Bootgrid to Tabulator for MVC grid rendering
ui: numerous switches to shared base_bootgrid_table and base_apply_button use
ui: flatten nested containers for grid inclusion
ui: use snake_case for all API URLs and adjust ACLs accordingly
ui: move tooltip load event to single-fire mode
ui: add checkmark to SimpleActionButton as additional indicator
ui: improve menu icons/text spacing (contributed by sopex)
ui: bootgrid: clean up leftover compatibility bits
ui: bootgrid: add missing sortable option
ui: bootgrid: provide more styling possibilities from formatters
ui: fix language selection for low vertical resolution screens (contributed by sopex)
ui: hide header of the picture widget on the dashboard (contributed by sopex)
ui: bootgrid: add tabulatorOptions to translateCompatOptions()
ui: bootgrid: raise rowCount default to 50 and adjust selections accordingly for most pages
ui: bootgrid: simplify custom grid command additions
ui: do not add an empty option into an empty option group
ui: add datetime-local to field types
plugins: replace variables in package scripts by default
plugins: os-OPNBEcore 1.6 with OpenID Connect and scheduled jobs support
plugins: os-OPNWAF 2.0 with OpenID Connect support, customizable error documents and updated rule set
plugins: os-acme-client 4.10 [3]
plugins: os-bind 1.34 [4]
plugins: os-c-icap 1.9 [5]
plugins: os-caddy 2.0.4 [6]
plugins: os-clamav 1.8.1 [7]
plugins: os-crowdsec 1.0.12 [8]
plugins: os-dnscrypt-proxy 1.16 [9]
plugins: os-etpro-telemetry 1.8 now shows more status responses in widget
plugins: os-frr 1.47 [10]
plugins: os-gdrive-backup 1.0 for Google Drive backup support
plugins: os-grid_example 1.1 updates best practice on grid development
plugins: os-netbird 1.0 (contributed by Gauss23 and Bethuel Mmbaga)
plugins: os-netbird 1.1 fixes service startup and switches to syslog (contributed by Bethuel Mmbaga)
plugins: os-nginx 1.35 [11]
plugins: os-openvpn-legacy 1.0 for legacy OpenVPN components support
plugins: os-puppet-agent 1.2 [12]
plugins: os-shadowsocks 1.3 [13]
plugins: os-smart 2.4 adds extended info option (contributed by poisonbl)
plugins: os-squid 1.3 [14]
plugins: os-strongswan-legacy 1.0 for legacy IPsec components support
plugins: os-telegraf 1.12.13 [15]
plugins: os-theme-advanced 1.1 (contributed by Jaka Prašnikar and Raushan Patel)
plugins: os-theme-cicada 1.40 (contributed by Team Rebellion)
plugins: os-theme-tukan 1.30 (contributed by Team Rebellion)
plugins: os-theme-vicuna 1.50 (contributed by Team Rebellion)
plugins: os-zabbix-agent 1.17 [16]
plugins: os-zabbix-proxy 1.14 [17]
src: FreeBSD 14.3-RELEASE-p4 plus assorted stable/14 networking commits [18]
src: add a new sysctl in order to differentiate UEFI architectures [19]
src: libarchive: merge version 3.8.1 [20]
src: lagg: fix if_hw_tsomax_update() not being called
src: wg: add support for removing allowed-ip entries and assorted cleanups
src: ovpn: support multihomed server configurations and assorted cleanups
src: netlink: fully clear parser state between messages
src: udp: fix a inpcb refcount leak in the tunnel receive path
src: p9fs: assorted fixes
src: assorted network stack fixes via stable/14
src: if_ovpn: support IPv6 link-local addresses
src: if_ovpn: support floating clients
src: if_ovpn: fill out sin_len/sin6_len
src: if_ovpn: destroy cloned interfaces via a prison removal callback
src: ifconfig: support VLAN ID in static/deladdr
src: bnxt: fix the request length in bnxt_hwrm_func_backing_store_cfg()
src: iflib: set the get counter routine prior to attaching the interface
src: ifnet: defer detaching address family dependent data
src: ixgbe: fix incomplete speed coverage in link status logging
src: ixl: fix queue MSI and legacy IRQ rearming
src: openssl: fix multiple vulnerabilities [21]
src: re: add PNP info for module
src: re: make sure re_rxeof() is called in net epoch context
src: vfs: fix copy_file_range() failing to set output parameters [22]
ports: curl 8.16.0 [23]
ports: dnspython 2.8.0 [24]
ports: expat 2.7.3 [25]
ports: kea 3.0.1 [26]
ports: krb5 1.22.1 [27]
ports: libpfctl 0.17
ports: lighttpd 1.4.82 [28]
ports: nss 3.117 [29]
ports: openssl 3.0.18 [30]
ports: openvpn 2.6.15 [31]
ports: pcre2 10.46 [32]
ports: perl 5.42.0 [33]
ports: php 8.3.26 [34]
ports: phpseclib 3.0.47 [35]
ports: py-duckdb 1.3.2 [36]
ports: py-jq 1.10.0 [37]
ports: py-requests 2.32.5
ports: sudo 1.9.17p2 [40]
ports: suricata 7.0.12 [41]
ports: unbound 1.24.0 [42]
A hotfix release was issued as 25.10_2:
system: safeguard config history delete and revert by requiring HTTP POST method
rc: make sure /var/lib/php/tmp can be accessed by “other” users
plugins: os-OPNBEcore 1.7
plugins: os-OPNcentral 1.12
plugins: os-squid 1.4 works around CVE-2025-62168 (contributed by m.a.x. it)
Migration notes, known issues and limitations:
The captive portal implementation moves from IPFW to PF. Check the technical details first, especially regarding the new ruleset behaviours. [45]
Deprecated Google Drive backups due to upstream policy changes and moved to plugins for existing users.
API URLs registered in the default ACLs have been switched from “camelCase” to “snake_case”.
API grid return values now offer “%field” for a value description when available. “field” will now always be the literal value from the configuration. The API previously returned a display value for some field types, but not all.
Reverted tunables “hw.ibrs_disable” and “vm.pmap.pti” to FreeBSD defaults when no explicit values have been set in tunables.
Moved OpenVPN legacy to plugins as a first step to deprecation.
Moved IPsec legacy to plugins as a first step to deprecation.
The public key for the 25.10 series is:
# -----BEGIN PUBLIC KEY-----
# MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn9lXekbm5KcktbiWpmQf
# drRC8LmAOTV9Cbdd3em6iDFFcw8vmRS7Rbo2/exxYiPCqEPxxPtUsW+g/a6fqPJp
# pof5D1EHWqzPfkjRQV6ipQjm+ocJGkfbeHsp5I77L+w7om5TbPYBkOjg+iMd442d
# VYxgqXmMZy+6v78ofVM+wyba0GkRymFt0qf5k5uk3Auztcfanc2Ymsc+PDdjGHQd
# c9H8T0T6To8Z0xrbEXzY00IqSRkLto9Cl+xEmEAz/AiEu2WtEadOqSpDy9dsJfQg
# HpBQVlGQdphj5zmkqG6JSL1Uw+02OeIXOfFWRtqgW7vMyU0IbER3hLpvh6BlsqNJ
# LCPfD7F/dzDPU5LniDRRb4MrTlVpJk2h8pk7GbmJCqAyWJJZ6n3a+InPtUfl9gP5
# T0d15N7myh8RLssP+TIy8hiBHtc/yK89dUahGei1xDuh0HdytRLLLWVXqgWwgXhd
# 9it8l8AJ/D2BtuyExpJOWx3sYvmhJiPN8phCaR2G2E+QRA2X5nHGyUw5jYpKI8Om
# Q2khz1PBYcA/T5lKhM3HRFCu2HZsPKT5CEevZfUuPDXIqwx+LMFs6qqbzbGrdn1F
# H6ZSlG0BWuokeyjhN2mB0Fr6kdLobmfVgZHUS7KOwcI9BdftSDbEk8kMxrQlwugh
# 4I1hTrAycMERbjeUKg1plx8CAwEAAQ==
# -----END PUBLIC KEY-----
# SHA256 (OPNsense-business-25.10-dvd-amd64.iso.bz2) = 6c45cd311960d42aa87933d2134c19825565d1ab74caa4129d08a938dbf621e8
# SHA256 (OPNsense-business-25.10-nano-amd64.img.bz2) = 2a706e56c45a1ecc8d4f14f85d3e07f1f3be85ac2d79459f62e9fed860edae19
# SHA256 (OPNsense-business-25.10-serial-amd64.img.bz2) = 8e8460dc8751cb0c7ab863d44ceb59a59a3eadbb9622ac707e43aeda002a3d7e
# SHA256 (OPNsense-business-25.10-vga-amd64.img.bz2) = fefac8e50c30c463072fbda508c675d176a0f0a7d910eacede3112e7a76dc365