I have re-confirmed the fix using systemd 251.4-1ubuntu7.3 from kinetic-
proposed:

root@kinetic:~# apt-cache policy systemd
systemd:
  Installed: 251.4-1ubuntu7.3
  Candidate: 251.4-1ubuntu7.3
  Version table:
 *** 251.4-1ubuntu7.3 500
        500 http://archive.ubuntu.com/ubuntu kinetic-proposed/main amd64 
Packages
        100 /var/lib/dpkg/status
     251.4-1ubuntu7.1 500
        500 http://archive.ubuntu.com/ubuntu kinetic-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu kinetic-security/main amd64 
Packages
     251.4-1ubuntu7 500
        500 http://archive.ubuntu.com/ubuntu kinetic/main amd64 Packages
root@kinetic:~# ip link add veth0 up type veth peer name veth1
root@kinetic:~# ip addr add 172.20.0.1/24 dev veth0
root@kinetic:~# cat > /etc/netplan/60-veth1.yaml <<EOF
network:
  version: 2
  ethernets:
    veth1:
      dhcp4: true
EOF
root@kinetic:~# 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 &
[1] 1077
root@kinetic:~# netplan generate && netplan apply
root@kinetic:~# ip route
10.136.78.0/24 dev eth0 proto kernel scope link src 10.136.78.181 metric 100 
169.254.0.0/24 dev veth1 proto dhcp scope link src 172.20.0.89 metric 100 
169.254.1.0/24 via 172.20.0.2 dev veth1 proto dhcp src 172.20.0.89 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.89 metric 100 
172.20.0.1 dev veth1 proto dhcp scope link src 172.20.0.89 metric 100 
172.20.0.2 dev veth1 proto dhcp scope link src 172.20.0.89 metric 100

** Tags removed: verification-needed verification-needed-jammy 
verification-needed-kinetic
** Tags added: verification-done verification-done-jammy 
verification-done-kinetic

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, 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:
  Fix Released
Status in systemd source package in Jammy:
  Fix Committed
Status in systemd source package in Kinetic:
  Fix Committed

Bug description:
  [Impact]

  If a DHCP server pushes down a local subnet route with a null gateway,
  the systemd-networkd DHCP client does not correctly install the route.
  Instead, the route is ignored.

  [Test Plan]

  Taken from
  https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/2004478/comments/2.

  * Start a Jammy LXD container:

  $ lxc launch ubuntu-daily:jammy jammy
  $ lxc exec jammy bash

  * Create a veth pair:

  $ 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

  * Start dnsmasq in the background with the following routes specified:

  $ 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 &

  * Apply the netplan config:

  $ netplan generate && netplan apply

  * Check the routing table (may take a few seconds to update):

  $ ip route
  [...]

  * On an affected system, the route for 169.254.0.0/24 is missing.

  [Where problems could occur]

  This patch is in the systemd-networkd DHCP client. It adds logic to
  install routes with a link scope whenever the DHCP server pushes local
  subnet routes with a null gateway. If any problems occurred, it would
  related to systemd-networkd's handling of such routes pushed from a
  DHCP server.

  [Original 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


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to