浅谈IProute2套件里的IP命令
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2 套件里提供了许多增强功能的命令,ip命令即是其中之一。
上图就是二者的区别,ifconfig即将被抛弃
IP命令
语法:ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
-
主要参数
-
OPTIONS是修改ip行为或改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。如link、addr、route、rule、tunnel 。
-
object是要管理者获取信息的对象。如网络接口类型eth0。
-
command设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或list)。有些对象不支持这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。
-
arguments是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。命令的默认参数将使用default标出。
-
功能图
IP一些常见用法
- ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址时指明网卡别名
[ scope { global | link | host } ]:指明作用域
global: 全局可用
link: 仅链接可用
host: 本机可用
[broadcast ADDRESS]:指明广播地址
- 添加一个IP地址
ip addr add 1.1.1.1/8 eth0 dev label eth0:1
ip a
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:70:cf:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.39.13/24 brd 192.168.39.255 scope global noprefixroute dynamic eth0
valid_lft 1604sec preferred_lft 1604sec
inet 1.1.1.1/8 scope global eth0:1
valid_lft forever preferred_lft forever
- 删除一个IP地址
ip addr del 1.1.1.1/8 dev eth0
- 关闭网卡
ip link set dev lo down #关闭lo回环网卡,仅是做测试用
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
- 启动网卡
ip link set dev lo up
启动网卡 关闭网卡太鸡儿复杂 不如ifconfig简洁
- 查看、添加、修改、删除路由
ip route #查看route条目
default via 192.168.39.1 dev eth0 proto dhcp metric 100
192.168.39.0/24 dev eth0 proto kernel scope link src 192.168.39.13 metric 100
ip route add 192.168.39.0/24 via 192.168.39.100 #增加路由
ip route del 192.168.39.0/24 via 192.168.39.100 #删除路由
ip route add default via 192.168.39.120 #增加默认网关
ip route del default via 192.168.39.120 #删除默认网关
ip route flush dev eth0 #清空路由表
把路由表清空后带来一个问题,机器不能访问了,什么路径都没有了,所以来手动重建路由表
ip route add default via 192.168.39.1
ip route add 192.168.39.0/24 via 192.168.39.1
-
显示网络统计数据
使用ip命令还可以显示不同网络接口的统计数据。
ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
81034 1138 0 0 0 0
TX: bytes packets errors dropped carrier collsns
81034 1138 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:78:fe:6d brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
79631 1162 0 0 0 0
TX: bytes packets errors dropped carrier collsns
31731 296 0 0 0 0
网络统计数据
当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。
ip -s -s link ls docker0
或
ip -s link ls docker0
-
查看ARP信息
地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。
ip neighbour
网络接口设置
激活和停止网络接口,你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。
-
停止网络接口eth0
ip link set eth0 down -
启动网络接口eth0
ip link set eth0 up -
修改设置传输队列的长度
ip link set dev eth0 txqueuelen 100
或
ip link set dev eth0 txqlen 100 -
修改网络设置MTU(最大传输单元)的值
ip link set dev eth0 mtu 1500
-
修改网卡的MAC地址
ip link set dev eth0 address 00:01:4f:00:15:f1