Skip to content

Network Topology

Network layout across Toronto and Kingston locations with Tailscale VPN.

Current Field Network

At TMU / school, the portable GL.iNet router is the preferred network anchor. It joins TMU Wi-Fi with WPA2-Enterprise and gives the Mac plus lab devices a private LAN. The lab Ubuntu host runs Home Assistant and controls the iDevices switch that acts as the robot's main power switch.

Router GL.iNet GL-MT3000 / Beryl AX
Hostname eph107
LAN 192.168.8.0/24, gateway 192.168.8.1
Tailscale IP 100.84.198.19
Uplink TMU Wi-Fi, WPA2-Enterprise PEAP/MSCHAPv2
Current uplink IP DHCP, observed as 10.16.144.207/20
Admin UI https://eph107.tailee9084.ts.net/ or LAN http://192.168.8.1/
WebFinder https://eph107.tailee9084.ts.net:9321/.well-known/web-finder.json
Home Assistant http://192.168.8.241:8123/ on jeffxi-ubuntu
Robot power switch iDevices Switch 00101614, 192.168.8.115, HA entity switch.switch_00101614
flowchart TD
    TMU["TMU Wi-Fi<br/>DHCP 10.16.x.x"] --> GL["eph107<br/>GL-MT3000<br/>192.168.8.1"]
    GL --> ZMACS["zmac<br/>192.168.8.109<br/>TS: 100.117.222.41"]
    GL --> UBUNTU["jeffxi-ubuntu<br/>HA 192.168.8.241<br/>TS: 100.108.86.74"]
    GL --> POWER["iDevices Switch 00101614<br/>main robot power switch<br/>192.168.8.115"]
    GL --> LAB["robot tools / tablets / lab devices<br/>192.168.8.x"]
    GL --> TSNET["Tailnet<br/>eph107: 100.84.198.19"]

See Field Router for setup, recovery, and WebFinder details.

Main robot power switch

Switch 00101614 is not a random lab accessory. It is the main robot power switch. Treat switch.switch_00101614 as a power-control command and do not toggle it while robot software is running unless intentionally powering the robot on/off.


Locations

Toronto (Home) -- Primary location

ISP Bell Canada via PPPoE
Public IP Dynamic via PPPoE (no CGNAT, real public IP)
Router UniFi Cloud Gateway Ultra (UX), firmware 4.0.12.17054
WAN PPPoE (ppp0)
LAN 192.168.177.0/24 (Default network)
UPnP Enabled (with NAT-PMP + Secure Mode)

Devices:

Device LAN IP Tailscale IP Tags
zmac (Mac) 192.168.177.133 100.117.222.41 tag:clients
tsrelay (relay) 192.168.177.228 100.95.40.19 tag:relay

Secondary network: Bell Wi-Fi (separate Bell Home Hub router). More permissive NAT (Endpoint-Independent Filtering). Direct Tailscale connections work without UPnP.


Kingston (Remote) -- Workstation location

ISP Virgin Plus (Bell flanker brand) via PPPoE (CGNAT)
Public IP CGNAT -- not directly routable
Router UniFi
WAN IP from Bell 10.130.37.119 (private, confirms CGNAT)
LAN 192.168.2.0/24, gateway 192.168.2.1

Workstation:

Hostname workstation
LAN IP 192.168.2.239 (via enp5s0, 1G)
Tailscale IP 100.101.214.44, tag:clients
GPU NVIDIA RTX 3090

Two physical NICs: - enp5s0 (1G): Connected to Kingston UniFi, active internet path - enp3s0 (10G): Has PPPoE config for Bell on VLAN 35 (enp3s0.35). Currently INACTIVE. Keep PPPoE off -- stale endpoints confuse Tailscale's hole-punching.

Other Kingston devices:

Device LAN IP Tailscale IP
workstation-kvm -- 100.67.214.102
storage (Synology DS620slim, DSM 7.3.2) 192.168.2.26 100.106.137.64

Backup access: Teleport VPN can reach workstation at LAN IP 192.168.2.239 when Tailscale is down.


Network Diagram

flowchart TD
    subgraph TOR["Toronto — Home"]
        TONT["Bell ONT"] -- "PPPoE" --> UX["UniFi UX<br/>dynamic public IP"]
        UX --> ZMAC["zmac<br/>192.168.177.133<br/>TS: 100.117.222.41"]
        UX --> TSR["tsrelay<br/>192.168.177.228<br/>TS: 100.95.40.19<br/>relay :40000"]
        BHH["Bell Home Hub"] --> ZMAC2["zmac (Bell Wi-Fi)"]
    end
    subgraph KNG["Kingston — Remote"]
        CGNAT["Bell CGNAT"] --> KONT["Bell ONT"]
        KONT -- "PPPoE" --> KUX["UniFi<br/>WAN 10.130.37.119"]
        KUX --> WS["workstation<br/>192.168.2.239<br/>TS: 100.101.214.44"]
        KUX --> STOR["storage<br/>192.168.2.26<br/>TS: 100.106.137.64"]
    end

Tailscale Devices

Device Hostname Tailscale IP OS Tags Location
zmac zeul-mac 100.117.222.41 macOS tag:clients Toronto
field-router eph107 100.84.198.19 OpenWrt -- TMU / mobile
jeffxi-ubuntu jeffxi-ubuntu 100.108.86.74 Ubuntu -- TMU / lab
tsrelay tsrelay 100.95.40.19 Linux tag:relay Toronto
workstation workstation 100.101.214.44 Linux tag:clients Kingston
workstation-kvm workstation-kvm 100.67.214.102 Linux -- Kingston
zeul-iphone zeul-iphone 100.113.247.15 iOS -- Mobile
robin-mac robin-mac 100.99.96.72 macOS -- Offline
robin-iphone robin-iphone 100.105.68.71 iOS -- Offline
storage storage 100.106.137.64 Linux (DSM 7) -- Kingston

Services and On-Demand Desktop

Workstation (Kingston)

  • Tailscale
  • Sunshine + Moonlight desktop: on demand via stream-desktop
  • GDM: autologin enabled, Wayland disabled (X11 only for NVIDIA), normally stopped until stream-desktop start
  • X11: headless virtual display via xorg.conf MetaModes, normally stopped until stream-desktop start

tsrelay (Toronto)

Hardware Raspberry Pi 4 Model B Rev 1.4, 8GB RAM, 4-core ARM Cortex-A72 @ 1.8 GHz
Role Tailscale peer relay, port 40000 (--relay-server-port=40000)
Port forward UDP 40000 -> tsrelay on Toronto UniFi
NIC Wired gigabit Ethernet (eth0)

Throughput Benchmarks (Tailscale Direct, Feb 2026)

Pi (wired) to Workstation

Direction TCP (single) TCP (4 streams) UDP ceiling
Pi to WS (upload) 434 Mbps -- 323+ Mbps (0% loss at 500M)
WS to Pi (download) 119 Mbps 248 Mbps ~260 Mbps (drops above)

Mac (Wi-Fi) to Workstation

Direction TCP (single)
Mac to WS 109 Mbps
WS to Mac 81 Mbps

Raw ISP speeds (Ookla)

Location To Bell server To Rogers (cross-network)
Kingston (WS) 896 down / 342 up Mbps 99 down / 212 up Mbps
Toronto (Pi) Not tested Not tested

Bottlenecks

  1. Kingston CGNAT outbound: Hard packet drops above ~260 Mbps. Cross-network speeds drop significantly vs Bell-internal tests.
  2. Mac Wi-Fi: Caps at ~250 Mbps LAN, further reduced through WireGuard to ~80-109 Mbps. Wired connection fixes this.
  3. Tailscale MTU 1280: More packets per byte, higher overhead.