effeff

Archive

OpenWrt pppd

Anfang 2026 begann ich mit Anthropic zu chatten, weil sich meine FRITZ!Box 7530 vermutlich bei einem Kaltstart und vermutlich schlechterer Retry-Logik als das originale FRITZ!OS erst nach einem erneuten Neustart einwählen würde.

Fehler die immer wieder auftauchten sind:

/etc/config/network

In der Datei gibt es mehrere config device Blöcke mit zugehörigen option Definitionen. Inwiefern diese Einfluss nehmen können auf den pppoe Verbindungsaufbau bin ich mir bis heute nicht im Klaren.

Der nächste Block (config device) ist definiert vom option type bridge und gibt die Internetverbindung an die LAN Ports 2 bis 4 weiter (list ports lan#).

Ein config interface 'lan' wird als management Zugang eingestellt über option proto 'static' und option ipaddr '192.168.1.1' (option netmask '255.255.255.0').

Das config interface 'wan' ist auf jeden Fall wichtig für die Authentifizierung da diese von netifd gelesen werden:

option device 'lan1'
option proto 'pppoe'
option username 'N#11@kunden.sachsen-gigabit.de'
option password 'secret'
option ipv6 '0'
option keepalive '9 3'
option padi_attempts '5'
option padi_timeout '5'
option pppd_options 'noipv6 debug dump lcp-echo-interval 5 lcp-echo-failure 3'

Für mein Home Lab brauche ich zwingend IPV6 (wichtig wegen CGNAT und/oder Dual Stack Lite)

config interface 'wan6'
option device '@wan'
option proto 'dhcpv6'
option reqaddress 'try'
option reqprefix '56'
option norelease '1'
option release '0'

(letztere zwei sind wahrscheinlich exakt dasselbe)

/etc/ppp/options - IPV6 zunächst deaktivieren mit noipv6 (sollte das gleiche sein wie pppd_options noipv6 im interface wan.

Andere Grundeinstellungen wie

config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fd33:82d4:af6f::/48'
option packet_steering '1'

Andere Optionen bei denen ich unsicherer bin sind:

option ipv6 'auto'
option dhcpv6_pd '1'
option dhcpv6_strict '0'
option ip6assign '60'
option defaultroute '0'
option peerdns '0'
list dns <DNS Server des Internetanbieters>

um den Verbindungsaufbau / Authentifizierung besser manuell zu steuern.

Befehle in der SSH

Für die manuelle Steuerung (nach einem Neustart)

Unbestätigt: Zum Beispiel kann es wichtig sein, dass der LAN1 Port (der als WAN fungieren soll) die richtige macaddr besitzt, wenn der Internetanbieter einen anderen Router bereitgestellt hat.


Claude (Anfang 2026):

The solution: Keep noipv6 in pppd options, but enable IPv6 differently. Connection/Retry related:

Debugging:

LCP/Link control (relevant for timeouts):

For PADO timeout specifically, try adding to /etc/ppp/options:

persist
holdoff 5
lcp-restart 3
lcp-max-configure 10

FRITZ!Box likely uses different defaults than pppd. The issue might be:

  1. PADI packet timing - FRITZ!Box might space out discovery packets differently
  2. MTU/frame size - Different settings on first PADI packet
  3. Host-Uniq tag - FRITZ!Box might use specific values
  4. Asyncmap/negotiation - Different initial LCP proposals

Try these in /etc/ppp/options to mimic FRITZ!Box behavior:

# More aggressive discovery
padi_attempts 10
padi_timeout 5

# Simpler LCP negotiation
default-asyncmap
default-mru
nomagic

# Less aggressive about features
noaccomp
nopcomp
nocrtscts

# Better retry behavior
holdoff 3
persist
lcp-restart 2

Also, try reducing MTU - add to /etc/ppp/options:

mtu 1492

(PPPoE overhead is 8 bytes, so 1492 instead of standard 1500)

Most importantly: when does the PADO timeout happen?

Your ISP has TWO servers (01 and 02), and pppd is receiving PADO responses from both. It's trying to connect to Server-01 which succeeds, but you're getting responses from both.

The real problem: Look at the end:

Script /lib/netifd/ppp-up finished (pid 3214), status = 0x1

Status 0x1 means the script exited with error code 1. That's why the connection fails after negotiation completes!

Check what /lib/netifd/ppp-up does: This script is responsible for setting up the interface after PPP negotiation succeeds. If it's failing, the connection gets torn down even though pppd negotiated everything correctly.

Can you show me the contents of /lib/netifd/ppp-up? That's likely where your real issue is.


Mehr komplexere Netzwerk Architektur, die ich noch nicht verstanden habe (könnten mehr Probleme verursachen als lösen):

Claude (Anfang 2026), ich begreife es selber nicht mehr:


In /etc/ppp/options

ipv6cp-use-ipaddr

holdoff 5

passive

In /etc/config/network (wan6 interface)

norelease '1'

release '0'

iapd_length '56'

dhcpv6_pd '1'

dhcpv6_strict '0'

Recommended clean config for your wan6:

config interface 'wan6'
option device '@wan'
option proto 'dhcpv6'
option reqprefix '56'
option norelease '1'
option dhcpv6_pd '1'
option dhcpv6_strict '0'

Remove: option release '0' and option reqaddress 'try' (redundant/not needed for PD)

The real question: Does enabling any IPv6 negotiation in pppd (like ipv6cp-use-ipaddr) cause your timeouts, or only full IPv6CP?

Try testing with just that one option and see if it connects without timing out.

ISP is providing an IPv6 gateway for Router Advertisement (RA)**

Prefix delegation (what wan6 requests) = DHCPv6-PD

Your ISP provides both, but pppd with noipv6 doesn't negotiate the RA part.

To get the IPv6 gateway without enabling IPv6CP:

Try adding this to /etc/ppp/options to be more selective about IPv6CP (instead of noipv6) - this enables IPv6CP but uses a simpler negotiation method.:

ipv6 fd00::1,fd00::2
ipv6cp-use-ipaddr

wan verbindet und deligiert wan6.

Erfolgreich aber irgendwie instabiel

Claude (Anfang 2026) vermutet: IPv6CP disabled at PPP level, but DHCPv6-PD working above it.

root@OpenWrt:~# ip link show pppoe-wan
12: pppoe-wan: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 3
link/ppp

ifstatus wan6

{
"up": true,
"pending": false,
"available": true,
"autostart": true,
"dynamic": false,
"uptime": 46,
"l3_device": "pppoe-wan",
"proto": "dhcpv6",
"device": "pppoe-wan",
"updated": [
"addresses",
"routes",
"prefixes",
"data"
],
"metric": 0,
"dns_metric": 0,
"delegation": true,
"ipv4-address": [

],
"ipv6-address": [
{
"address": "2a00:fda0:287:5987:e1df:d019:253d:c364",
"mask": 64,
"preferred": 604751,
"valid": 2591951
}
],
"ipv6-prefix": [
{
"address": "2a00:fda0:2a2:4800::",
"mask": 56,
"preferred": 86354,
"valid": 86354,
"class": "wan6",
"assigned": {
"lan": {
"address": "2a00:fda0:2a2:4800::",
"mask": 60
}
}
}
],
"ipv6-prefix-assignment": [

],
"route": [
{
"target": "::",
"mask": 0,
"nexthop": "fe80::2cc:34ff:fee1:1ffd",
"metric": 512,
"valid": 1751,
"source": "2a00:fda0:2a2:4800::/56"
},
{
"target": "::",
"mask": 0,
"nexthop": "fe80::2cc:34ff:fee1:1ffd",
"metric": 512,
"valid": 1751,
"source": "2a00:fda0:287:5987:e1df:d019:253d:c364/64"
}
],
"dns-server": [
"2a00:fda0::1:53",
"2a02:2878:0:9::1337:53"
],
"dns-search": [

],
"neighbors": [

],
"inactive": {
"ipv4-address": [

],
"ipv6-address": [

],
"route": [

],
"dns-server": [

],
"dns-search": [

],
"neighbors": [

]
},
"data": {
"passthru": "001700202a00fda00000000000000000000100532a022878000000090000000013370053"
}
}
root@OpenWrt:~# ip -6 addr show br-lan
7: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet6 2a00:fda0:2a2:4800::1/60 scope global dynamic noprefixroute
valid_lft 86210sec preferred_lft 86210sec
inet6 fd33:82d4:af6f::1/60 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::1eed:6fff:fed6:a4cf/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
root@OpenWrt:~# ip -6 route show
default from 2a00:fda0:287:5987::/64 via fe80::2cc:34ff:fee1:1ffd dev pppoe-wan proto static metric 512 pref medium
default from 2a00:fda0:2a2:4800::/56 via fe80::2cc:34ff:fee1:1ffd dev pppoe-wan proto static metric 512 pref medium
unreachable 2a00:fda0:287:5987::/64 dev lo proto static metric 2147483647 pref medium
2a00:fda0:2a2:4800::/64 dev br-lan proto static metric 1024 pref medium
unreachable 2a00:fda0:2a2:4800::/56 dev lo proto static metric 2147483647 pref medium
fd33:82d4:af6f::/64 dev br-lan proto static metric 1024 pref medium
unreachable fd33:82d4:af6f::/48 dev lo proto static metric 2147483647 pref medium
fe80::2cc:34ff:fee1:1ffd dev pppoe-wan proto kernel metric 256 pref medium
fe80::e1df:d019:253d:c364 dev pppoe-wan proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev br-lan proto kernel metric 256 pref medium
fe80::/64 dev lan1 proto kernel metric 256 pref medium

Wireguard und DDNS

Claude (Anfang 2026):


Before (with CGNAT only):

Now (with IPv6):

But WireGuard still provides security value:

  1. Network segmentation - Isolate your hosted service from your home network

    WireGuard interface → Service only
    Regular IPv6 → Rest of home network untouched
    
  2. Encryption end-to-end - Even with public IPv6, traffic is encrypted

  1. Access control - Only specific peers can connect
  1. DDoS mitigation - Hide your real IP from attackers
  1. Privacy from ISP - Traffic encrypted so ISP can't inspect it

Practical recommendation for home hosting:

Keep it simple:

What would you be hosting? That determines if WireGuard is worth the complexity.

WireGuard vs dynamic DNS:

You're right that WireGuard eliminates the dynamic DNS problem, but for different reasons:

Method Advantage
IPv6 Direct + Dynamic DNS Simple, native IPv6, but need DDNS service if prefix changes
WireGuard Static endpoint (your WireGuard server IP), clients always know where to connect

With WireGuard: Your WireGuard server gets a stable IPv6 (or IPv4), and that address is hardcoded in client configs. Even if the underlying network changes, WireGuard endpoint stays the same.

Recommendation:

Does your ISP documentation mention how often they re-delegate prefixes? That determines if you need DDNS at all.

ipv6-address (WAN6): valid: 2591745 seconds ≈ 30 days
ipv6-prefix (delegated): valid: 84712 seconds ≈ 23.5 hours
route (default): valid: 1545 seconds ≈ 25 minutes

What this means:

  1. Your WAN6 address (public address on pppoe-wan) is valid for ~30 days
  1. Your delegated /56 prefix is valid for ~24 hours
  1. The default route expires in ~25 minutes

This is the problem: Even though prefixes can be stable, your ISP renews them every 24 hours and could assign a different /56.

So yes, you might need dynamic DNS if:

Options:

  1. Dynamic DNS + IPv6 - Monitor if prefix changes, update DNS
  2. WireGuard - Endpoint stays constant regardless of prefix changes
  3. Check ISP stability - Monitor for 1-2 weeks: does the /56 actually change at each renewal?
# Run daily to see if prefix changes
ip -6 addr show wan6

If the prefix stays the same across renewals, you don't need DDNS. If it changes, you need either DDNS or WireGuard.