Feb 152013
 

As I wrote more than 2 years ago, the network tools (often referred as net-tools) ifconfig, netstat and route that should be familiar to anyone that has worked with a terminal, have been deprecated in favour of the iproute2 suite from some years.

iproute2 is intended to replace this entire suite of legacy Unix networking tools that were previously used for the tasks of configuring network interfaces, routing tables, and managing the ARP table, but which have not been developed since 2001.

You can find some examples of the usage of the iproute commands on my articles about:

- Policy routing
- Socket Statistics on Linux
- MAC Address Managment on Linux

And today I want to share with you some of the most useful commands that you can use with this “new” suite of commands and the translation of some old commands that we were all used to use on the terminal.


Interface configuration

With this task you can set an interface up and configure an IP address over it, so 2 classic command with ifconfig were:

[root@myserver.com ~]# ifconfig eth0 up
[root@myserver.com ~]# ifconfig eth0 192.168.1.1 netmask 255.255.255.0

With iproute2, control of interfaces themselves – both physical and logical – is through the link subcommand. Bringing up eth0 can be done with

[root@myserver.com ~]# ip link set eth0 up

While to add an IP address to an interface you can use:

[root@myserver.com ~]# ip addr add 192.0.2.1/24 dev eth0

If you prefer you can use also this notation:

[root@myserver.com ~]# ip addr add 192.0.2.1 255.255.255.0 dev eth0

To verify the result, or just check which IP addresses are configured on your system you can use:

[root@myserver.com ~]#ip addr ls
[root@myserver.com ~]#ip addr show
[root@myserver.com ~]#ip addr ls eth0

The first 2 command gave exactly the same output, while the third just shows the IP of the eth0 device.

Creating ethernet alias

Assuming that your eth0 IP is 192.0.2.1 and you would like to create an alias eth0:0 with IP 192.0.2.2. You would use:

ifconfig eth0:0 192.0.2.2 up

Where the key was to put :number to indicate that the IP was an alias, with iproute2 you can simply use the same command :

[root@myserver.com ~]# ip addr add 192.0.2.2 255.255.255.0 dev eth0

Routing

What’s the modern alternative of the command route -n ?
A simple:

[root@myserver.com ~]# ip ro

The output is slightly different but you get exactly the same information:

[me@mydesktop ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0
 
[me@mydesktop ~] ip ro
default via 192.168.0.1 dev wlan0  proto static 
169.254.0.0/16 dev wlan0  scope link  metric 1000 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.3  metric 9

And to add and remove routes you can use the syntax ip ro add|del destination via gateway, so to add and remove a route to the lan 10.0.0.0/16 I could use:

[me@mydesktop ~]# ip ro add 10.0.0.0/16 via 192.168.0.1
[me@mydesktop ~]# ip ro del 10.0.0.0/16 via 192.168.0.1


Find the Route to an IP Address

If you have multiple interfaces and switch between them (eth0 for work, wlan1 for home, tun0 for vpn) and you want to get the ip and gateway of the interface actually used to connect to an IP try this:

[root@myserver.com ~]# ip route get IP

So for example you could use the IP 8.8.8.8 (Google DNS server) to check which interface the computer will use:

[me@mydesktop ~] ip route get 8.8.8.8
8.8.8.8 via 192.168.0.1 dev wlan0  src 192.168.0.3

So to reach 8.8.8.8 my desktop uses wlan0, the gatway located at 192.168.0.1 and the private ip 192.168.0.3

Neighbours

In iproute2 there is also a subcommand equivalent to the traditional arp -na, useful to know the ARP table on a UNIX machine.
You can get the same result with iproute2 using ip neighbor, with ip n being the shortened extreme:

[me@mydesktop ~] ip neigh
192.168.0.1 dev wlan0 lladdr 00:18:4d:af:a0:64 REACHABLE

So what are you waiting for ?
It’s time to switch to the “new” iproute suite, the commands are easy and powerful !

Popular Posts:

flattr this!

  One Response to “Some useful command with iproute2”

  1. Awesome article – thanks!

    The one thing that articles about iproute2 don’t seem to mention (from the 2 or 3 articles I’ve read) is the “only show interfaces that are up” command, which took me a while to find – here it is if anyone else is curious:

    $ ip address show up

    shortened to:
    $ ip a s up

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>