kpppoed(8)
π kpppoed β the PPPoE-to-L2TPv2 glow-up π
okay bestie, sit down, hydrate, and let me tell you about kpppoed from the go-l2tp collection. it's a daemon, it's in section 8 of the manual (that's the "system administration / big girl commands" section, iykyk), and it is so niche and so powerful. let's get into it π«Ά
β¨ NAME β¨
kpppoed β a PPPoE daemon that spins up L2TPv2 Access Concentrator sessions whenever PPPoE requests come knocking. like, you ask nicely, it builds you a tunnel. iconic behavior honestly π
π SYNOPSIS π
kpppoed [ arguments ]
that's it. that's the whole vibe. arguments optional, drama mandatory π
πΈ DESCRIPTION πΈ
so kpppoed is a PPPoE server daemon β that's RFC 2516 for anyone taking notes π β and its whole thing is creating L2TPv2 Access Concentrator sessions. it doesn't do the L2TP stuff itself, no ma'am: it spawns kl2tpd to handle all the L2TP protocol business. teamwork makes the dream work fr fr π€
and the way it knows what to do? it's driven by a configuration file that describes the PPPoE service it's supposed to be offering. no config, no service, no cap.
π OPTIONS π
-configstring β tells it where your configuration file lives. the default is"/etc/kpppoed/kpppoed.toml"if you don't say anything, which, valid, that's the standard spot π-verboseβ toggles verbose log output. flip it on when you want the daemon to actually tell you what's going on instead of being mysterious and cryptic π
π¦ CONFIGURATION π¦
your config file, kpppoed.toml, is written in TOML markup language β yes, that one, the one at https://toml.io/en/ if you wanna go read up on it, nerd (affectionate) π
it keeps things cute and simple: a small set of key:value pairs configures the whole PPPoE server. here's the full example, and I'm giving it to you exactly as-is because every single comment is doing important work:
# ac_name is the name that kpppoed will use in the PPPoE AC Name tag sent
# in PADO packets. If not specified it will default to "kpppoed".
ac_name = "MyAccessConcentrator.2000"
# interface_name is the name of the network interface that kpppoed will listen
# on for PPPoE discovery packets. It must be specified.
interface_name = "eth0"
# services is a list of service names that kpppoed will advertise in PADO packets
# At least one service must be specified.
services = [ "serviceA", "serviceB", "serviceC" ]
# lns_ipaddr is the IP address and port of the L2TP server to tunnel
# pppoe sessions to. The LNS address must be specified.
lns_ipaddr = "3.22.1.9:1701"
let me break down the β¨loreβ¨:
ac_nameβ the namekpppoedputs in the PPPoE AC Name tag it sends inside PADO packets. skip it and it defaults to"kpppoed". you can leave it, but naming your concentrator is a main character move.interface_nameβ the network interfacekpppoedlistens on for PPPoE discovery packets. this one is REQUIRED, bestie. must be specified, no default, no wiggle room π¨servicesβ the list of service names it advertises in PADO packets. at least one service must be specified. an empty list is not the vibe.lns_ipaddrβ the IP address and port of the L2TP server your PPPoE sessions get tunneled to. the LNS address must be specified. mandatory, periodt.
heads up: three of these four are non-negotiable. only ac_name has a fallback. don't come crying to me when it refuses to start π
π SEE ALSO π
kpppoed.toml(5)kl2tpd(8)
π AUTHORS π
Katalix Systems, Ltd. β the legends behind all of this π«‘
and that's the whole page, babe! this little write-up is from go-l2tp v0.1.8, dated May 2024. go forth, tunnel responsibly, and remember: kpppoed(8) ate and left no crumbs πβ¨ππ¦πΈπ
π«Ά
π¦ where this page comes from
- debian trixie: go-l2tp 0.1.8-1+b10 Β· MIT
- fedora 43: golang-github-katalix-l2tp 0.1.8-4.fc42 Β· MIT
- fedora 44: go-l2tp 0.1.8-4.fc44 Β· Apache-2.0 AND BSD-3-Clause AND MIT
- ubuntu questing: go-l2tp 0.1.8-1
- ubuntu resolute: go-l2tp 0.1.8-1build1 Β· MIT
- ubuntu stonking: go-l2tp 0.1.8-1build1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms