Debian 11: PPPoE Testserver mit eigenem VLAN

Wer sich schon einmal gefragt hat, wie ein Internetprovider eigentlich seine PPPoE-Zugänge erstellt, kann jetzt selbst Hand anlegen. Ein eigener PPPoE-Server unter Debian ist kein Hexenwerk. Egal ob für Netzwerk-Labortests, DSL-Simulation oder einfach aus Neugier: Mit ein paar Handgriffen läuft dein Linux-Server als vollwertiger PPPoE-Testserver.
Warum überhaupt PPPoE?
Für Netzwerkingenieure, Admins oder Security-Tester ist ein eigener PPPoE-Server Gold wert:
- Du kannst Authentifizierungs-Probleme simulieren
- Du kannst NAT-, Firewall- oder QoS-Tests fahren
- Du kannst neue Router-Firmware unter realen Bedingungen prüfen
Pakete installieren
Zuerst brauchst du ein paar Pakete. Ohne die läuft kein PPPoE-Server:
apt update
apt install pppoe iptables vlan ifupdown
pppoe
: stellt die PPPoE-Sitzungen bereit.iptables
: Damit schaltest du später NAT, falls du willst.vlan
: Wie bei normalen Providern auch, wird der PPPoE Server auf das VLAN gelegt und wählt sich darüber ein.ifupdown
: Weil wir das VLAN permanent in/etc/network/interfaces
eintragen.
VLAN 22 einrichten
Für eine statische Nutzung des VLAN´s 22 empfiehlt es sich diese über die Interfaces Datei zu regeln.
Öffne /etc/network/interfaces
und trag das hier ein:
auto eth0
iface eth0 inet manual
auto eth0.22
iface eth0.22 inet manual
vlan-raw-device eth0
Was passiert hier?
eth0
bleibt ohne IP, weil es nur der physische Träger ist.eth0.22
ist dein virtuelles Interface für VLAN 22.- Debian erstellt das Interface automatisch beim Booten.
Danach bringst du die Interfaces hoch:
ifup eth0
ifup eth0.22
Oder der Networking Service muss von dir neugestartet werden.
systemctl restart networking
Jetzt kannst du alle PPPoE-Sitzungen gezielt auf VLAN 22 lenken. Genau so, wie Provider es machen, um verschiedene Kundensegmente zu trennen.
Benutzer anlegen & Authentifizierung initalisieren
Ohne Authentifizierung geht nichts. PPPoE arbeitet normalerweise mit CHAP oder PAP, wir nehmen CHAP.
Erstelle einen simplen Test-User:
useradd test
echo -e "password\npassword" | passwd test
Und definiere ihn im PPP-Kontext. Diese Datei ist zu beginn nicht gänzlich leer. Oben findest du einen Header mit den einzelnen Überschriften
nano /etc/ppp/chap-secret
Trage in die Datei folgendes ein:
"client1" * "password" 10.200.0.2
Damit hast du:
- Login: „client1“
- Server: * => Sprich alle PPPoE Server dürfen diese Authentifizierung benutzen
- Passwort: „password“
- Feste Client-IP: 10.200.0.2
Du könntest auch Radius oder LDAP einbinden. Aber für den Anfang reicht das völlig.
Großen IP-Pool definieren
Provider geben keine IP-Adressen einzeln von Hand raus. Sie definieren Pools.
echo 10.200.0.2-10.200.255.254 > /etc/ppp/ipaddress_pool
Das deckt einen Bereich von fast 65.000 IPs ab (10.200.0.0/16). Die Server-IP selbst wird 10.200.0.1, der Rest gehört den Clients.
Perfekt für Szenarien mit vielen parallelen Sessions, z.B. um Router unter Last zu testen.
PPPoE-Optionen
Jetzt legst du fest, wie sich der Server verhalten soll. Erstelle /etc/ppp/pppoe-server-options
:
require-chap
login
lcp-echo-interval 5
ms-dns 1.1.1.1
netmask 255.255.0.0
defaultroute
noipdefault
usepeerdns
debug
logfile /var/log/pppoe-server.log
Hier regelst du die Authentifizierung, das DNS, das Routing und das Logging. Du kannst das später beliebig erweitern – z.B. mit Radius-Login oder IPv6.
Solltest du auf einen Login über PAM verzichten wollen, dann kommentiere einfach das login
aus. Dann erfolgt eine Authentifizierung nur über das CHAP-Secret
.
Systemd-Service
Damit dein PPPoE-Server nach dem Booten automatisch startet, erstellst du einen Service. Dadurch muss nicht jedes mal der Server neu eingeleitet werden.
Lege /etc/systemd/system/pppoe-testserver.service
an:
[Unit]
Description=PPPoE Testserver on VLAN 22
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStartPre=/usr/bin/sysctl -w net.ipv4.ip_forward=1
ExecStartPre=/bin/sh -c 'iptables -t nat -F POSTROUTING'
ExecStartPre=/bin/sh -c 'iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE'
ExecStart=/usr/sbin/pppoe-server \
-C isp \
-L 10.200.0.1 \
-p /etc/ppp/ipaddress_pool \
-I eth0.22 \
-m 1412
Restart=on-failure
[Install]
WantedBy=multi-user.target
Was macht dieser Service?
- Aktiviert IP-Forwarding (damit der Server Pakete weiterleiten kann)
- Setzt NAT auf dem WAN-Interface eth0 (damit Clients ins Internet kommen)
- Startet den pppoe-server im VLAN 22
- Vergibt die Server-IP 10.200.0.1
Aktivieren und starten:
systemctl daemon-reload
systemctl enable pppoe-testserver
systemctl start pppoe-testserver
Jetzt läuft dein Server dauerhaft im Hintergrund.
NAT nicht vergessen
Wenn deine PPPoE-Clients ins Internet sollen, brauchst du NAT. Einfach gelöst:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Diese Konfiguration kannst du jetzt mit einer PFSense oder einer OpnSense nutzen.
Dieser Server hat sich bei mir angeboten um einen Verdacht bei einem Dorf & Wiesen Provider auszutesten. Dabei kam es beim Routing zu Problemen das bei mehreren aktiven PPPoE Verbindungen das selbe PPPoE Gateway eingetragen war.