Files
Alpine_5G/README.md
nearxos 9dc35a57a2 Enhance 5G modem management with integrated web GUI and connection control
- Introduced a web GUI for managing 5G connections, replacing the standalone 5g-router service.
- Updated scripts to ensure exclusive access to the AT port, preventing conflicts.
- Improved troubleshooting documentation in 5G_MODEM_TROUBLESHOOTING.md, adding checks for processes using the AT port.
- Enhanced connection management in the web app, including auto-connect and detailed status APIs.
- Updated installation scripts to reflect changes in service management and dependencies.
2026-02-02 10:34:25 +02:00

7.0 KiB
Raw Permalink Blame History

Alpine 5G Router - Raspberry Pi 5 + Fibocom FM350-GL

A complete 5G router setup using Alpine Linux on Raspberry Pi 5 with a Fibocom FM350-GL modem.

Status: Working

The 5G modem is fully operational with CYTA Cyprus SIM card.

Documentation

File Description
README.md This file overview and reference
docs/QUICKSTART.md Quick start clone → install script → config → start
docs/DEPLOY.md First-time SSH and key-based deploy
docs/DNS.md DNS (resolv.conf, dnsmasq) for router and LAN
5G_MODEM_TROUBLESHOOTING.md Modem AT commands and troubleshooting
configure_fm350_5g.sh Manual configuration script (uses /etc/5g-router.conf)
CHANGELOG.md Version and feature notes
docs/WEBGUI.md Web GUI login (admin/support), permissions, install

Hardware

  • Board: Raspberry Pi 5
  • Modem: Fibocom FM350-GL (USB ID: 0e8d:7126)
  • OS: Alpine Linux v3.23.3
  • SIM: CYTA Cyprus (APN: internet)

Network Architecture

Internet (CYTA 5G)
        │
        ▼
  FM350-GL Modem
   (RNDIS eth1)
        │
        ▼
  Raspberry Pi 5
   Alpine Linux
        │
        ▼
   eth0.100 VLAN
   (192.168.1.1)
        │
        ▼
   LAN Clients

Quick Start (new device)

For a single-command flow from a fresh device, see docs/QUICKSTART.md. Summary:

  1. Clone or copy this repo to the device.
  2. Install packages: apk add iptables python3 py3-flask and pip install pyserial.
  3. Run ./scripts/install.sh installs Web GUI, config, and enables 5g-webgui service.
  4. Edit /etc/5g-router.conf if needed (APN, interfaces).
  5. Start: service 5g-webgui start
  6. Open http://<device-ip>:5000 to manage the router.

Note: The Web GUI now includes integrated 5G connection management. The standalone 5g-router service is kept for manual/fallback use but is no longer the default.

For SSH and key setup: docs/DEPLOY.md.


Manual Quick Start (step-by-step)

1. Install Required Packages

# Enable community repository
sed -i 's|#.*community|http://mirrors.neterra.net/alpine/v3.23/community|' /etc/apk/repositories
apk update

# Install packages
apk add modemmanager dnsmasq iptables libmbim-tools qmi-utils

2. Configure and Connect Modem

# Set APN for CYTA
cat /dev/ttyUSB1 & CAT_PID=$!
sleep 0.3
echo -e 'AT+CGDCONT=1,"IP","internet"\r' > /dev/ttyUSB1
sleep 2
kill $CAT_PID

# Activate connection
cat /dev/ttyUSB1 & CAT_PID=$!
sleep 0.3
echo -e 'AT+CGACT=1,1\r' > /dev/ttyUSB1
sleep 3
kill $CAT_PID

# Get modem IP
cat /dev/ttyUSB1 & CAT_PID=$!
sleep 0.3
echo -e 'AT+CGPADDR=1\r' > /dev/ttyUSB1
sleep 2
kill $CAT_PID
# Note the IP address returned (e.g., 10.156.167.104)

3. Configure Network Interface

# Replace MODEM_IP with the IP from AT+CGPADDR=1
MODEM_IP="10.156.167.104"

ip link set eth1 up
ip addr flush dev eth1
ip addr add $MODEM_IP/32 dev eth1
ip route add default dev eth1 metric 50

# Test connectivity
ping -c 3 8.8.8.8

4. Setup NAT for LAN

# Enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Configure NAT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth0.100 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0.100 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Save rules
iptables-save > /etc/iptables/rules.v4

Key Configuration Details

Modem USB Modes

Mode USB ID Description Status
40 0e8d:7126 RNDIS mode Working
41 0e8d:7127 Extended mode AT broken

Important: Stay in Mode 40 - AT commands work on /dev/ttyUSB1.

Working AT Commands

Command Description
AT Test communication
AT+CSQ Signal strength
AT+CGDCONT=1,"IP","internet" Set APN
AT+CGACT=1,1 Activate connection
AT+CGPADDR=1 Get assigned IP
AT+CGCONTRDP=1 Get DNS servers
AT+GTUSBMODE? Check USB mode

CYTA Cyprus Network Info

  • APN: internet
  • DNS Primary: 195.14.130.220
  • DNS Secondary: 195.14.154.100

Services

The following services are configured to start on boot:

# Check service status
rc-status

# Services enabled:
# - dnsmasq (DHCP/DNS)
# - iptables-restore (firewall rules)
# - 5g-router (connection script)

Files on Device (after install)

Path Purpose
/etc/5g-router.conf Config (APN, interfaces, failover, watchdog) from repo etc/5g-router.conf.example
/usr/local/bin/connect-5g.sh Connection script (run by service or manually)
/usr/local/bin/status-5g.sh Status (modem, interface, route, last speedtest)
/usr/local/bin/healthcheck-5g.sh Health check for monitoring (exit 0/1)
/usr/local/bin/speedtest-5g.sh Optional speedtest cron target
/usr/local/bin/rotate-5g-log.sh Optional log rotation for 5g-router.log
/etc/init.d/5g-router OpenRC service
/etc/init.d/iptables-restore Firewall restore service
/etc/iptables/rules.v4 Saved firewall rules (from repo etc/iptables/rules.v4)
/etc/dnsmasq.conf DHCP configuration (if using dnsmasq)
/var/log/5g-router.log Connection log
/var/log/speedtest-5g.log Optional speedtest log

Troubleshooting

Modem not up (WAN down, no IP)

On the device, run the modem/WAN diagnostic:

/usr/local/bin/diag-modem-up.sh

It reports service status, modem USB (Mode 40 vs 41), WAN interface state, AT port, last log lines, and suggested fixes. See docs/WEBGUI.md → Troubleshooting: Modem not up.

Modem not responding to AT commands

  1. Check modem is in Mode 40: lsusb | grep 7126
  2. Use /dev/ttyUSB1 for AT commands
  3. Don't use stty - send commands directly

DHCP not working on eth1

This is normal - RNDIS mode doesn't provide DHCP. Configure IP manually using the address from AT+CGPADDR=1.

Connection drops

Re-run the connection script:

/usr/local/bin/connect-5g.sh

Or restart the service:

service 5g-router restart

Verification Commands

# Status script (modem, interface, default route, last speedtest)
/usr/local/bin/status-5g.sh
/usr/local/bin/status-5g.sh --json

# Diagnostics (run on device to debug modem/WAN or AT port)
/usr/local/bin/diag-modem-up.sh    # why modem not up
/usr/local/bin/diag-at-port.sh     # why no AT data in Web GUI

# Health check (for Nagios / Uptime Kuma)
/usr/local/bin/healthcheck-5g.sh

# Manual checks
lsusb | grep -i fibocom
ip addr show eth1
ip route show
ping -c 3 8.8.8.8
iptables -t nat -L -n -v
tail -f /var/log/5g-router.log

Optional: scheduled speedtest and log rotation

# Cron: speedtest every 6 hours, log rotation daily
# Add to crontab -e (root):
# 0 */6 * * * /usr/local/bin/speedtest-5g.sh
# 0 3 * * * /usr/local/bin/rotate-5g-log.sh