Linux networking: Using ip tool instead of ifconfig

To best troubleshoot your Linux network, you'll need to make sure that all IP-related parameters on your network cards are set correctly. If you're using a Dynamic Host Configuration Protocol (DHCP) server, this has most

Continue Reading This Article

Enjoy this article as well as all of our content, including E-Guides, news, tips and more.

likely been taken care of already. But if you are configuring a server, you have probably left your systems prone to errors by entering the IP information manually. To find out if the IP parameters on your server are set correctly, there are a few questions that you should answer:

  • Are you using the right IP address?
  • Are you in the right subnet mask?
  • Are you sure you're using the right tool to monitor your IP configuration?
  • Are you able to communicate with the default gateway?
  • Can you reach the Domain Name System (DNS) server?

You many notice that these are all parameters you should set on your own computer. IP-related problems can have their origins outside of your network, as well. I won't deal with these cases, however, as a system administrator typically can't influence them.

Ip versus ifconfig
Many people still like to work with the ifconfig tool to monitor and configure their network. An alternative tool known as ip, however, has been around for a couple of years now. The good news is that there is some compatibility. The bad news is that the compatibility is not complete.

Information that you set using the ip tool won't show up when you monitor your system using ifconfig. While that may seem irrelevant, it isn't, as most of the system tools used on the different Linux distributions rely internally upon the ip tool. That means that you will miss part of the configuration that you've set when using ifconfig for monitoring.

Let's have a look at an example. Use the following command to add a random IP address to your eth0 network card:

ip address add dev eth0

Now use the ifconfig command to have a look at the configuration of your network card. As you can see in Listing 1 below, the address you've just added doesn't seem to be there.

Listing 1: IP address information set with ip doesn't always show in ifconfig:

uppernavik:/ # ifconfig eth0 
eth0      Link encap:Ethernet  HWaddr 00:15:C5:81:7B:46   
          inet addr:  Bcast:  Mask: 
          UP BROADCAST MULTICAST  MTU:1500  Metric:1 
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000  
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 

The reason for this isn't hard to understand: ip writes secondary IP address configurations to a different location than ifconfig. Always use ip to find out details about your ip address configuration.

Even if ip is currently the only tool to monitor IP address settings, there are things that ifconfig handles better. An example, for instance, is monitoring the amount of traffic on a network interface, including statistics about packets that have failed. When traveling, I like to monitor the amount of traffic that is sent over my ppp0 interface, which is used to connect to 3G networks. As 3G connections abroad can be expensive, it is worthwhile to monitor the amount of traffic that is being transmitted, and the ifconfig command provides excellent details on this topic.

Once you have used ip to verify that your network connection is using the correct address information, it's time to verify the connection to external networks. To connect to other networks, your computer needs a router. Normally, all computers have a default router setting: an IP address on the same network of the router that allows you to connect to other networks. It is common, but not mandatory, that the last IP address in the range is used for this purpose.

There are two commands to show information about your current routing: the route command and the ip route command. In Listing 2, you can see the output of both of these commands.

Listing 2: You can use route or ip route to show routing information

uppernavik:/ # ip route show dev vmnet1  proto kernel  scope link  src  dev eth0  proto kernel  scope link  src dev vmnet8  proto kernel  scope link  src dev eth0  proto kernel  scope link  src  
uppernavik:/ # route -n 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface   U     0      0        0 vmnet1   U     0      0        0 eth0   U     0      0        0 vmnet8   U     0      0        0 eth0

These commands contain information that includes a list of known networks, the IP address of the router that is used to get there and the name of the interface that connects to this computer. The IP address of the router to get to the target network may very well be a local IP address (which is the case in the commands from Listing 2).

As you can see in the example in Listing 2, there is no major difference between the information returned by the route command and the ip route command. You may also notice that some vital information is missing: This computer does not have a default router. That means that this computer is incapable of connecting to external networks.

If a default router hasn't been added automatically, you can use the ip route add command. If, for instance, you want to add a default router with the ip address, you can use the following command:

ip route add default via

From this moment on, you'll be able to connect to computers on other networks.

The last step in connecting to the rest of the world is name resolving, provided you don't want to connect to other computers by using IP addresses only. If you want to use meaningful names to connect to other computers, such as www.example.com, you'll need DNS.

Typically, you'll use the DNS server that has been installed by your Internet provider for this purpose. You'll have to tell your computer where it can find your favorite DNS server. To do this, find out which is the address of the nameserver you need and add a line like the following to the configuration file /etc/resolv.conf:


After following these steps, you should be connected. To verify this, you can use ping. The best method is to ping by DNS name, but make sure that you are pinging a server configured to reply to DNS, as not all servers do.

ABOUT THE AUTHOR: Sander van Vugt is an author and independent technical trainer, specialising in Linux since 1994. Vugt is also a technical consultant for high-availability (HA) clustering and performance optimisation, as well as an expert on SLED 10 administration.

This was first published in January 2010

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.