ifconfig已淘汰,ip登场(iproute工具包)
ifconfig已淘汰,ip登场(iproute工具包)
教程每周二、四、六更新
CentOS7及以后的版本,net-tools工具包已经被iproute工具包替换。我们看:
[root@m01 ~]# rpm -qi net-tools
Name : net-tools
Version : 2.0
......
Description :
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.
上面最后的输出的意思:net-tools软件包里包含ifconfig, netstat, route等工具,但都被弃用了,取而代之的是iproute软件包。
[root@m01 ~]# rpm -ql iproute
/etc/iproute2
/etc/iproute2/bpf_pinning
/etc/iproute2/ematch_map
/etc/iproute2/group
/etc/iproute2/nl_protos
/etc/iproute2/rt_dsfield
/etc/iproute2/rt_protos
/etc/iproute2/rt_realms
/etc/iproute2/rt_scopes
/etc/iproute2/rt_tables
/etc/sysconfig/cbq
/etc/sysconfig/cbq/avpkt
/etc/sysconfig/cbq/cbq-0000.example
/usr/lib64/tc
/usr/lib64/tc/experimental.dist
/usr/lib64/tc/m_ipt.so
/usr/lib64/tc/m_xt.so
/usr/lib64/tc/normal.dist
/usr/lib64/tc/pareto.dist
/usr/lib64/tc/paretonormal.dist
/usr/sbin/arpd
/usr/sbin/bridge
/usr/sbin/cbq
/usr/sbin/ctstat
/usr/sbin/devlink
/usr/sbin/genl
/usr/sbin/ifcfg
/usr/sbin/ifstat
/usr/sbin/ip
/usr/sbin/lnstat
/usr/sbin/nstat
/usr/sbin/rdma
/usr/sbin/routef
/usr/sbin/routel
/usr/sbin/rtacct
/usr/sbin/rtmon
/usr/sbin/rtpr
/usr/sbin/rtstat
/usr/sbin/ss
/usr/sbin/tc
......
iproute包含了很多工具,其中:ss命令用来取代netstat命令,之前写过一篇文章:
ip命令的部分功能来实现ifconfig的功能,但比ifconfig更强大。官网:http://www.policyrouting.org/
语法
ip [ OPTIONS ] OBJECT { COMMAND | help } [argument]
[root@m01 ~]# ip -h
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
vrf }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec |
-f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
-4 | -6 | -I | -D | -B | -0 |
-l[oops] { maximum-addr-flush-attempts } | -br[ief] |
-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
-rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}
OPTIONS
-V 显示命令版本信息
-s 显示更详细的信息
-h 显示数字时,以更方便阅读的方式显示,即自动显示为KB、MB、GB等形式
-f 强制使用指定的协议族
-r 显示主机时,不适用IP地址,而是使用主机的域名
-4 | -6 使用ipv4协议还是使用ipv6协议
OBJECT
link 网络设备
address IP地址信息
neighbour 邻居表。用来管理ARP或NDISC缓存项
route 路由表。【实现原来route命令的功能】
rule 管理路由策略
tunnel IP隧道
COMMAND
add
delete
show(list)
argument
argument是命令的一些参数,它们依赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev 是ip link 命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。ip address
ip address当然可以简写成ip addr,甚至可以简写成ip a。
ip addr后面默认的参数是show。
# 详细语法
[root@m01 ~]# ip addr help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
[ CONFFLAG-LIST ]
ip address del IFADDR dev IFNAME [mngtmpaddr]
ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
[ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
[ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
[ label LABEL ] [up] [ vrf NAME ] ]
ip address {showdump|restore}
实例演示:
ip addr # 显示网卡IP信息
ip addr show # 显示网卡IP信息
ip addr add 192.168.20.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.20.1/24 dev eth0 # 删除eth0网卡IP地址
ip a show dev ens33 # 查看某个特定网卡的信息
ip link
ip link后面默认的参数是dev。[root@m01 ~]# ip link help
Usage: ip link add [link DEV] [ name ] NAME
[ txqueuelen PACKETS ]
[ address LLADDR ]
[ broadcast LLADDR ]
type TYPE [ ARGS ]
ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]
ip link set { DEVICE | dev DEVICE | group DEVGROUP }
[ { up | down } ]
[ dynamic { on | off } ]
[ promisc { on | off } ]
[ broadcast LLADDR ]
[ txqueuelen PACKETS ]
[ mtu MTU ]
......
ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]
ip link xstats type TYPE [ ARGS ]
ip link afstats [ dev DEVICE ]
ip link help [ TYPE ]
TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |
gre | gretap | ip6gre | ip6gretap | vti | nlmon | team_slave |
bond_slave | ipvlan | geneve | bridge_slave | vrf | macsec }
- broadcast表示该网络设备可以将数据报传送给子网内的所有主机;
- dynamic 表示该网络设备可以动态的建立和删除。
- promisc表示网络设备处于混杂模式,这时该设备将进行监听并将监听到的数据传递给内核,即使这些数据不是发送给该主机的。通常用于网络探测。
ip link show # 显示网络接口信息
ip link set eth0 up # 开启网卡eth0,类似以前的ifup eth0
ip link set eth0 down # 关闭网卡eth0,类似以前的ifdown eth0
ip link set eth0 promisc on # 开启网卡的混合模式
ip link set eth0 promisc offi # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400 # 设置网卡最大传输单元
ip neighbour
详细语法格式:[root@m01 ~]# ip neighbour help
Usage: ip neigh { add | del | change | replace }
{ ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]
ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]
[ vrf NAME ]
STATE := { permanent | noarp | stale | reachable | none |
incomplete | delay | probe | failed }
add 添加一个新的邻接条目change 修改一个现有的条目replace 替换一个已有的条目lladdr LLADDRESS 邻居的链路层地址。LLADDRESS可以为空。nud NUD_STATE 邻接条目的状态。nud 是Neighbour Unreachability
实例演示
ip neigh show # 查看当前邻居信息
ip neigh # 查看当前邻居信息
ip neigh add 192.168.10.3 lladdr 0:0:0:0:0:1 dev ens32 nud perm # 永久添加一个邻居信息
ip neigh del 192.168.10.100 dev ens34 # 删除添加的信息
ip route
路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。显示路由信息:ip route # 默认动作是show
添加路由:
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
ip route list # 查看路由信息
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
我们进一步看看ip route的用法:
[root@m01 ~]# ip route help
Usage: ip route { list | flush } SELECTOR
ip route save SELECTOR
ip route restore
ip route showdump
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
[ mark NUMBER ] [ vrf NAME ]
[ uid NUMBER ]
ip route { add | del | change | append | replace } ROUTE
实例演示:
ip route save > tablesave # 保存现有的路由表
ip route restore < tablesave # 用刚才保存的路由表来恢复原有的路由表
注意:ip route restore这个命令期望读取用ip route save保存的数据流。它将尝试恢复路由表信息,使其与保存时的信息完全相同。任何现有的路由都保持不变。即,恢复的时候只做增量添加而不是覆盖现有的路由。
ip rule
在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。linux系统有多张路由表,而路由策略会根据一些条件,将路由请求转向不同的路由表。例如源地址在某些范围走路由表A,另外的数据包走路由表,类似这样的规则是有路由策略rule来控制。在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级),如下:[root@m01 ~]# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
[root@m01 ~]# cat /etc/iproute2/rt_tables |grep -v "^#"
255 local
254 main
253 default
0 unspec
rule 0 :匹配任何条件的数据包,查询路由表local(table id = 255)。rule 0非常特殊,不能被删除或者覆盖。查询路由表local(ID 255) | 路由表local 是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 32766:匹配任何条件的数据包,查询路由表main(ID 254),路由表main(ID 254)是一个普通的表,包含所有的无策略路由。平时使用route add添加的路由都是加到这个表里面的。rule 32767:匹配任何条件的数据包,查询路由表default(ID 253),路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理这个规则也可以删除。匹配优先级顺序:rule 0 > rule 32766 > rule 32767
[root@m01 ~]# ip rule help
Usage: ip rule { add | del } SELECTOR ACTION
ip rule { flush | save | restore }
ip rule [ list [ SELECTOR ]]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
[ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ]
[ uidrange NUMBER-NUMBER ]
ACTION := [ table TABLE_ID ]
[ nat ADDRESS ]
[ realms [SRCREALM/]DSTREALM ]
[ goto NUMBER ]
SUPPRESSOR
SUPPRESSOR := [ suppress_prefixlength NUMBER ]
[ suppress_ifgroup DEVGROUP ]
TABLE_ID := [ local | main | default | NUMBER ]
SELECTOR具体参数如下:
From 源地址
To 目的地址(这里是选择规则时使用,查找路由表时也使用)
Tos IP包头的TOS(type of sevice)域
Dev 物理接口
Fwmark 防火墙参数
ACTION动作:
Table 指明所使用的表
Nat 透明网关
Action prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
Reject 单纯丢弃该包
Unreachable 丢弃该包, 并发送 NET UNREACHABLE的ICMP信息
实例演示:
- 指定优先级第一条命令将向规则链增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由,这条规则的优先级是32000.第二条命令将向规则链增加一条规则,规则匹配的对象是IP为172.16.8.12, tos等于0x10的包,使用路由表2,这条规则的优先级是32001,动作是丢弃。
[root@m01 ~]# ip rule add from 0/0 table 1 pref 32000
[root@m01 ~]# ip rule add from 172.16.8.12/32 tos 0x10 table 2 pref 32001 prohibit
[root@m01 ~]# ip rule
0: from all lookup local
32000: from all lookup 1
32001: from 172.16.8.12 tos lowdelay lookup 2 prohibit
32766: from all lookup main
32767: from all lookup default
不指定优先级
[root@m01 ~]# ip rule add from 171.13.12.23 tab 200
[root@m01 ~]# ip rule
0: from all lookup local
31999: from 171.13.12.23 lookup 200
32000: from all lookup 1
32001: from 172.16.8.12 tos lowdelay lookup 2 prohibit
32766: from all lookup main
32767: from all lookup default
不指定pref 优先级,那么系统就会默认创建rule的优先级,这个优先级就是出0以外,最小的值减1。注意:不要混淆路由表(route)和规则(rule):ip rule规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。例如:
ip route add default via 192.168.10.1 dev eth2 table 200
ip rule add from 192.168.10.100 lookup 200
第一行表示,先建立一个路由表,其table名为200,这个表里面的默认路由是192.168.10.1第二行表示 ,新建一个ip的策略,从192.168.10.100发出来的流量都使用路由表200这张图。由于ip rule数字越低,其优先级最高,而路由main(254)表的ip rule规则是32766,如果没有指定ip rule的优先级,其默认是从32765开始减起来的,所以一般就认为,加IP策略会比route -n看到的优先级更高。如果要指定优先级,可以加上pref number参数。linux上面的路由表只有255个,没有优先级的;而ip rule的策略表是没有限制的,数字越低,其优先级越高。
推荐阅读
Linux 网络状态工具 ss 命令详解
这次终于搞明白VLAN技术了
放后台的Linux任务没有了,试试这个命令我是如何用10分钟理解Kubernetes的
除每周二、四、六定期更新的《Linux云计算一站式教程》以外,其余时间雷哥会推送一些工作中遇到的小知识、实战经验总结的文章。后续都会收录在“实战经验”合集中。
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
119个上一篇网络配置:net-tools工具包下一篇netstat已弃用,ss来袭(iproute工具包)