From: Mikulas Patocka <mikulas@twibright.com>
To: linux-ppp@vger.kernel.org
Subject: pppd and IPv6 routes
Date: Mon, 13 Apr 2026 14:37:51 +0200 (CEST) [thread overview]
Message-ID: <9ce2170f-f0bb-2d48-c64a-4d5027290e92@twibright.com> (raw)
Hi
I have a problem with pppd and IPv6. I use pppd 2.4.9 from Debian 12.
I get this ppp0 device from my ISP (using ppp-over-ethernet):
23: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 state UNKNOWN qlen 3
inet6 2a00:1028:8391:4349:4839:8541:daa4:adcf/64 scope global dynamic mngtmpaddr
valid_lft 86287sec preferred_lft 3487sec
inet6 fe80::4839:8541:daa4:adcf peer fe80::e681:84ff:fec2:4b34/128 scope link
valid_lft forever preferred_lft forever
I run wide-dhcpv6-client, it sends "dhcp6 solicit" to "ff02::1:2":
fe80::4839:8541:daa4:adcf.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
I receive dhcp6 advertise from the ISP:
e681:84ff:fec2:4b34.dhcpv6-server > fe80::4839:8541:daa4:adcf.dhcpv6-client: dhcp6 advertise
The problem is that the kernel doesn't pass the packet to the dhcp6c
daemon, it rejects the packet with a redirect to itself:
fe80::4839:8541:daa4:adcf > fe80::e681:84ff:fec2:4b34: ICMP6, redirect, fe80::4839:8541:daa4:adcf to fe80::4839:8541:daa4:adcf, length 176
According to RFC, redirect to itself means that the sender should send the
packet to the same interface to a different host.
"ping fe80::e681:84ff:fec2:4b34%ppp0" also doesn't work - tcpdump shows
that the reply arrives, but the kernel rejects it with a redirect to
itself.
There are the following routes set up on the ppp0 interface:
anycast 2a00:1028:8391:4349:: dev ppp0 proto kernel metric 0 pref medium
2a00:1028:8391:4349::/64 dev ppp0 proto kernel metric 256 expires 85949sec pref medium
fe80::fe80::4839:8541:daa4:adcf dev ppp0 proto kernel metric 256 pref medium
fe80::e681:84ff:fec2:4b34 dev ppp0 proto kernel metric 256 pref medium
multicast ff00::/8 dev ppp0 proto kernel metric 256 pref medium
default via fe80::e681:84ff:fec2:4b34 dev ppp0 proto ra metric 1024
expires 4049sec hoplimit 64 pref medium
If I delete the route to "fe80::fe80::4839:8541:daa4:adcf" and add the
same route with the "local' specifier, the problem is fixed, ping works
and dhcp6c correctly receives the responses and sets up IPv6 addresses in
the inner network:
# ip -6 route del fe80::4839:8541:daa4:adcf dev ppp0
# ip -6 route add local fe80::4839:8541:daa4:adcf dev ppp0
So, the question is - why doesn't pppd set the local route as "local"? Is
it a bug in pppd? Or a bug in the kernel?
I tried to set up the local route in
/etc/ppp/ipv6-up.d/wide-dhcpv6-client, but it is not reliable, sometimes
it works and sometimes it doesn't, the script is probably racing with pppd
setting the routes:
#!/bin/sh
sleep 3
ip -6 route del "$PPP_LOCAL" dev ppp0
ip -6 route add local "$PPP_LOCAL" dev ppp0
systemctl restart wide-dhcpv6-client.service
Mikulas
next reply other threads:[~2026-04-13 13:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-13 12:37 Mikulas Patocka [this message]
2026-04-25 0:27 ` pppd and IPv6 routes Benjamin Cama
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9ce2170f-f0bb-2d48-c64a-4d5027290e92@twibright.com \
--to=mikulas@twibright.com \
--cc=linux-ppp@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox