Skip to content

PPPoE Client

RouterOS can operate as a PPPoE client, connecting to an ISP’s Broadband Remote Access Server (BRAS) over any Ethernet-type interface. This is the typical configuration for home routers, CPE devices, and branch-office gateways on DSL, GPON fiber, or Ethernet-based broadband services.

The PPPoE client negotiates credentials and IP addressing over the WAN link, then presents a routable pppoe-outN interface to the rest of the router where routing, NAT, and firewall rules apply as normal.

FeatureValue
Sub-menu/interface pppoe-client
Monitor/interface pppoe-client monitor
AuthenticationPAP, CHAP, MS-CHAPv1, MS-CHAPv2
Address assignmentFrom ISP IPCP (dynamic) or static override
Default routeOptional — add-default-route=yes
DNSOptional — use-peer-dns=yes
Available sinceRouterOS v2.9

When the PPPoE client interface is enabled, RouterOS initiates the standard two-phase PPPoE handshake:

  1. Discovery phase — RouterOS broadcasts a PADI on the WAN interface. The ISP BRAS responds with a PADO, RouterOS sends a PADR selecting the concentrator, and the BRAS confirms with a PADS containing the session ID.
  2. Session phase — PPP negotiation begins over the established session. LCP negotiates MTU/MRU and authentication method. The chosen protocol (CHAP, MS-CHAPv2, etc.) authenticates the subscriber credentials. IPCP assigns the client’s IP address, default gateway, and DNS servers.
RouterOS (CPE) ISP BRAS
│──── PADI (broadcast) ─────────────────────────▶│
│◀─── PADO (AC-Name, service-name) ──────────────│
│──── PADR (select AC) ──────────────────────────▶│
│◀─── PADS (session-id) ──────────────────────────│
│ │
│══════════ PPP (LCP → Auth → IPCP) ══════════════│
│◀─── IP address + gateway + DNS (via IPCP) ──────│

A PPPoE client creates a named pppoe-outN interface (user-defined name). When connected, the interface has an assigned IP address and is visible in /interface print. All routing, firewall, NAT, and queue rules referencing this interface apply once the session is established.

The underlying physical interface (e.g., ether1) carries raw Ethernet frames; the PPPoE session is layered on top. The physical interface itself does not carry IP traffic — all routed traffic flows through the pppoe-outN interface.

The minimum required configuration is the physical interface, ISP username, and password:

/interface pppoe-client
add name=pppoe-out1 \
interface=ether1 \
user=ispuser \
password=isppassword \
add-default-route=yes \
use-peer-dns=yes \
disabled=no
ParameterDescription
nameLogical name for this PPPoE client interface
interfacePhysical (or VLAN) interface connected to the ISP
userPPP username provided by the ISP
passwordPPP password provided by the ISP
add-default-routeAutomatically install a default route via the PPPoE gateway when connected
use-peer-dnsAccept DNS server addresses pushed by the ISP via IPCP
disabledSet to no to enable the client immediately

By default, RouterOS negotiates the best authentication method supported by both sides. To restrict to specific methods:

/interface pppoe-client
set pppoe-out1 allow=chap,mschap2
ValueProtocol
papPassword Authentication Protocol (plaintext — avoid if possible)
chapChallenge Handshake Authentication Protocol
mschap1Microsoft CHAP version 1
mschap2Microsoft CHAP version 2 (most common on modern ISPs)

Most ISPs require MS-CHAPv2. If the connection fails with authentication failed, check that the ISP’s required method is included in allow=.

PPPoE adds an 8-byte header to each Ethernet frame. On a standard 1500-byte Ethernet path, this leaves 1492 bytes for the PPP payload, yielding a PPPoE MTU of 1480 bytes (1492 minus the 12-byte PPP/HDLC headers).

/interface pppoe-client
set pppoe-out1 max-mtu=1480 max-mru=1480

To prevent fragmentation of TCP sessions (PMTUD black holes), clamp TCP MSS on traffic entering the PPPoE interface:

/ip firewall mangle
add chain=forward protocol=tcp tcp-flags=syn \
in-interface=pppoe-out1 \
action=change-mss new-mss=clamp-to-pmtu \
comment="Clamp TCP MSS for PPPoE WAN"
add chain=forward protocol=tcp tcp-flags=syn \
out-interface=pppoe-out1 \
action=change-mss new-mss=clamp-to-pmtu \
comment="Clamp TCP MSS for PPPoE WAN (outbound)"

Alternatively, enable MSS clamping in the PPP profile applied to this client:

/ppp profile
set default change-tcp-mss=yes

Some ISPs require the client to specify a particular Access Concentrator (AC) name or service name. Use /interface pppoe-client scan to discover what the ISP is advertising before committing to a configuration:

/interface pppoe-client scan ether1

This displays the AC names and service names offered by concentrators visible on the interface. Then bind to the specific values:

/interface pppoe-client
set pppoe-out1 ac-name=isp-bras-01 service-name=broadband

If the ISP does not enforce these values, leave them empty (default) to accept any AC and service name.

Many fiber ISPs deliver PPPoE over a VLAN-tagged interface (e.g., VLAN 10 for internet, VLAN 20 for IPTV). Create a VLAN subinterface first, then bind the PPPoE client to it:

/interface vlan
add name=vlan-wan interface=ether1 vlan-id=10
/interface pppoe-client
add name=pppoe-out1 interface=vlan-wan \
user=ispuser password=isppassword \
add-default-route=yes use-peer-dns=yes \
disabled=no
/interface pppoe-client
set pppoe-out1 keepalive-timeout=30 dial-on-demand=no
ParameterDescription
keepalive-timeoutSeconds without an LCP echo reply before the session is torn down and re-dialled (default: 60)
dial-on-demandIf yes, the session is only established when outbound traffic is present; otherwise it connects immediately and stays up persistently

For always-on internet connections, keep dial-on-demand=no. Use dial-on-demand=yes only for backup links that should not generate unnecessary uptime.

When add-default-route=yes, RouterOS installs a 0.0.0.0/0 route pointing at the PPPoE gateway as soon as the session is established. The route is removed when the session drops.

If you manage routes manually (for dual-WAN or policy routing), set add-default-route=no and install routes explicitly:

/interface pppoe-client
set pppoe-out1 add-default-route=no
/ip route
add dst-address=0.0.0.0/0 gateway=pppoe-out1 distance=1 check-gateway=ping

When use-peer-dns=yes, RouterOS updates /ip dns with the DNS servers pushed by the ISP via IPCP. To use static DNS servers regardless:

/interface pppoe-client
set pppoe-out1 use-peer-dns=no
/ip dns
set servers=9.9.9.9,1.1.1.1

For a simple home/branch setup where LAN clients share the ISP-assigned IP:

/ip firewall nat
add chain=srcnat out-interface=pppoe-out1 action=masquerade \
comment="NAT LAN traffic to PPPoE WAN"

RouterOS supports multiple PPPoE client interfaces for active/standby (or load-balanced) WAN configurations. Disable automatic default-route on both clients and manage routing distance manually:

/interface pppoe-client
add name=pppoe-wan1 interface=ether1 user=user1 password=pass1 \
add-default-route=no use-peer-dns=no disabled=no
add name=pppoe-wan2 interface=ether2 user=user2 password=pass2 \
add-default-route=no use-peer-dns=no disabled=no
/ip route
add dst-address=0.0.0.0/0 gateway=pppoe-wan1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=pppoe-wan2 distance=2 check-gateway=ping

With check-gateway=ping, RouterOS pings the PPPoE gateway on each route. If the primary gateway stops responding, RouterOS automatically promotes the secondary route.

Add NAT rules for both WAN interfaces:

/ip firewall nat
add chain=srcnat out-interface=pppoe-wan1 action=masquerade
add chain=srcnat out-interface=pppoe-wan2 action=masquerade
/interface pppoe-client monitor pppoe-out1

Output includes:

FieldDescription
statusconnected, disconnected, or connecting
uptimeDuration of the current session
local-addressIP address assigned by the ISP
remote-addressIP address of the ISP gateway
encodingPPP compression/encryption negotiated (typically none)
/interface pppoe-client print detail

Shows all configured parameters alongside runtime state.

/interface print detail where name=pppoe-out1
/system logging
add topics=pppoe,debug action=memory
add topics=ppp,debug action=memory

Then watch logs:

/log print follow where topics~"pppoe"
SymptomLikely CauseFix
Status stuck at connectingWrong interface=, ISP BRAS unreachable, or VLAN mismatchVerify physical cable, VLAN ID, and use scan to confirm BRAS is visible
authentication failedWrong username/password, or auth method rejectedConfirm credentials with ISP; check allow= includes ISP-required method
Connected but no internetDefault route not installed, or NAT missingCheck /ip route print for 0.0.0.0/0; verify masquerade rule on pppoe-out1
Session drops every 30–60 secondsLCP keepalive timeoutCheck link stability; increase keepalive-timeout or investigate L2 path
Large downloads stall or failMTU/MSS mismatchVerify max-mtu=1480; add TCP MSS clamp mangle rules
Can ping IP but not hostnamesISP DNS not appliedEnable use-peer-dns=yes or configure static DNS in /ip dns
Failover not switchingcheck-gateway not configuredAdd check-gateway=ping to /ip route entries
/ip address print where interface=pppoe-out1
/ip route print where gateway=pppoe-out1

Capture the full authentication sequence to diagnose login failures:

/system logging
add topics=ppp,packet action=memory
/log print follow where topics~"ppp"

Remove the logging rule after diagnosis to avoid excessive log volume:

/system logging remove [find topics~"packet"]