[Bug 2004478] Re: systemd-networkd's dhcp4 client ignores local subnet routes
Tuetuopay
2004478 at bugs.launchpad.net
Thu Feb 2 15:50:46 UTC 2023
Sure! Here is a quick test using a veth pair and dnsmasq:
ip link add veth0 up type veth peer name veth1
ip addr add 172.20.0.1/24 dev veth0
cat > /etc/netplan/60-veth1.yaml <<EOF
network:
version: 2
ethernets:
veth1:
dhcp4: true
EOF
dnsmasq -kq -C /dev/null -z -i veth0 -I lo -F 172.20.0.10,172.20.0.150 -O option:classless-static-route,169.254.0.0/24,0.0.0.0,169.254.1.0/24,172.20.0.2 &
netplan apply
Here is the resulting routing table on Jammy:
root at jammy:~# ip route
default via 10.199.96.88 dev ens2 proto dhcp src 10.199.96.89 metric 100
10.199.96.88 dev ens2 proto dhcp scope link src 10.199.96.89 metric 100
10.199.96.88/31 dev ens2 proto kernel scope link src 10.199.96.89 metric 100
169.254.1.0/24 via 172.20.0.2 dev veth1 proto dhcp src 172.20.0.52 metric 100
172.20.0.0/24 dev veth0 proto kernel scope link src 172.20.0.1
172.20.0.0/24 dev veth1 proto kernel scope link src 172.20.0.52 metric 100
172.20.0.1 dev veth1 proto dhcp scope link src 172.20.0.52 metric 100
172.20.0.2 dev veth1 proto dhcp scope link src 172.20.0.52 metric 100
As you can see, the route to 169.254.0.0/24 is missing. If I run the
same on Focal, I get the following routing table:
root at focal:~# ip route
default via 10.76.140.48 dev ens2 proto dhcp src 10.76.140.49 metric 100
10.76.140.48 dev ens2 proto dhcp scope link src 10.76.140.49 metric 100
10.76.140.48/31 dev ens2 proto kernel scope link src 10.76.140.49
169.254.0.0/24 dev veth1 proto dhcp scope link src 172.20.0.53 metric 100
169.254.1.0/24 via 172.20.0.2 dev veth1 proto dhcp src 172.20.0.53 metric 100
172.20.0.0/24 dev veth0 proto kernel scope link src 172.20.0.1
172.20.0.0/24 dev veth1 proto kernel scope link src 172.20.0.53
Thanks!
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/2004478
Title:
systemd-networkd's dhcp4 client ignores local subnet routes
Status in systemd package in Ubuntu:
New
Bug description:
RFC3442 specifies option 121 (Classless Static Routes) that allow a
DHCP server to push arbitrary routes to a client. It has a Local
Subnet Routes section expliciting the behavior of routes with a null
(0.0.0.0) gateway.
Such routes are to be installed on the interface with a Link scope, to
mark them as directly available on the link without any gateway.
Networkd currently drops those routes, which is against the RFC, as
Linux has proper support for such routes.
This has been observed as broken on Ubuntu Jammy 22.04 LTS, but
working in previous LTS (Focall 20.04 and Bionic 18.04 tested).
1. Ubuntu release: 22.04.1 LTS
2. Systemd release: 249.11-0ubuntu3.6
3. Expected behavior: routes from DHCP option 121 with a gateway set to 0.0.0.0 to be installed as "scope link"
4. Observed behavior: routes are silently dropped by systemd-networkd's dhcp client (actually logged with a debug level, effectively silently with the default configuration)
I wrote a fix that has been accepted in upstream systemd:
https://github.com/systemd/systemd/pull/26234, which applies cleanly
to the current package's sources obtained through apt-get source.
As this is a fix for something that is an actual regression, can it be
backported to Ubuntu 22.04's systemd tree?
Thanks.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/2004478/+subscriptions
More information about the foundations-bugs
mailing list