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.
Manraj Local SSH Access¶
Manraj's Windows laptop (MANIBOB) was provisioned for local-network SSH on
2026-08-27. It is not enrolled in Zeul's tailnet. The public key fingerprint is
SHA256:HirgBqvYEsLkRKRJ/MScUqCc9fM5NqQMpbahP/1Oue0.
| Target | Local SSH endpoint | Account and privilege |
|---|---|---|
| jeff-xi | manraj@192.168.8.241 |
sudo member |
| Field router | root@192.168.8.1 |
OpenWrt root, key only |
| Robot router | root@192.168.8.190 |
OpenWrt root, key only |
| Robot Jetson | manraj@192.168.123.164 through 192.168.8.190 |
sudo member |
| Vicon Windows | manraj@192.168.8.132 |
Windows Administrator |
The private key stays on MANIBOB. The initial account password and onboarding
record are stored outside the repository in
the private robot infrastructure secrets file provided separately.
For remote access, Manraj's separate tailnet contains only his laptop
(MANIBOB, 100.94.97.30) and Vicon Windows (100.84.179.109). The Vicon host
is used as an SSH jump host to the local lab targets; it does not advertise the
lab subnet or act as an exit node.
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¶
- Kingston CGNAT outbound: Hard packet drops above ~260 Mbps. Cross-network speeds drop significantly vs Bell-internal tests.
- Mac Wi-Fi: Caps at ~250 Mbps LAN, further reduced through WireGuard to ~80-109 Mbps. Wired connection fixes this.
- Tailscale MTU 1280: More packets per byte, higher overhead.