Bonding Network interfaces in Debian Forky

I am experimenting lately on with Nanobot and running self hosted language models on Desktop Framework.

I was trying to run lately Qwen 3.5 397B model on this small PC and it was a bit hard because I just do not have enough disk space on it. I bought just small NVMe SSD disk. With current prices, I planned to use disk space on other server I have at my hope as storage

In the end I was able to load the model but via USB hard disk which is slow but still faster then moving 100GB via my network. Because of that I am planning to modernize my network to allow for faster transfer of large quantities of data.

First step was to test network interfaces bonding. Right now my storage server, that I am also using to run some services, is using only one of its NIC as primary that is used for everything. And it have 2 others that are also connected but have different IPs so they are not used for http in example. Utilizing all of the three as one would allow theoretical transfer speed of 22400MB/s. This is not enormous bandwidth but since hardware is already there and I do not have to buy expensive PCIE network cards with optical sockets, is should be an easy win.

My server have IPMI management interface so I checked if it is still working after 6months or so. Of course I could not login. It was showing JS message that session was invalidated right after login. I do not know what is causing this but I think I probably set some limitation of who can use it, by IP or Mac address.

I still decide to go with it but maybe just bond two out 3 for example, just to check if this is working and then bond all.

At first I was using this tutorial from Debian docs. Since Debian is using systemd I skipped section about using ifenslave package.

First I created file named /etc/systemd/network/bond.network and put following content in it:

[NetDev]
Name=bond1
Description=LAG/Bond to a switch
Kind=bond

[Bond]
Mode=802.3ad

Then I created another file, /etc/systemd/network/bond.network that had definition of a new bonded network.

[Match]
Name=enp36s0f0
Name=wlp38s0

[Network]
Bond=bond1

I thought that adding one Ethernet card and wifi to the bond at least I will be able to connect to my server via the second Ethernet card if things went sideways.

Then third file was having configuration for obtaining IP:

[Match]
Name=bond1

[Network]
DHCP=yes

This seemed to be very unintuitive. Why I have to create two .network files for the same bonded network? Why can’t it be in one file? Anyway I named it bond-ip.network and enabled systemd-networkd:

sudo systemctl enable systemd-networkd

Everything went great and I rebooted.

And… It did not work. List of network interfaces returned by ip addr show was showing bond1 as DOWN

bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN group default

I tried few other things like removing or adding network interfaces, using wildcards in the bond.network file:

[Match]
Name=enp*

I tried to add static IP instead of DHCP in bond-ip.network file:

[Match]
Name=bond1

[Network]
Address=10.0.0.10
Gateway=10.0.0.1
DNS=10.0.0.1

I rebooted couple of times but it did not work. I tested few commands like:

sudo ip link set bond0 up
sudo dmesg | grep bond
sudo journal | grep bond
sudo systemctl status systemd-networkd

But it was showing that interface is going up and then without any errors in logs was getting down immediately. No details why.

At this point I did some digging through internet about bonding on systemd Linux, Debian and similar topics. Nothing was really helpful. I do remember Arch Linux wiki being very informative on other problems I encountered previously. I checked and those docs have entire section connected to bonding of network interfaces under systemd.

I read through it and it seemed better than Debian docs, more detailed and more up to date. I did followed the instructions, with small change of bonding everything, at once.

I did create file /etc/systemd/network/30-bond0.netdev but I changed mode to 802.3ad:

[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
PrimaryReselectPolicy=always
MIIMonitorSec=1s

Then I created file /etc/systemd/network/30-eth0-bond0.network

[Match]
Name=enp36s0f0

[Network]
Bond=bond0
PrimarySlave=true

And similar one for enp36s0f1 named /etc/systemd/network/30-eth0-bond0.network. Also another one named 30-wifi-bond0.network for wlp38s0 WIFI.

Another file was needed for definition of bonded network /etc/systemd/network/30-bond0.network:

[Match]
Name=bond0

[Link]
RequiredForOnline=routable

[Network]
BindCarrier=enp36s0f0 enp36s0f1 wlp38s0
DHCP=yes

Then I restarted systemd-networkd:

sudo systemctl restart systemd-networkd

And it worked! Kinda. I lost connection to server so something must went up or down. I could not connect to it via SSH anymore. HTTP stopped working. I did checked my router assigning IPs if there is some new one that I did not saw before. If there would be one it means bonded network was assigned new IP based on new MAC it was using.

There were none.

Of course I should think about this twice before actually doing it. Leave one interface not bonded at first… but yeah… you need to jump all the way at once!

Anyway at that point I had headless server not being able to connect to anything and not responding. It have not monitor attached and does not even have GPU beside some really basic one with one VGA socket that is just IPMI pass through.

  • To add monitor I would have to dismount one of my office monitor attached to the wall – the only one with VGA socket
  • Or I could also attach old GPU and use my portable monitor I bought for Raspberry PI.
  • Or I could try to attach some external USB network card
  • I could try to fix IPMI

I tried to connect portable Wifi network card but it was not working. It might be broken or maybe it needs some extra driver. Also I tried to connect to IPMI from other machine or from other browser, since Reddit people were reporting that it might help. It did not. Clearing the cookies did not fixed the issue also.

The only thing that worked was connecting to IPMI via SSH. This SSH server is pretty slow and this felt like the longest 10s of my life.

After login it welcomed me with critical error.

			>> SMASHLITE Scorpio Console <<
cat: write error: No space left on device
[10745 : 10745 CRITICAL][oemsystemlog.c:332]Get Process Name by PID failed

But it worked. I did some digging around the menu and it seemed useless. Just bunch of information about some IPMI, power and fans settings.

->cd system/
COMMAND COMPLETED : cd system/
 ufip=/system

->show
COMMAND COMPLETED : show
 ufip=/system
  Targets:

      power1/
      cooling1/
      cooling2/
      cooling3/
      cooling4/
      cooling5/
      cooling6/
      cooling7/
      cooling8/
      cooling9/
      cooling10/
      chassis1/
      logs/
      snmp1/
      snmp2/
      snmp3/
      snmp4/
      snmp5/
      snmp6/
      snmp7/
      snmp8/
      snmp9/
      snmp10/
      snmp11/
      snmp12/
      snmp13/
      snmp14/
      snmp15/
      summary/

  Properties:
      Location=(null)
      Manufacturer=(null)
      ProductName=Pro WS WRX80E-SAGE SE WIFI
      ProductPartNumber=(null)
      SN=(null)
      Firmware=1.52.0
      Health=OK
      EnTemp(C)=0
      OperatorPassword=xxxxxxxx
      AdminPassword=xxxxxxxx
      IPMode=static
      IP=10.0.0.7
      NetMask=255.255.255.0
      GateWay=10.0.0.1
      NodePowerGap(s)=2
      Time=2026-04-01 10:32:40
      SyslogEnable=Disable
      SyslogServerIP=0.0.0.0
      SyslogUDPPort=0

  Verbs:
      cd
      exit
      help
      reset
      set
      show
      version

Just bunch of system information properties. The only command that looked something remotely helpful was reset.
I executed it and after a minute or so, my router DHCP settings reported new IP being used by multiple machines. That exactly what was I expecting if bonding would work!

I pinged it and after the ping was succesful I tried to connect to it via SSH using my usual credentials. It worked. I checked the networks and it was OK.

4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000                                                                                                                                                                     
    link/ether b6:46:8a:50:11:fb brd ff:ff:ff:ff:ff:ff                                                                                                                                                                                                                         
    inet 10.0.0.109/24 metric 1024 brd 10.0.0.255 scope global dynamic bond0                                                                                                                                                                                                   
       valid_lft 85801sec preferred_lft 85801sec                                                                                                                                                                                                                               
    inet6 fe80::b446:8aff:fe50:11fb/64 scope link proto kernel_ll                                                                                                                                                                                                              
       valid_lft forever preferred_lft forever           

Ip was incorrect but I did changed it in DHCP settings to my usual one I was using for that machine. After DHCP restarted IPs were reassigned and router were showing correct ones. Strangely even if SSH and HTTP and pings were using correct IPs network on the server side were still reporting the old ones were assigned to one Ethernet network and Wifi.

Leave a Reply

Your email address will not be published. Required fields are marked *

Solve : *
8 + 8 =