this post was submitted on 06 Apr 2025
6 points (80.0% liked)

Debian operating system

3122 readers
8 users here now

Debian is a free operating system (OS) for your computer. An operating system is the set of basic programs and utilities that make your computer run. Debian provides more than a pure OS: it comes with over 59000 packages, precompiled software bundled up in a nice format for easy installation on your machine.

founded 5 years ago
MODERATORS
 

I built a new firewall under Debian 12. The machine has eight network ports, and during configuration I accidentally used the same name for a couple of the ports in the files under /etc/systemd/network/*.link. I ended up with two link files referencing two different MAC addresses but naming each of them as WAN0, and once systemd got that configuration it wouldn't let it go.

From what I could find online, normally I would just issue systemctl daemon-reload followed by a update-initramfs -u and after a reboot systemd should have had the updated information... but no dice this time. The way I finally discovered the problem was when I noticed under ifconfig that my wan0 port was pointing to the wrong MAC address (even though the link files had been corrected).

After several hours of fighting with it, I finally managed to get it to work by renumbering all of my link files, and now the information for each port matches up correctly. But my real question here is WHY did systemd refuse to read updated link files? Is there another step I should have taken which was mysteriously never mentioned in any of the dozens of web pages I looked at trying to fix this? I really need to understand the proper process for getting it to correctly use these files so I can maintain the machine in the future.

(God I miss the reliability of udev already)

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 2 points 1 day ago (1 children)

I assume you're using systemd-networkd so did you try using networkctl to reload and reconfigure your networks? By using status you can see which files are being used by your interface. I hope this points you to an explanation.

➜  ~ sudo networkctl
delete       -- Delete virtual netdevs
down         -- Bring devices down
forcerenew   -- Trigger DHCP reconfiguration of all connected clients
label        -- Show address labels
list         -- List existing links
lldp         -- Show Link Layer Discovery Protocol status
reconfigure  -- Reconfigure interfaces
reload       -- Reload .network and .netdev files
renew        -- Renew dynamic configurations
status       -- Show information about the specified links
up           -- Bring devices up
[–] [email protected] 1 points 1 day ago (1 children)

I did run across it and tried doing a reload, but it looks like according to the help file that doesn't do anything with the link files? I tried networkctl status but that doesn't show any info about what files are being used so I'm not sure what you're seeing? It only gives me a list of the IPs used by each interface, plus some log info at the end of ppp0 going up and down while I was setting it up. If it helps, this is what one of my link files looks like...

[Match]
MACAddress=24:6e:96:4e:21:73

[Link]
NamePolicy=
Name=wan0
[–] [email protected] 1 points 12 hours ago (1 children)

sudo networkctl status gives you a general overview of all your network settings but indeed, it doesn't show the files used. You can do sudo networkctl to see a list of all your network devices and whether they are managed by systemd-networkd or not. For example, the 3rd device is the one I'm using to connect to the internet. The 7th device is a VPN I'm using.

➜  ~ sudo networkctl
IDX LINK            TYPE     OPERATIONAL SETUP      
  1 lo              loopback carrier     configured 
  2 enp0s31f6       ether    off         configuring
  3 enxc84bd63372d4 ether    routable    configured 
  4 br0             bridge   no-carrier  configuring
  5 wlp0s20f3       wlan     off         configuring
  6 virbr0          bridge   no-carrier  unmanaged
  7 tun0            none     routable    configured 

7 links listed.

Just using status gives you the overview of all your IP addresses and DNS settings.

➜  ~ sudo networkctl status
●          State: routable                                    
    Online state: partial                                     
         Address: 10.161.10.39 on enxc84bd63372d4
                  192.168.122.1 on virbr0
                  172.28.241.21 on tun0
                  fe80::ca4b:d6ff:fe33:72d4 on enxc84bd63372d4
         Gateway: 10.161.10.254 on enxc84bd63372d4
             DNS: 172.16.1.132
                  172.23.12.100
                  172.23.13.100
  Search Domains: <REDACTED>.tld
                  <REDACTED>.domain.tld

Apr 08 09:45:31 debian systemd-networkd[1083]: enp0s31f6: Link DOWN
Apr 08 09:45:48 debian systemd-networkd[1083]: wlp0s20f3: Link DOWN

What you probably want is the following sudo networkctl status $INTERFACE. Here you see the Link file and Network file used by the interface.

➜  ~ sudo networkctl status enxc84bd63372d4 
● 3: enxc84bd63372d4                                                                              
                     Link File: /usr/lib/systemd/network/73-usb-net-by-mac.link
                  Network File: /etc/systemd/network/05-dock.network
                         State: routable (configured)
                  Online state: online                                                            
                          Type: ether
                          Path: pci-0000:05:00.0-usb-0:2.4:1.0
                        Driver: r8152
                        Vendor: Realtek Semiconductor Corp.
                         Model: RTL8153 Gigabit Ethernet Adapter
              Hardware Address: c8:4b:d6:33:72:d4 (Dell Inc.)
                           MTU: 1500 (min: 68, max: 9194)
                         QDisc: fq_codel
  IPv6 Address Generation Mode: eui64
      Number of Queues (Tx/Rx): 1/1
              Auto negotiation: yes
                         Speed: 1Gbps
                        Duplex: full
                          Port: mii
                       Address: 10.161.10.39 (DHCP4 via 172.27.129.1)
                                fe80::ca4b:d6ff:fe33:72d4
                       Gateway: 10.161.10.254
                           DNS: 172.23.12.100
                                172.23.13.100
             Activation Policy: up
           Required For Online: yes
               DHCP4 Client ID: IAID:0xf40aaca/DUID
             DHCP6 Client DUID: DUID-EN/Vendor:0000ab113b3d3a1477342315
                  Connected To: <REDACTED>.tld on port Gi2/0/19 (== USERS + VoIP ==)

Apr 08 08:55:17 debian systemd-networkd[1083]: enxc84bd63372d4: Configuring with /etc/systemd/network/05-dock.network.
Apr 08 08:55:17 debian systemd-networkd[1083]: enxc84bd63372d4: Link UP
Apr 08 08:55:17 debian systemd-networkd[1083]: enxc84bd63372d4: Gained carrier
Apr 08 08:55:18 debian systemd-networkd[1083]: enxc84bd63372d4: DHCPv4 address 10.161.10.39/24, gateway 10.161.10.254 acquired from 172.27.129.1
Apr 08 08:55:19 debian systemd-networkd[1083]: enxc84bd63372d4: Gained IPv6LL

You probably have the same .link files as me because they are the default ones. The .network files I use are custom though, for example:

➜  ~ cat /etc/systemd/network/05-dock.network
[Match]
Name=enxc84bd63372d4

[Network]
DHCP=yes

I hope this helps you a bit.

[–] [email protected] 1 points 4 hours ago

Ah that's handy to know the status can show more detail for individual interfaces! I still use /etc/network/interfaces to set up each port so systemd shows them all unmanaged. Maybe some day I'll try switching to that kind of setup.

Where do you find default link files at? There's nothing relevant under /usr/share/doc/systemd/. I had to do a lot of online reading to find an example of selecting them by the MAC address, and the NamePolicy= line was critical to making it actually work.

I don't suppose you happen to know of a way for systemd to manage a DSL connection (CenturyLink)? The old pppd setup seems to be getting hammered by systemd for some reason even though there's no service file for it, but ppp0 refuses to try connecting on the new server until I can log in, stop it, and restart it again. It's like it is trying to connect way too early in the boot and gets locked up.