Overview
The ip command is used to assign an address to a network interface. It can be use to and/or configure network interface parameters on a Linux operating systems.
Syntax
ip OBJECT COMMAND
ip [options] OBJECT COMMAND
ip OBJECT help
Understanding ip command OBJECTS syntax
OBJECTS can be any one of the following and may be written in full or abbreviated form:
Object | Abbreviated form | Purpose |
link | l | Network device. |
address | a addr |
Protocol (IP or IPv6) address on a device. |
addrlabel | addrl | Label configuration for protocol address selection. |
neighbour | n neigh |
ARP or NDISC cache entry. |
route | r | Routing table entry. |
rule | ru | Rule in routing policy database. |
maddress | m maddr |
Multicast address. |
mroute | mr | Multicast routing cache entry. |
tunnel | t | Tunnel over IP. |
xfrm | x | Framework for IPsec protocol. |
To get information about each object use help command as follows:
ip OBJECT help ip OBJECT h ip a help ip r help |
ip Command Examples
Displays info about all network interfaces
burnz@server1:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link /loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1 /8 scope host lo valid_lft forever preferred_lft forever inet6 ::1 /128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link /ether fa:16:3e:d5:f4:91 brd ff:ff:ff:ff:ff:ff inet 10.10.10.195 /24 brd 10.10.10.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fed5:f491 /64 scope link valid_lft forever preferred_lft forever |
You can select between IPv4 and IPv6 using the following syntax:
burnz@server1:~$ ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default inet 127.0.0.1 /8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 10.10.10.195 /24 brd 10.10.10.255 scope global eth0 valid_lft forever preferred_lft forever burnz@server1:~$ ip -6 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 inet6 ::1 /128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::f816:3eff:fed5:f491 /64 scope link valid_lft forever preferred_lft forever |
Assigns the IP address to the interface
The syntax is as follows to add an IPv4/IPv6 address:
ip a add {ip_addr /mask } dev {interface} |
To assign 192.168.1.200/255.255.255.0 to eth0, enter:
ip a add 192.168.1.200 /255 .255.255.0 dev eth0 |
OR
ip a add 192.168.1.200 /24 dev eth0 |
Remove / Delete the IP Address from the interface
The syntax is as follows to remove an IPv4/IPv6 address:
ip a del {ipv6_addr_OR_ipv4_addr} dev {interface} |
To delete 192.168.1.200/24 from eth0, enter:
ip a del 192.168.1.200 /24 dev eth0 |
Display neighbor/arp cache
The syntax is:
ip n show ip neigh show |
Sample outputs (note: I masked out some data with alphabets):
bernardbarbosa@p1hkdcla01:~$ ip neigh show 10.10.10.161 dev eth0 FAILED 10.10.10.160 dev eth0 lladdr fa:16:3e:bf:87:80 STALE 10.10.10.162 dev eth0 lladdr fa:16:3e:91:fa:a6 STALE 10.10.10.163 dev eth0 lladdr fa:16:3e:9c:17:ec STALE 10.10.10.165 dev eth0 lladdr fa:16:3e:ec:1c:8f STALE 10.10.10.164 dev eth0 lladdr fa:16:3e:34:89:3b STALE 10.10.10.166 dev eth0 lladdr fa:16:3e:02:6a:86 STALE 10.10.10.167 dev eth0 lladdr fa:16:3e:92:e6:f3 STALE 10.10.10.168 dev eth0 lladdr fa:16:3e:e0:f4:7d STALE 10.10.10.169 dev eth0 lladdr fa:16:3e:ca:65:67 STALE 10.10.10.171 dev eth0 FAILED 10.10.10.170 dev eth0 lladdr fa:16:3e:81:37:01 STALE 10.10.10.173 dev eth0 lladdr fa:16:3e:2c:ae:eb STALE 10.10.10.172 dev eth0 lladdr fa:16:3e:45:a7:cf STALE 10.10.10.177 dev eth0 lladdr fa:16:3e:3f:8d:d3 STALE 10.10.10.179 dev eth0 lladdr fa:16:3e:f5:6b:36 STALE 10.10.10.178 dev eth0 lladdr fa:16:3e:75:4b:80 STALE 10.10.10.181 dev eth0 lladdr fa:16:3e:98:0a:db STALE 10.10.10.180 dev eth0 lladdr fa:16:3e:79:eb:0f STALE 10.10.10.182 dev eth0 lladdr fa:16:3e:eb:c4:da STALE 10.10.10.183 dev eth0 lladdr fa:16:3e:0b:a8:27 STALE 10.10.10.184 dev eth0 lladdr fa:16:3e:d8:21:a2 STALE 10.10.10.185 dev eth0 lladdr fa:16:3e:49:8f:3f STALE 10.10.10.187 dev eth0 lladdr fa:16:3e:70:fb:08 STALE 10.10.10.186 dev eth0 lladdr fa:16:3e:2b:42:fa STALE 10.10.10.188 dev eth0 lladdr fa:16:3e:b0:8d:ca STALE 10.10.10.189 dev eth0 lladdr fa:16:3e:09:53:2c STALE 10.10.10.191 dev eth0 lladdr fa:16:3e: bc :ab:65 STALE 10.10.10.190 dev eth0 lladdr fa:16:3e:4a:84:83 STALE 10.10.10.192 dev eth0 lladdr fa:16:3e:71:6e:c0 STALE 10.10.10.193 dev eth0 lladdr fa:16:3e: df :85:4d STALE 10.10.10.194 dev eth0 lladdr fa:16:3e:aa:27:8a STALE 10.10.10.196 dev eth0 lladdr fa:16:3e:c4:a6:10 STALE 10.10.10.197 dev eth0 lladdr fa:16:3e:12:cb:e1 STALE 10.10.10.198 dev eth0 lladdr fa:16:3e:2b:c8:39 STALE 10.10.10.199 dev eth0 lladdr fa:16:3e:01:cb:34 STALE 10.10.10.200 dev eth0 lladdr fa:16:3e:1d:eb:06 STALE 10.10.10.252 dev eth0 lladdr cc:ef:48:0e:50:43 STALE 10.10.10.253 dev eth0 lladdr cc:ef:48:02:a9:42 STALE 10.10.10.254 dev eth0 lladdr 00:00:0c:07:ac:0a REACHABLE 10.10.10.1 dev eth0 FAILED 10.10.10.20 dev eth0 lladdr d4:be:d9:b7:18:f1 STALE 10.10.10.21 dev eth0 lladdr d4:be:d9:ed:10:07 STALE 10.10.10.22 dev eth0 FAILED 10.10.10.26 dev eth0 lladdr 00:50:56:b4:09:65 STALE 10.10.10.27 dev eth0 lladdr fa:16:3e:7a:60:03 STALE 10.10.10.29 dev eth0 lladdr 00:50:56:b4:09:90 STALE 10.10.10.31 dev eth0 lladdr 00:50:56:b4:09:93 STALE 10.10.10.30 dev eth0 lladdr 00:50:56:b4:09:93 STALE 10.10.10.32 dev eth0 lladdr fa:16:3e:21:c2:1b STALE 10.10.10.33 dev eth0 FAILED 10.10.10.34 dev eth0 FAILED 10.10.10.35 dev eth0 lladdr 00:50:56:b4:09:9d STALE 10.10.10.36 dev eth0 FAILED 10.10.10.37 dev eth0 lladdr 00:50:56:b4:09:ab STALE 10.10.10.38 dev eth0 lladdr 00:50:56:b4:09:a9 STALE 10.10.10.39 dev eth0 lladdr 00:50:56:b4:09:ac STALE 10.10.10.41 dev eth0 lladdr 00:50:56:b4:09:b1 STALE 10.10.10.40 dev eth0 lladdr 00:50:56:b4:09:ae STALE 10.10.10.42 dev eth0 lladdr 00:50:56:b4:09:ad STALE 10.10.10.44 dev eth0 lladdr 00:50:56:b4:56:b9 STALE 10.10.10.45 dev eth0 lladdr 00:50:56:b5:1b:82 STALE 10.10.10.46 dev eth0 FAILED 10.10.10.48 dev eth0 lladdr 00:50:56:b4:09:b8 STALE 10.10.10.56 dev eth0 lladdr 00:50:56:b4:70:48 STALE 10.10.10.59 dev eth0 lladdr 00:50:56:b4:70:44 STALE 10.10.10.60 dev eth0 lladdr 00:50:56:b4:70:4c STALE 10.10.10.64 dev eth0 FAILED 10.10.10.66 dev eth0 lladdr fa:16:3e: bc :ab:65 STALE 10.10.10.67 dev eth0 lladdr fa:16:3e: bc :ab:65 STALE 10.10.10.68 dev eth0 lladdr 00:50:56:b4:41:72 STALE |
The last field show the the state of the “neighbor unreachability detection” machine for this entry:
- STALE – The neighbor is valid, but is probably already unreachable, so the kernel will try to check it at the first transmission.
- DELAY – A packet has been sent to the stale neighbor and the kernel is waiting for confirmation.
- REACHABLE – The neighbor is valid and apparently reachable.
Add a new route
The syntax is:
ip route add {NETWORK /MASK } via {GATEWAYIP} ip route add {NETWORK /MASK } dev {DEVICE} ip route add default {NETWORK /MASK } dev {DEVICE} ip route add default {NETWORK /MASK } via {GATEWAYIP} |
Add a plain route to network 192.168.1.0/24 via gateway 192.168.1.254:
ip route add 192.168.1.0 /24 via 192.168.1.254 |
To route all traffic via 192.168.1.254 gateway connected via eth0 network interface:
ip route add 192.168.1.0 /24 dev eth0 |
Delete a route
The syntax is as follows to delete default gateway:
ip route del default |
In this example, delete the route created
ip route del 192.168.1.0 /24 dev eth0 |
Old vs. New tool
Deprecated Linux command and their replacement cheat sheet:
ifconfig -a | ip a |
ifconfig enp6s0 down | ip link set enp6s0 down |
ifconfig enp6s0 up | ip link set enp6s0 up |
ifconfig enp6s0 192.168.2.24 | ip addr add 192.168.2.24/24 dev enp6s0 |
ifconfig enp6s0 netmask 255.255.255.0 | ip addr add 192.168.1.1/24 dev enp6s0 |
ifconfig enp6s0 mtu 9000 | ip link set enp6s0 mtu 9000 |
ifconfig enp6s0:0 192.168.2.25 | ip addr add 192.168.2.25/24 dev enp6s0 |
netstat | ss |
netstat -tulpn | ss -tulpn |
netstat -neopa | ss -neopa |
netstat -g | ip maddr |
route | ip r |
route add -net 192.168.2.0 netmask 255.255.255.0 dev enp6s0 | ip route add 192.168.2.0/24 dev enp6s0 |
route add default gw 192.168.2.254 | ip route add default via 192.168.2.254 |
arp -a | ip neigh |
arp -v | ip -s neigh |
arp -s 192.168.2.33 1:2:3:4:5:6 | ip neigh add 192.168.3.33 lladdr 1:2:3:4:5:6 dev enp6s0 |
arp -i enp6s0 -d 192.168.2.254 | ip neigh del 192.168.2.254 dev wlp7s0 |