Skip to content

net/pppoe-server: add PPPoE Access Concentrator (BRAS) plugin#5580

Open
ashimov wants to merge 1 commit into
opnsense:masterfrom
ashimov:add-net-pppoe-server
Open

net/pppoe-server: add PPPoE Access Concentrator (BRAS) plugin#5580
ashimov wants to merge 1 commit into
opnsense:masterfrom
ashimov:add-net-pppoe-server

Conversation

@ashimov

@ashimov ashimov commented Jul 25, 2026

Copy link
Copy Markdown

This PR adds net/pppoe-server, a PPPoE Access Concentrator (BRAS/BNG)
plugin built on mpd5, maintained by VEQNORA.

What it does

A GUI/API-managed PPPoE server for OPNsense: subscriber termination with
local or RADIUS authentication, IPv4 pools, accounting, a live session
table, per-session shaping and dual-stack IPv6.

Features

  • PPPoE server instances on physical or VLAN/QinQ interfaces
  • PAP / CHAP / MS-CHAPv2 against a local user DB or RADIUS
  • IPv4 address pools + per-user static addresses
  • RADIUS auth + accounting (Start/Interim/Stop, gigawords)
  • RADIUS CoA / RFC 5176 Disconnect (listener daemon, disabled by default)
  • Per-session rate limiting via the RADIUS mpd-limit VSA or a local
    ext-auth shaping backend (native mpd5 ng_car)
  • Dual-stack IPv6: IPv6CP link-local, SLAAC via Router Advertisements,
    static routed IPv6 prefixes per subscriber (Framed-IPv6-Route)
  • Live session table with per-session / per-user / per-AC disconnect
  • CARP high-availability interlock
  • Diagnostics via configd: config validate, secret-masked
    config_preview, secret-free support_bundle, Prometheus metrics

Dependencies

  • mpd5

Testing

Verified on OPNsense 26.7 / mpd5 5.9 with live PPPoE clients, a load
generator and FreeRADIUS, including a real two-node CARP handover.
make lint, make style and make package are clean.

Notes

  • New feature set is scoped to what has been tested on hardware; no
    capability is claimed that is not exercised.
  • QinQ: the AC binds the tagged device correctly; end-to-end double-tagged
    delivery depends on the surrounding L2 path trunking the tags.

New plugin providing a PPPoE server / Access Concentrator built on mpd5.

Features:
- PPPoE server instances on physical or VLAN/QinQ interfaces
- PAP, CHAP and MS-CHAPv2 against a local user database or RADIUS
- IPv4 address pools and per-user static addresses
- RADIUS authentication and accounting (Start/Interim/Stop, gigawords)
- RADIUS CoA / RFC 5176 Disconnect via a small listener daemon
- Per-session rate limiting via the RADIUS mpd-limit VSA or a local
  ext-auth shaping backend (mpd5 ng_car)
- Dual-stack IPv6: IPv6CP link-local, SLAAC via Router Advertisements,
  and static routed IPv6 prefixes per subscriber (Framed-IPv6-Route)
- Live session table with per-session/user/AC disconnect
- CARP high-availability interlock
- Diagnostics: config validation, secret-masked config preview,
  secret-free support bundle and Prometheus-format metrics via configd

Verified on OPNsense 26.7 / mpd5 5.9 with live PPPoE clients, a load
generator and FreeRADIUS, including a two-node CARP handover.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant