Guide  →  PPPoE & RADIUS on RouterOS

PPPoE + RADIUS on MikroTik:
the reasoning behind the script

The generator builds the config in seconds. This page covers the part that actually matters if you're running a WISP: why each piece exists, and where new deployments usually break.

Why PPPoE instead of static IPs or plain DHCP

A wireless ISP connects and disconnects subscribers constantly — someone stops paying, moves, or gets a plan upgrade. Static IP assignment means manually tracking every lease by hand, and plain DHCP gives you no clean way to authenticate a subscriber before handing them a connection at all.

PPPoE solves both problems at once. Every session starts with a login (username and password), so a subscriber literally cannot get an IP address without authenticating first. When their session ends — router reboot, someone unplugs the antenna, they stop paying — the IP and the rate-limit profile attached to it are released automatically. There's no lease to clean up and no orphaned static route sitting on your router six months later.

The trade-off is a small amount of protocol overhead per packet, which is exactly why the MTU/MRU settings in the generated script matter — more on that below.

What RADIUS is actually doing

RADIUS is an AAA protocol — Authentication, Authorization, Accounting. RouterOS can authenticate PPPoE logins against a local list of secrets, but that doesn't scale past a handful of subscribers, and it gives you no usage data. RADIUS moves all three jobs off the router and onto a server built for it — SAS4, GalaxyRAD, or anything else that speaks RFC 2865.

Authentication

When a subscriber's PPPoE client sends a username and password, RouterOS forwards it to the RADIUS server named in /radius. The server checks it against its own subscriber database and replies accept or reject — RouterOS never needs to know the password itself.

Authorization

On accept, the RADIUS server can hand back attributes — which profile to apply, what static IP to assign via Framed-IP-Address, session timeout limits. This is how a billing platform pushes a "10 Mbps package" or "expired, redirect to payment page" decision onto the router without anyone touching RouterOS directly.

Accounting

This is the part people skip and then wonder why their billing platform shows no usage data. The line set use-radius=yes accounting=yes interim-update=5m tells RouterOS to send accounting packets to the RADIUS server: a Start packet when the session begins, Interim-Update packets every 5 minutes with live byte counts, and a Stop packet with the final total when it ends. Without accounting=yes, your billing platform has no idea how much data anyone used.

Why 5 minutes specifically: shorter intervals (1–2 min) give more real-time-looking usage graphs but add router and RADIUS server load across hundreds of sessions. Longer intervals (15m+) mean a router crash between updates loses more unaccounted usage. 5 minutes is the balance most SAS4/GalaxyRAD deployments settle on.

Reading the generated script

In order, here's what each block in the generator's output actually does and why it's in that order:

BlockPurpose
/ip firewall natOne masquerade rule — every subscriber shares the router's WAN IP going out.
/radiusRegisters the AAA server and its shared secret, on the standard 1812/1813 ports.
/ppp aaaThe switch that actually turns on RADIUS for PPP — easy to forget, and the #1 reason "I added RADIUS but it's not authenticating."
/ip poolA fallback IP range, used only if RADIUS doesn't return a Framed-IP-Address for a session.
/ppp profileDNS servers and the rate-limit, formatted rx-rate/tx-rate — from the router's perspective, so rx is upload from the subscriber and tx is download to them.
/interface pppoe-server serverBinds everything to your subscriber-facing interface.
/ip firewall filterCloses Winbox and Telnet on the WAN side — optional, but there's rarely a good reason to leave router management reachable from the public internet.

Where new deployments actually break

MTU and MRU

PPPoE adds 8 bytes of overhead to every packet. If max-mtu and max-mru aren't set to 1480 (down from Ethernet's standard 1500), subscribers get intermittent issues that look like a bad connection but are actually packet fragmentation — sites that load fine but images or video randomly stall. This is one of the most common "why does my PPPoE feel flaky" support tickets, and it's a one-line fix.

CGNAT on the WAN side

If your uplink is Starlink or any other connection behind Carrier-Grade NAT, you don't get a public IP on the WAN interface at all — which means you can't reach the router remotely for monitoring or emergency changes without a separate tunnel (a VPS-hosted VPN, a reverse SSH tunnel, or a paid static-IP add-on if your provider offers one). This has nothing to do with the PPPoE/RADIUS config itself, but it's worth planning for before you have 40 subscribers and a router you can't reach at 2am.

RADIUS timeout with no fallback

If the RADIUS server is unreachable, new sessions fail to authenticate — existing sessions keep running, but nobody new can log in until it's back. Some operators add a second /radius entry pointing at a backup server for exactly this reason; RouterOS will fail over automatically if the first one stops responding.

Test before you trust it: after importing any generated script, connect one test subscriber first — not your whole base. Confirm the session actually shows up in your RADIUS platform's accounting logs with a nonzero byte count before rolling it out further.

Ready to generate your config?

Fill in your interfaces and RADIUS details and get a ready-to-import .rsc file in seconds.

Open the generator →