Full survey of telep-router — the Asus RT-AX89X running OpenWrt 24.10.0 that serves the Telephely site LAN. Covers hardware, firmware, network/firewall config, WiFi, Tailscale, and the known footguns to be aware of before making changes.

For Agents

Access: /usr/bin/ssh root@telep-router (reachable over Tailscale MagicDNS, no port-forward needed). Config system: OpenWrt UCI — change via uci set ... + uci commit <pkg> + reload the relevant init script. Never hand-edit /etc/config/* if a UCI path exists. Blast radius: this is the only gateway for the site LAN. A bad network or firewall commit locks you out of everything except the physical console. Before inbound/port-forward work, read Double-NAT — the router does not hold a public IP.

Hardware & Firmware

PropertyValue
DeviceAsus RT-AX89X
Targetqualcommax/ipq807x
Archaarch64_cortex-a53
FirmwareOpenWrt 24.10.0
Buildr28427-6df0e3d02a
Kernel6.6.73

Resources

Comfortable headroom — this router is nowhere near its limits.

ResourceTotalUsed / Free
RAM887 MB~594 MB available
Overlay (/dev/ubi0_5)206 MB20 MB used (10%)
/rom100% full

/rom at 100% is normal

/rom is the read-only squashfs base image. It is supposed to report full — it is not a disk-space problem and needs no action. The number that actually matters is the overlay, and that is at 10%. There is plenty of room to install packages.

Network

Topology

graph TD
    ISP["<b>Upstream router</b><br/>192.168.254.1<br/><i>not ours</i>"]
    WAN["<b>WAN</b> (DHCP client)<br/>192.168.254.2/24"]
    BR["<b>telep-router</b><br/>br-lan 192.168.1.1/24<br/><i>masq + mtu_fix</i>"]
    COP["10g-copper<br/><i>only port with link</i>"]
    IDLE["lan1-8 + 10g-sfp<br/><i>no link</i>"]
    AP["WiFi APs<br/>radio0 + radio1<br/>SSID telep1"]
    TS["<b>Tailscale</b><br/>100.115.194.51"]

    ISP -->|"<b>NAT #1</b>"| WAN
    WAN --> BR
    BR -->|"<b>NAT #2</b> (masq)"| ISP
    BR --> COP
    BR -.-> IDLE
    BR --> AP
    BR --- TS

    style ISP fill:#3d2020,stroke:#c05050,color:#fff
    style BR fill:#264653,stroke:#2a9d8f,color:#fff
    style WAN fill:#2d2d2d,stroke:#888,color:#fff
    style COP fill:#2d2d2d,stroke:#888,color:#fff
    style IDLE fill:#2d2d2d,stroke:#555,color:#999
    style AP fill:#2d2d2d,stroke:#888,color:#fff
    style TS fill:#264653,stroke:#2a9d8f,color:#fff

LAN

  • br-lan = 192.168.1.1/24 — the gateway address for the site.
  • Bridge members: lan1lan8, 10g-sfp, 10g-copper, and both WiFi APs.
  • Only 10g-copper currently has a link. Every other physical port is idle.

WAN

  • DHCP client, leased 192.168.254.2/24 from upstream gateway 192.168.254.1.

Double-NAT

The router sits behind another router

The WAN address (192.168.254.2) is an RFC1918 private address, not a public one. Traffic is NATed twice: once by telep-router (masquerade), once by the upstream box at 192.168.254.1.

Consequences:

  • A port-forward configured here is not reachable from the internet — it also needs a matching forward on the upstream router (which we may not control).
  • Anything that needs inbound reachability should go over Tailscale instead of port-forwarding. That is the path of least resistance and already works today.
  • Protocols that dislike double-NAT (some VoIP/SIP, strict-NAT gaming, UPnP/NAT-PMP chains) may misbehave.

DHCP (dnsmasq)

SettingValue
Pool start.100
Limit150 addresses
Lease time12h
Domainlan

Firewall

ZoneInputOutputForwardNotes
lanACCEPTACCEPTACCEPT
wanREJECTACCEPTREJECTmasq=1, mtu_fix=1
camsisolated camera VLAN, see

Forwardings: lan → wan and lan → cams. There is deliberately no cams → wan rule. One DNAT rule (NTP), added for the cameras.

Camera VLAN (telep-cc)

Added 2026-07-14 to isolate the site’s IP cameras from everything else. Consumed by telep-mainframe, which pulls RTSP from it.

PropertyValue
Subnet192.168.30.0/24
SSIDhidden, WPA2-PSK
Client isolationon
OccupantTapo TC47 @ 192.168.30.119

Rules:

  • cams → wan REJECTED — the cameras have no internet at all. No cloud, no phone-home, no firmware calling out.
  • lan → cams ALLOWED — this is the only path in, and it is how Frigate reaches RTSP.
  • NTP is DNAT’d back to the router, so a camera with no internet still keeps its clock.

WPA2, not WPA3 — and that is forced

The camera VLAN runs WPA2-PSK because Tapo hardware does not support WPA3-SAE. The isolation (no internet, no lateral path, hidden SSID, client isolation) is what carries the security here, not the WiFi crypto.

The Tapo app can no longer reach the camera

Consequence of the above: no cloud path, and a phone on the LAN is a different subnet with client isolation on. Changing a camera setting now requires temporarily reopening the VLAN. See Camera network.

Hidden-SSID rejoin was tested — the camera was deauthed and re-associated cleanly, keeping its lease.

WiFi

RadioBandChannelMode
radio05 GHz36HE80
radio12.4 GHz1HE20
  • SSID telep1 on both radios (single roaming SSID).
  • Encryption: WPA3-SAE (encryption='sae').

The PSK is only 8 characters

SAE’s dragonfly handshake means an attacker cannot capture a handshake and crack it offline — each guess costs an online interaction, so a short passphrase is far less catastrophic than it would be under WPA2. But 8 chars is still short, and it removes any margin if a downgrade/transition-mode path or a future SAE weakness ever appears. Worth lengthening when convenient.

Tailscale

PropertyValue
Version1.80.3
Init scriptS80tailscale
Firewall modenftables
Port41641
State file/etc/tailscale/tailscaled.state
Tailnet IP100.115.194.51 (telep-router)

Tailnet peers: telep-router, ai, personal-mac, iphone15, ipad, docktape-mac.

This is what makes the router reachable at all despite the Double-NAT — SSH to it via MagicDNS from any tailnet device.

Packages

174 installed — essentially stock. The only things added beyond the base image:

  • tailscale
  • luci-app-firewall
  • luci-app-package-manager

Notably absent (i.e. available as future improvements): adblock, SQM / QoS, DNS-over-HTTPS, wireguard.

Changes Made (2026-07-13)

Hostname was still OpenWrt

The name telep-router existed only as a Tailscale MagicDNS name. The device itself did not know it:

  • kernel hostname → OpenWrt
  • uname -nOpenWrt
  • uci get system.@system[0].hostnameOpenWrt

Fixed so all three agree:

uci set system.@system[0].hostname='telep-router'
uci commit system
/etc/init.d/system reload

The shell prompt, syslog entries, and DHCP-advertised hostname now all say telep-router.

Gotchas

1. WiFi ifaces declare network='lan wan'

Both wifi-iface sections list network='lan wan', and network.wan carries type='bridge'.

Currently inert — the APs only ever land in br-lan, because wan is not actually instantiated as a bridge device. So nothing is broken today.

But it is a live footgun. It is one config change away from bridging the wireless APs directly onto the WAN side, which would put WiFi clients outside the firewall. Should be cleaned up to network='lan' on both ifaces.

2. 8-character WiFi PSK

See WiFi. SAE mitigates offline cracking; the passphrase is still short.

3. Double-NAT

See Double-NAT. Know this before attempting any port-forward or inbound work.

macOS: bare ssh is broken by a shell wrapper

On the Mac, a shell wrapper/alias shadows ssh and breaks the connection. Invoke the absolute path:

/usr/bin/ssh root@telep-router

This applies to any script or agent automating against the router from macOS.

Security Gaps

Known and unresolved as of 2026-07-14. None are actively exploited; all are worth closing.

GapWhy it matters
8-char WPA3 PSK on telep1See — SAE blunts offline cracking, but there is no margin left.
dropbear password auth enabledSSH accepts passwords. Should be keys-only.
LuCI on plain HTTP (port 80)The admin UI credentials cross the LAN in cleartext.
Plaintext DNSAll lookups are visible to the upstream network. DoH/DoT is available and unused.
OpenWrt 24.10.0 not patchedNot on the latest point release.

Open Items

  • Clean up network='lan wan'network='lan' on both wifi-iface sections.
  • Lengthen the WiFi PSK beyond 8 characters.
  • Close the Security Gaps: dropbear keys-only, LuCI behind HTTPS, DoH, patch to the latest 24.10.x.
  • Consider adblock / DoH / SQM — plenty of overlay space (10% used) and RAM (594 MB free) to support them.