[systemd-devel] networkd: Link local static IP address behind NAT

Thomas Burghout thomas.burghout at nedap.com
Tue Jan 17 15:28:22 UTC 2023


Hello,

We are trying to configure a device to use a gateway and a static IP address 
(in the link-local address range). However, the default gateway does not appear
to be used. As such, there is no traffic possible to the internet.

The device runs systemd 251.4 on a custom Yocto distribution with 
Linux 5.4.124-altera.

The following network is used:

[Match]
Name=eth0

[Network]
Address=169.254.1.2/16
DNS=169.254.1.1
Gateway=169.254.1.1

With this configuration ping 8.8.8.8 does not work. However, if we specify the 
interface like so:

ping -I 169.254.1.2 8.8.8.8

We are able to reach it successfully. We verified that the gateway is indeed 
reachable. 

See also the following relevant output:

$ ip route
default via 169.254.1.1 dev eth0 
169.254.0.0/16 dev eth0 scope link  src 169.254.146.171  metric 2048 
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether e2:26:9e:11:ae:da brd ff:ff:ff:ff:ff:ff
    inet 169.254.146.171/16 brd 169.254.255.255 scope link eth0
       valid_lft forever preferred_lft forever
3: usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether b6:c8:ab:ac:44:7f brd ff:ff:ff:ff:ff:ff
4: sit0 at NONE: <NOARP> mtu 1480 qdisc noop qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
$ ip route get 8.8.8.8
8.8.8.8 via 169.254.1.1 dev eth0

The route seems to be configured correctly. The scope appears to be link,
we would expect global as this is consistent with other configurations. The 
output of ip route get shows no src address.

If the interface is configured in an interactive manner we get the expected 
behavior. The device is able to use the gateway by default.

$ ip address flush dev eth0
$ ip route flush dev eth0
$ ip address add 169.254.1.2/16 brd + dev eth0
$ ip route add 169.254.1.1 dev eth0
$ ip route add default via 169.168.1.1 dev eth0

Which produces a route which includes a src address and produces the address
with scope global.

networkd does not show any warnings or errors in the log. Is there a 
configuration option we are missing?


With kind regards,
Thomas Burghout


More information about the systemd-devel mailing list