What's Changed
Added
-
Devices can request SNI hostname routes over UPnP, not only PCP. The
tunnel's UPnP IGD now serves two Start9 vendor actions
(X_START9_AddHostnameMapping/X_START9_DeleteHostnameMapping, advertised
in itsWANIPConnection:1SCPD) that bind a hostname on a shared external
port via SNI demultiplexing — the same capability the PCPHOSTNAMEoption
provides. A device that reaches the tunnel over UPnP but not PCP (for
example, UDP 5351 filtered by an intermediate device) previously kept its
ordinary port forwards but silently lost SNI demux; StartOS now falls back to
the vendor action automatically. Unlike standard UPnP mappings, these routes
are always lease-bearing and expire if the device stops renewing them, so a
vanished device can never squat a hostname against its legitimate owner.
A hostname grant (over either protocol) is now also refused outright when
the tunnel cannot bind the shared port's listener, instead of being
acknowledged while routing nothing. -
Generated WireGuard configs identify their gateway as accepting inbound
connections. Each config includes the# inbound: yesgateway marker while retaining its
StartTunnel header for compatibility with older StartOS versions.
Fixed
-
start-tunnelreaches a daemon that listens on a wildcard address. With no
--tunnel, the CLI derives the daemon's address fromtunnel-listenand
authenticates with the local authcookie, which it sends only to a loopback
address. A tunnel server binds0.0.0.0by nature, so the derived address was
never loopback: the CLI skipped the token and then, having no local auth, fell
through to diallinghttps://0.0.0.0— a request that can't succeed. A wildcard
listen address is now dialled over loopback, since binding every interface is not
a destination. -
subnet <SUBNET> set-wanandsubnet <SUBNET> set-ipv6take the subnet
once, from the parentsubnetcommand. Both asked for it a second time
after the subcommand name, and no invocation satisfied that — giving the
subnet once failed argument parsing, giving it twice was rejected as a
duplicate key — so neither command could be run at all. They now inherit the
subnet the wayadd,removeandset-dnsalready did, matching the syntax
the documentation shows. -
An automatic port forward that asks for a time limit now expires when that
time runs out. A device requesting a timed UPnP mapping had it kept as
though it were permanent, so a forward could outlive the app that asked for
it — staying open until the tunnel was next restarted. Automatic ports are
now lease-based as documented: one that stops being renewed is removed on its
own. Devices that ask for a permanent mapping, which is what StartOS does,
are unaffected. -
Third-party UPnP clients can now use the tunnel as a gateway. The device
description didn't advertise theWANCommonInterfaceConfigservice, and the
tunnel answered none of the actions a client uses to check a gateway before
using it (GetStatusInfo,GetConnectionTypeInfo,GetNATRSIPStatus) or to
read a mapping back (GetSpecificPortMappingEntry,
GetGenericPortMappingEntry). Software built on the common UPnP client
library — which includes many torrent clients and consumer apps — therefore
rejected the tunnel outright with "no valid UPnP Internet Gateway Device
found", or created a mapping and then reported it as failed because it could
not read it back. StartOS was unaffected; its client requires none of these.
Security
- The UPnP device description no longer identifies the tunnel to web
pages. The description endpoint answered anyone who could reach it, and it
names the product ("StartTunnel") plus a stable identifier derived from the
tunnel's WireGuard key — so a malicious website could rebind its own domain
to the gateway and read it from any tunneled phone or laptop's browser: a
cross-site tracking beacon that re-identifies a visitor behind this tunnel
from any network. All UPnP endpoints now refuse requests whoseHostis not
an IP address, which a real UPnP client always sends and a rebinding page
never can. As defense-in-depth, actions that change port forwards must also
be named in theSOAPActionheader (every real client sends it; a
cross-origin page can never attach it), so even a browser running on a
device that has been granted automatic port forwarding cannot be used to
drive forwards blind.
start-tunnel packages Checksums
SHA-256
bc5fb84a8298c32a2e5f2d39bf80e8f166e78468262f362188bfb9eee4057567 start-tunnel_1.3.0_amd64.deb
88b74862389b1108fc9e73f7acf6433322e51a60786b2739cf9e971b0a1f47e8 start-tunnel_1.3.0_arm64.deb
c4fb03ee81b7de62e760ed429f81a8c4ea7cff664595343de8f9c33f34833174 start-tunnel_1.3.0_riscv64.deb
BLAKE-3
88ed06bf2e40d6ee56083330289deb9f921cd82c6d22c72e00346e28975341fd start-tunnel_1.3.0_amd64.deb
867141c070c7c6db756f9bfc9263df3fc8bdc5a178a25c7052c257d427d02ed6 start-tunnel_1.3.0_arm64.deb
e8950c7700ff5bf3d150f043e33dbc756506cefd52637bd7225710d9d384f4f5 start-tunnel_1.3.0_riscv64.deb