PPPOE-SERVER(8)
π PPPOE-SERVER(8) π
okay bestie, gather round, because today we're talking about pppoe-server from the System Manager's Manual, and she is that girl. β¨
πΈ NAME πΈ
pppoe-server β the user-space PPPoE server. yes, the one. she serves PPPoE (Point-to-Point Protocol over Ethernet) and she's serving π
π SYNOPSIS π
pppoe-server [options]
that's it. that's the whole vibe. options go in, magic comes out. π¦
β¨ DESCRIPTION β¨
so pppoe-server is a user-space server for PPPoE (that's Point-to-Point Protocol over Ethernet, iykyk) built for Linux and other UNIX systems. she works in concert with the pppoe client β like a duo, a duo β to respond to PPPoE discovery packets and set up PPPoE sessions. no cap. π₯
π OPTIONS π
okay this is the main character section, let's go one by one, don't skip, every single one matters:
-Fβ makespppoe-servernot fork and become a daemon. the default is to fork and become a daemon, so this is the "please stay right here in my terminal" option. π-Iinterface β says which Ethernet interface to use. under Linux it's typicallyeth0oreth1. the interface should be "up" before you startpppoe-server, but it does not need an IP address. you can hand her multiple-Ioptions if you want her responding on more than one interface. she's flexible like that. π-Xpidfile β causespppoe-serverto write its process ID into pidfile. bonus: she keeps that file locked, so only a single process can start for a given pidfile. exclusive. π-q/path/to/pppd β specifies the full path to thepppdprogram. the default is determined at compile time. one use case: handing her a wrapper program that modifies the arguments passed topppdβ that lets you do things the server doesn't directly support (like specifying IPv6 addresses). β¨-Q/path/to/pppoe β specifies the full path to thepppoeprogram. default is determined at compile time. this one only matters if you're not using kernel-mode PPPoE. π«Ά-Ttimeout β passed directly topppoe; go readpppoe(8)for the details. if you're using kernel-mode PPPoE, this option has no effect. π-Cac_name β specifies which name to report as the access concentrator name. if you don't supply it, the host name gets used. π-Sname β offer a service named name. you can specify multiple-Soptions; each one makes that named service get advertised in a Service-Name tag in the PADO frame. the first-Soption specifies the default service, used when the PPPoE client requests a Service-Name of length zero. π-mMSS β passed directly topppoe; seepppoe(8)for details. if you're using kernel-mode PPPoE, this option has no effect. π¦-xn β limits the number of sessions per peer MAC address to n. if a given MAC address tries to create more than n sessions, its PADI and PADR packets are just... ignored. if you set n to0(which is the default), then no limit is imposed on sessions per peer MAC address. π-sβ passed directly topppoe; seepppoe(8)for details. on top of that, it causespppdto be invoked with thesyncoption. β-Lip β sets the local IP address, passed to spawnedpppdprocesses. if not specified, the default is10.0.0.1. if you specify0.0.0.0, then the selection of the local IP address is delegated topppd. π-Rip β sets the starting remote IP address. as sessions get established, IP addresses are assigned starting from ip.pppoe-serverautomatically keeps track of the pool of addresses and passes a valid remote IP address topppd. if not specified, a starting address of10.67.15.1is used. if specified as0.0.0.0, remote IP allocation is delegated topppd. π₯-Nnum β allows at most num concurrent PPPoE sessions. if not specified, the default is64. π-Mstring β sends string in a MOTM tag in a PADM packet right after sending the PADS to a client. surprise message, bestie! π-Hurl β sends url in a HURL tag in a PADM packet right after sending the PADS to a client. note that url must start with eitherhttp://orhttps://. no exceptions. π¨-Ofname β tellspppdto use the option file fname instead of the default/etc/ppp/pppoe-server-options. π-pfname β reads the specified file fname, which is a text file made of one IP address per line. those IP addresses get assigned to clients. the number of sessions allowed equals the number of addresses found in the file. the-poption overrides both-Rand-N. π₯
besides plain IP addresses, the pool file can also contain lines of this form:
a.b.c.d-e
which includes all IP addresses from a.b.c.d to a.b.c.e. for example, the line:
1.2.3.4-7
is equivalent to:
1.2.3.4
1.2.3.5
1.2.3.6
1.2.3.7
look at her being efficient. π
-rβ tells the PPPoE server to randomly permute session numbers. instead of handing out sessions in order, the session numbers are assigned in an unpredictable order. chaotic. unpredictable. iconic. π²-uβ tells the server to invokepppdwith theunitoption. note: this only works forpppdversion 2.4.0 or newer. β-ooffset β instead of numbering PPPoE sessions starting at1, they get numbered starting at offset+1. this lets you run multiple servers on a given machine β just make sure their session numbers do not overlap. don't be messy. π-fdisc:sess β sets the Ethernet frame types for PPPoE discovery and session frames. the types are specified as hexadecimal numbers separated by a colon. standard PPPoE uses frame types8863:8864.
β οΈ do not use this option unless you are absolutely sure the peer you're dealing with uses non-standard frame types. seriously. π
-kβ tells the server to use kernel-mode PPPoE on Linux. this option is available only on Linux kernels 2.4.0 and later, and only if the server was built with kernel-mode support. β¨-gpath β tells the server the full path to thepppoe.soorrp-pppoe.soplugin to use with kernel-mode PPPoE. if omitted, a compiled-in default is used; that default can be displayed using the-hoption. π«Ά-iβ tells the server to completely ignore PADI frames if there are no free session slots. not today, thank you. π«-hβ prints a brief usage message and exits. the little helper. πΈ-Upath β creates a UNIX socket you can connect to in order to managepppoe-serverat run-time. please refer to the CONTROL-SOCKET section below for more detailed instructions. π
π« OPERATION π«
pppoe-server listens for incoming PPPoE discovery packets. when a session gets established, she spawns a pppd process. these options get passed to pppd:
nodetach noaccomp nobsdcom nodeflate nopcomp novj novjccomp default-asyncmap
on top of that, the local and remote IP addresses are set based on the -L and -R options. the pty option is supplied along with a pppoe command to initiate the PPPoE session. and finally, extra pppd options can be placed in the file /etc/ppp/pppoe-server-options β which must exist, even if it is just empty! not me forgetting to create an empty file and wondering why nothing works π
β οΈ real talk: pppoe-server is meant mainly for testing PPPoE clients. she is not a high-performance server meant for production use. she's a test girlie, not a workhorse. π«Ά
π CONTROL-SOCKET π
the control-socket was implemented as a secondary mechanism to improve run-time control of the pppoe-server. to use it you need to start pppoe-server with the -U option described above. then (in the absence of a control-client currently) you can use netcat to connect to the control socket, for example:
nc -U /run/pppoe-server.control
assuming -U /run/pppoe-server.control was passed to pppoe-server. π¦
the following commands are implemented:
set drain {off|on|quit}β sets whether or notpppoe-serverresponds to PADI packets. when set tooff,pppoe-serverwill respond; otherwise PADI packets get ignored. this allows thepppoe-serverto be drained from clients. in addition, when set toquit, it will terminatepppoe-serverwhen all pppoe-clients have terminated. π
this allows for (mostly) seamless upgrades, in that the currently running instance can be issued with "set drain quit" prior to starting a new interface on the same interfaces β thus allowing new connections to be made whilst maintaining proper state on existing clients. glow-up with zero downtime, periodt. β¨
show statusβ shows basic status information for the connected-topppoe-server. π
π AUTHORS π
pppoe-server was written by Dianne Skoll <dianne@skoll.ca>. queen behavior. π
the pppoe home page is https://dianne.skoll.ca/projects/rp-pppoe/. go say hi. π«Ά
π SEE ALSO π
pppd(8), pppoe(8), pppoe-sniff(8), pppoe-relay(8)
and that's the whole page, bestie! this one came to you courtesy of the 4th Berkeley Distribution, dated 21 June 2008 β vintage but still slaying πβ¨ go set up some sessions, you got this ππ¦
π¦ where this page comes from
- alpine 3.22: rp-pppoe-doc 4.0-r1 Β· GPL-2.0-or-later
- alpine 3.23: rp-pppoe-doc 4.0-r1 Β· GPL-2.0-or-later
- alpine 3.24: rp-pppoe-doc 4.0-r1 Β· GPL-2.0-or-later
- arch rolling: rp-pppoe 4.0-7 Β· GPL-2.0-or-later
- fedora 43: rp-pppoe 4.0-7.fc43 Β· GPL-2.0-or-later
- fedora 44: rp-pppoe 4.0-8.fc44 Β· GPL-2.0-or-later
- nixos 26.05: rp-pppoe 4.0
- nixpkgs unstable: rp-pppoe 4.0
- opensuse-leap 16.0: rp-pppoe 4.0-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: rp-pppoe 4.0-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: rp-pppoe 4.0-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: rp-pppoe 4.0-160000.2.2 Β· GPL-2.0-or-later
- π the page's license: GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms