Nym VPN v1.31.0
Nym VPN v1.31.0 for OpenWrt
Added
- Mixnet Tuning card in LuCI: adjust Sphinx traffic knobs (Poisson delays,
background cover traffic, cover/mixing/sending delays) for mixnet mode —
the daemon-side support existed; this exposes it on the router, matching
the upstream apps' new Mixnet Tuning screens. Includes a new
nym-vpnc tunnel set --disable-background-cover-trafficflag and a short
-lalias fornym-vpnc status --listen.
Changed
- Fresh installs now default IPv6-into-tunnel to off. Tunneled IPv6 toward
exits without IPv6 egress was silently dropped, so dual-stack LAN clients
tried IPv6 first and waited out a timeout before falling back to IPv4 on
every new connection. Existing installs keep their stored setting; the
LuCI toggle still enables IPv6.
Fixed
-
Kill-switch no longer leaks established IPv6 (or IPv4) flows out the WAN
during tunnel reconnects. The firewall's established-connection accept was
unqualified; it is now scoped to the tunnel interface, so only genuine
tunnel return traffic is allowed while new and pre-existing WAN-bound flows
are blocked. Most visible with circumvention (QUIC) transports, which
reconnect frequently. -
Toggling the kill-switch in LuCI (or
nym-vpnc tunnel set --killswitch) now
takes effect immediately instead of silently doing nothing until the daemon
was restarted. -
The firewall backend is re-detected instead of caching an early "unknown"
result, so the kill-switch installs correctly even if the firewall service
starts late or is restarted (previously surfaced asError state: SetFirewallPolicy). -
TCP MSS is now clamped to the tunnel path MTU for forwarded LAN traffic
(both in the daemon's fw4 integration and the reload-restore script). The
2-hop WireGuard tun runs at MTU 1340; without clamping, LAN clients hit
PMTU blackholes — web pages stalled while bulk transfers still passed. -
dnsmasq now gets only IPv4 upstream resolvers when any are available.
IPv6 upstreams (half of the default set) are unreachable through exits
without IPv6 egress and added per-lookup timeout stalls; AAAA records
still resolve over IPv4 transport. -
Explicitly selected gateways are no longer dropped by the failure
blacklist — a transient failure on your chosen entry no longer forces
"switch gateways" errors (upstream #5529). -
QUIC bridge connections are bounded by a 10 s timeout instead of hanging
the connect (upstream #5740). -
A reconnect can no longer race a throttled settings update and re-run
with stale tunnel settings (upstream #5686, #5817). -
Reconnecting now retries account sync when the account controller is
stuck on device-time-desync (upstream #5551). -
.apk packages shipped with only
rpcdin their dependency list: repeated
-I depends:flags toapk mkpkgoverwrite each other, sokmod-tunand
the other dependencies were silently dropped and fresh apk-based installs
ended up without the TUN driver (Error state: TunDevice). All dependencies
are now passed as a single space-separateddepends:value. -
install.sh now runs
opkg update/apk updatebefore installing so
dependencies resolve on routers with stale package lists, and verifies the
TUN device is available after install (installingkmod-tunexplicitly if
not).
Quick Install
curl -fsSL https://packages.dial0ut.org/install.sh | shAuto-detects your architecture and package manager (opkg or apk), downloads the latest release, and installs everything.
Manual Install
Download the .ipk (OpenWrt ≤24.10) or .apk (OpenWrt 25.x+) for your architecture from the assets below, then:
# opkg (OpenWrt ≤24.10)
opkg update && opkg install ./nym-vpn_*.ipk
# apk (OpenWrt 25.x+)
apk add --allow-untrusted ./nym-vpn_*.apkDependencies (kmod-tun, luci-base) are installed automatically. Uses pure Rust userspace WireGuard — no kernel WireGuard module needed.
After Installation
Access the web interface at: LuCI → VPN → Nym VPN
Supported Architectures
| Architecture | Example Devices |
|---|---|
aarch64_generic |
Raspberry Pi 3/4, modern ARM64 routers |
aarch64_cortex-a53 |
MediaTek, Qualcomm ARM64 routers |
aarch64_cortex-a53_neon-vfpv4 |
ARM64 Cortex-A53 with NEON/VFPv4 |
aarch64_cortex-a72 |
Raspberry Pi 4, Marvell Armada |
arm_cortex-a5_vfpv4 |
Marvell Armada 375 |
arm_cortex-a7 |
GL.iNet Flint, custom ARM builds |
arm_cortex-a7_neon-vfpv4 |
Many MediaTek/Qualcomm routers |
arm_cortex-a7_vfpv4 |
Zyxel, some MediaTek routers |
arm_cortex-a8_vfpv3 |
TI AM335x, BeagleBone |
arm_cortex-a9 |
Broadcom BCM47xx, older Netgear |
arm_cortex-a9_neon |
Zyxel NBG6817, some Marvell |
arm_cortex-a9_vfpv3-d16 |
Linksys WRT, Netgear R7800 |
arm_cortex-a15_neon-vfpv4 |
TI OMAP5, Samsung Exynos |
arm_arm926ej-s |
Marvell Kirkwood (Linksys EA3500, Seagate GoFlex) |
x86_64 |
x86 VMs, PC Engines APU |
i386_pentium4 |
Older x86 devices |
i386_pentium-mmx |
Legacy x86 devices |
mipsel_24kc |
MediaTek MT7621 routers (GL.iNet, Xiaomi) |
mips_24kc |
Atheros/Qualcomm routers (AR71xx, QCA9xxx) |
mips_siflower |
Siflower SF19A28 (GL.iNet SFT1200) |
riscv64_riscv64 |
SiFive, StarFive VisionFive |
Check your architecture: grep OPENWRT_ARCH /etc/os-release or opkg print-architecture | grep -v all
Package Feed (automatic updates)
The install script registers the feed automatically. To add it manually:
ARCH=$(grep OPENWRT_ARCH /etc/os-release | cut -d'"' -f2)
# opkg
echo "src/gz nym-vpn https://packages.dial0ut.org/opkg/$ARCH" >> /etc/opkg/customfeeds.conf
# apk (point directly at the packages.adb index, like OpenWrt's own distfeeds.list)
echo "https://packages.dial0ut.org/apk/$ARCH/packages.adb" > /etc/apk/repositories.d/nym-vpn.list