Here is a debug idea for your Debian or Ubuntu server or network station, if you do fancy stuff with your network configuration, or if you are in trouble even with a standard configuration.
Let’s first review some documentation and namely the one of ifup(8) and ifdown(8). Here is an excerpt from it:
KNOWN BUGS/LIMITATIONS
The program keeps records of whether network interfaces are up or down. Under exceptional circumstances these records can become inconsistent with the real states of the interfaces.
Moreover, if the ifup(8) command fails in the middle/end of configuring an interface, then the interface is marked as “down” in the state database but is actually configured, i.e. its actual state is not reverted to a non-configured actually “down” interface. As a result, ifdown(8) doesn’t want to bring down the interface later, even though it’s configured to some point. Furthermore, if ifdown(8) fails in the middle of the de-configuration, you are not notified properly by an error message.
Why would you care so much? If all ifup(8) and ifdown(8) procedures don’t complete well, most probably `/etc/init.d/networking restart` will not work as expected, and you also won’t be able to bring up or down certain interfaces by calling “ifup $IFACE” or “ifdown $IFACE”.
Let’s see how we can have better control and debug info. Here is a somehow complicated “/etc/network/interfaces” example which could cause you some trouble and is not that easy to debug:
# The primary network interface auto bond0 iface bond0 inet static address 192.168.7.13 netmask 255.255.255.0 network 192.168.7.0 broadcast 192.168.7.255 gateway 192.168.7.8 pre-up /sbin/ifconfig eth0 up pre-up /sbin/ifconfig eth1 up pre-up echo bond0 > /sys/module/aoe/parameters/aoe_iflist pre-up echo 100 > /sys/class/net/bond0/bonding/miimon pre-up echo 1 > /sys/class/net/bond0/bonding/mode post-up /sbin/ifenslave bond0 eth0 eth1 post-up /sbin/ip link set bond0 txqueuelen 1000 down /sbin/ifenslave -d bond0 eth0 eth1 post-down /sbin/ifconfig eth0 down post-down /sbin/ifconfig eth1 down
The problem in my case was that I used “post-down” instead of “down” for the “/sbin/ifenslave -d bond0 eth0 eth1” but that wasn’t obvious for me – I spent almost an hour trying to figure out why my “ifup” and “ifdown” (and the whole `/etc/init.d/networking` script on boot and restart) weren’t working as expected.
How can you debug it?
You can add a test for successfulness after each statement and also add one very final debug message in each “post-up” and “post-down” interfaces(5) section:
# The primary network interface auto bond0 iface bond0 inet static address 192.168.7.13 netmask 255.255.255.0 network 192.168.7.0 broadcast 192.168.7.255 gateway 192.168.7.8 pre-up /sbin/ifconfig eth0 up || echo FAILED break point 1 pre-up /sbin/ifconfig eth1 up || echo FAILED break point 2 pre-up echo bond0 > /sys/module/aoe/parameters/aoe_iflist || echo FAILED break point 3 pre-up echo 100 > /sys/class/net/bond0/bonding/miimon || echo FAILED break point 4 pre-up echo 1 > /sys/class/net/bond0/bonding/mode || echo FAILED break point 5 post-up /sbin/ifenslave bond0 eth0 eth1 || echo FAILED break point 6 post-up /sbin/ip link set bond0 txqueuelen 1000 || echo FAILED break point 7 post-up echo Successful UP for interface $IFACE down /sbin/ifenslave -d bond0 eth0 eth1 || echo FAILED break point 8 post-down /sbin/ifconfig eth0 down || echo FAILED break point 9 post-down /sbin/ifconfig eth1 down || echo FAILED break point 10 post-down echo Successful DOWN for interface $IFACE
Note the very last “post-up” and “post-down” debug statements which we added, they must always be the last “post-up” and “post-down” statements:
... post-up echo Successful UP for interface $IFACE ... post-down echo Successful DOWN for interface $IFACE
If you don’t see the “Successful UP for interface $IFACE” or “Successful DOWN for interface $IFACE” for each of the configured interfaces, then something with your network start-up script went wrong (`/etc/init.d/networking`).
The step-by-step debug statements (“… || echo FAILED break point XX”) should help you determine where exactly the problem was.
Note that the “echo” debug statements here will always exit successfully which will not interrupt your network script as it would have done it if the debug “echo” was missing.
January 4, 2015 at 7:34 am
Why ifup/ifdown should does’t do logging itself or I missed something?
January 4, 2015 at 9:20 am
At the time of writing this article, they didn’t show any error messages nor did any logging. Or at least I had no idea where they were logging to. Do you have some other observation now?
February 25, 2018 at 3:50 am
Hello Ivan, does it still work for you in the latest stable (9.3)? For me, the “post-up echo Successful UP for interface $IFACE” statement just kills ability of bringing the interface up.
February 25, 2018 at 4:02 am
Never mind. I Just discovered: `cat /etc/default/networking | grep VERBOSE`, all ifup logs go to /var/log/messages.