Skip to content

Beryl AX (GL-MT3000) Setup - 2026-01-19

Pocket-sized AX3000 Wi-Fi 6 travel router for mobile homelab.

Specs

Component Details
Model GL.iNet Beryl AX (GT-MT3000)
CPU MediaTek MT7981B 1.3GHz dual-core (Arm Cortex-A53)
RAM / Flash 512MB / 256MB
WiFi AX3000 (574Mbps 2.4GHz + 2402Mbps 5GHz)
Ports 2.5G WAN, 1G LAN, USB 3.0, USB-C power
VPN WireGuard (300Mbps), OpenVPN (150Mbps)
Size 120 x 83 x 34mm, ~200g
Firmware OpenWrt 21.02 (Kernel 5.4) with GL.iNet UI

Phase 1: Stock Firmware Exploration

Initial Setup

  1. Unbox, connect USB-C power
  2. Connect to GL-MT3000-xxx WiFi (password on device label)
  3. Access admin panel: https://192.168.8.1 (accept self-signed cert warning)
  4. Set admin password
  5. Configure WiFi SSID and password

Configured Settings

Setting Value
SSID 2.4GHz mbohapy
SSID 5GHz mbohapy-5G
WiFi Password (stored in KeepassXC)
Admin Password (stored in KeepassXC)
SSH Enabled

Features Tested

  • [x] Repeater mode - Extend hotel/cafe WiFi securely
  • [~] WireGuard VPN client - Optional, use Tailscale exit node instead
  • [x] Tailscale - Joined Headscale mesh as beryl-ax
  • [x] AdGuard Home - Primary DNS ad-blocking for mobile kit
  • [ ] USB storage - File sharing via USB 3.0
  • [ ] LuCI interface - Advanced OpenWrt settings
  • [ ] Toggle switch - Hardware VPN on/off
  • [x] USB tethering - Tested with Redmi A5, works (slow but functional)

Network Modes

Mode Use Case
Router Connect to ethernet WAN
Repeater Extend existing WiFi
Access Point Create WiFi from ethernet
Extender Bridge two networks
Tethering Share phone's mobile data

Default Settings

  • Admin panel: https://192.168.8.1 (HTTP also works)
  • LAN subnet: 192.168.8.0/24
  • DHCP range: 192.168.8.100-200

Note: HTTPS uses self-signed certificate - browser warning is normal and safe to accept on LAN

Phase 2: Firmware Options

Option Base Pros Cons
Stock GL.iNet OpenWrt 21.02 Easy UI, VPN presets, toggle switch Older kernel
GL.iNet Open Source OpenWrt 23.05 Latest kernel, open WiFi drivers May lose some GL features
Vanilla OpenWrt OpenWrt 23.05.x Full control, latest packages Flashing issues, no GL.iNet UI

Firmware URLs

Flashing Notes

  • Stock firmware can be upgraded via web UI
  • Vanilla OpenWrt flashing has reported issues
  • Always backup before flashing: System > Backup
  • Recovery: Hold reset 10s during boot for uboot

Phase 3: Homelab Integration

Tailscale on Beryl (Completed)

GL.iNet UI doesn't expose custom server option. Use SSH instead.

Important: Use a pre-auth key to avoid ephemeral node timeout (30min idle = disconnect).

# 1. Create pre-auth key on VPS (1 year expiration)
ssh vps 'sudo docker exec headscale headscale preauthkeys create --user 1 --reusable --expiration 8760h'

# 2. SSH to Beryl
ssh root@192.168.8.1

# 3. Connect with authkey (persistent registration)
tailscale up --login-server=https://hs.cronova.dev --hostname=beryl-ax --authkey=<KEY> --accept-routes --accept-dns=false

# 4. Enable auto-start (survives reboots)
/etc/init.d/tailscale enable

If disconnected/logged out, reset and re-register:

tailscale down
tailscale logout
tailscale up --login-server=https://hs.cronova.dev --hostname=beryl-ax --authkey=<KEY> --accept-routes --accept-dns=false
/etc/init.d/tailscale enable

Verify:

tailscale status
/etc/init.d/tailscale enabled && echo "Auto-start enabled" || echo "Not enabled"

Exit Node (On-Demand VPN)

Use Tailscale exit node instead of WireGuard - easier to toggle, same benefit.

# Enable exit node (route all traffic through VPS)
tailscale set --exit-node=vps-vultr

# Disable exit node (direct connection)
tailscale set --exit-node=

When to use

  • Untrusted WiFi (hotels, cafes)
  • Need US IP for geo-restricted content

When NOT to use

  • Local banking (homebanking rejects VPS IPs)
  • Local streaming services
  • Normal browsing (adds latency)

DNS Strategy (Dual-DNS)

Mobile kit uses two DNS ad-blockers for redundancy:

Device Role Why
Beryl AX AdGuard Home (primary) Built-in, lightweight, always on with router
RPi 5 Pi-hole (secondary) Full-featured, but RPi 5 may be used for tinkering

Setup

  1. Enable AdGuard Home: Applications > AdGuard Home
  2. Configure upstream DNS (Cloudflare/Quad9)
  3. Optional: Add RPi 5 Pi-hole as fallback DNS in DHCP settings

Travel Kit Configuration

[Hotel WiFi] --> [Beryl AX (Repeater)] --> [Your Devices]
                      |
                      +--> AdGuard Home (primary DNS, ad blocking)
                      +--> Tailscale mesh (homelab access)
                      +--> WireGuard to VPS (optional, encrypted exit)
                      +--> RPi 5 Pi-hole (fallback DNS, when available)

Useful Commands

# SSH to Beryl (after enabling SSH in UI)
ssh root@192.168.8.1

# Check system info
cat /etc/glversion
uname -a

# View connected clients
cat /tmp/dhcp.leases

# Check VPN status
wg show

Mobile Homelab Vision

Device Role IP
Beryl AX Travel router, AdGuard Home (primary DNS) 192.168.8.1
MacBook Primary workstation DHCP
Phone (mombeu) Mobile client DHCP
RPi 5 Pi-hole (secondary DNS), tinkering 192.168.8.5

Security Baseline

Hardened: 2026-01-19

Access Control

Service Port Bind Address WAN Access Status
SSH 22 192.168.8.1 Blocked ✓ LAN-only
Admin UI 80, 443 0.0.0.0 Blocked (firewall) ✓ Secured
Admin UI 8080, 8443 127.0.0.1 N/A ✓ Localhost
AdGuard Home 3000 192.168.8.1 Blocked ✓ LAN-only
AdGuard DNS 3053 0.0.0.0 Blocked (firewall) ✓ Secured

Firewall Rules

WAN → Default DROP policy
LAN → ACCEPT (trusted)
Tailscale → ACCEPT (trusted)

Critical: All WAN traffic hits zone_wan_src_DROP - default deny.

Authentication

Component Method Status
Admin UI Password Set (KeepassXC)
SSH Password Active (LAN-only, Tailscale OK)
AdGuard Home None No login configured

TODO: Add SSH key authentication, disable password.

Firmware

Component Version Date Checked
GL.iNet Firmware 4.8.1 2026-01-19
OpenWrt 21.02-SNAPSHOT 2026-01-19

Status: Up to date (no updates available)

Check for updates

Security Commands Reference

# Verify SSH is LAN-only
netstat -tuln | grep :22
# Should show: 192.168.8.1:22

# Verify AdGuard is LAN-only
netstat -tuln | grep :3000
# Should show: 192.168.8.1:3000

# Check WAN firewall (should DROP all)
iptables -L zone_wan_input -n -v

# Check Tailscale auto-start
/etc/init.d/tailscale enabled && echo "OK" || echo "FAILED"

Threat Model

Trusted networks

  • LAN (192.168.8.0/24) - your devices
  • Tailscale mesh (100.x.x.x) - your homelab

Untrusted networks

  • WAN (hotel WiFi, cafe, tethering) - hostile

Defense in depth

  1. Firewall blocks all WAN ports by default
  2. Services bind to LAN IP only (SSH, AdGuard)
  3. Localhost-only for sensitive services (uhttpd)
  4. Tailscale provides secure remote access

Backup & Recovery

Create Backup

# 1. SSH to Beryl AX
ssh root@192.168.8.1

# 2. Create backup with timestamp
sysupgrade -b /tmp/beryl-ax-backup-$(date +%Y%m%d-%H%M).tar.gz

# 3. Exit SSH
exit

# 4. Copy to MacBook (from MacBook terminal)
mkdir -p ~/homelab/backups/beryl-ax
scp -O root@192.168.8.1:/tmp/beryl-ax-backup-*.tar.gz ~/homelab/backups/beryl-ax/

# 5. Verify backup
ls -lh ~/homelab/backups/beryl-ax/
tar -tzf ~/homelab/backups/beryl-ax/beryl-ax-backup-*.tar.gz | head -10

What's backed up

  • Network settings (WiFi, DHCP, DNS)
  • Firewall rules
  • Tailscale configuration
  • AdGuard Home settings
  • Admin passwords
  • SSH configuration

NOT backed up

  • Firmware itself
  • AdGuard Home logs/statistics
  • DHCP leases

Restore from Backup

If router is reset or bricked

# 1. Copy backup to router
scp -O ~/homelab/backups/beryl-ax/beryl-ax-backup-*.tar.gz root@192.168.8.1:/tmp/

# 2. SSH and restore
ssh root@192.168.8.1
sysupgrade -r /tmp/beryl-ax-backup-*.tar.gz

# Router will reboot with restored settings

After restore

  • Verify Tailscale: tailscale status
  • Verify AdGuard: netstat -tuln | grep 3000
  • Verify SSH: netstat -tuln | grep :22

Backup Schedule

When Why
Before travel Pre-trip safety net
After config changes Capture new settings
Weekly during heavy use Prevent data loss

Storage

  • Local: ~/homelab/backups/beryl-ax/
  • Optional: Commit to git (contains passwords - use SOPS if sharing)
  • Optional: Upload to Vaultwarden as attachment

Latest backup: beryl-ax-backup-20260119-1538.tar.gz (40KB)

Resources

Progress Log

2026-01-19

  • [x] Unbox and initial setup
  • [x] Configure WiFi SSID (mbohapy / mbohapy-5G)
  • [x] Set admin password (passphrase style)
  • [x] Enable SSH access
  • [x] Test USB tethering (Redmi A5 - works)
  • [x] Install and configure Tailscale via SSH
  • [x] Join Headscale mesh as beryl-ax
  • [x] Test repeater mode
  • [x] Configure AdGuard Home