Debian 11: PPPoE Testserver mit eigenem VLAN

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.