ip link命令:用于网络接口的配置
ip link set:修改设备属性;
ip link list|show:查看二层设备属性;
ip link help:查看简要使用帮助;
①ip link|show:查看二层设备属性
示例:
查看主机上各网卡接口的二层属性:
[root@localhost ~]# ip link #此时list或show可省略;
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
查看ens38接口的二层属性:
[root@localhost ~]# ip link show ens38 #查看指定接口属性时,show或list不能省略;
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
②ip link set:修改设备属性
主要属性:
dev NAME (default):指定要管理的设备;dev关键字可省略;
up | down:启用或禁用网络接口;
multicast { on | off }:启用或禁用组播功能;
name NEWNAME:重命名接口;
mtu MTU_NUMBER:设置MTU的大小;默认为1500;
netns { PID | NAME }:将接口移动至指定的网络名称空间中;要求Linux内核支持该功能(CentOS 7支持)
示例:
禁用ens38接口的使用:
先查看ens38接口的状态:
[root@localhost ~]# ip link show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEF
AULT qlen 1000
#ens38接口处于UP状态;
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
开始禁用ens38接口:
[root@localhost ~]# ip link set ens38 down
[root@localhost ~]# ip link show ens38
3: ens38: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen
1000
#ens38接口处于DOWN状态;
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
重新启用ens38接口:
[root@localhost ~]# ip link set ens38 up
[root@localhost ~]# ip link show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEF
AULT qlen 1000
#ens38接口已重新启用;
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
重命名ens38接口为ens30:
[root@localhost ~]# ip link set ens38 name ens30
RTNETLINK answers: Device or resource busy #显示繁忙,接口必须在DOWN状态下才可重命名;
[root@localhost ~]# ip link set ens38 down
[root@localhost ~]# ip link set ens38 name ens30 #命令键入后没有任何提示,说明修改完
成;
[root@localhost ~]# ip link show ens30
3: ens30: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen
1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff #查看ens30接口二层属性;
[root@localhost ~]# ip link show ens38
Device "ens38" does not exist. #原来的ens38已不存在;
[root@localhost ~]# ip link set ens30 up #启用修改完成的ens30接口;
[root@localhost ~]# ip link show ens30
3: ens30: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEF
AULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
将接口ens30的MTU改为1400,且关闭multicast功能:
[root@localhost ~]# ip link set ens30 mtu 1400 multicast off
[root@localhost ~]# ip link show ens30
3: ens30: <BROADCAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP mode DEFAULT qlen
1000
#ens的flags中已无MULTICAST属性,且MTU已修改为1400;
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
创建名称空间mynet,并将ens30接口移至名称空间mynet中:
[root@localhost ~]# ip netns add mynet #先创建名称空间mynet;
[root@localhost ~]# ip netns list #查看已有的名称空间;
mynet
[root@localhost ~]# ip link set ens30 netns mynet #将ens30接口移至名称空间mynet中;
[root@localhost ~]# ip netns exec mynet ip link show #在名称空间mynet之上运行命令"ip
link show",而"ip netns exec mynet"类似于进入虚拟的名称空间中,在此之上运行COMMAND.
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: ens30: <BROADCAST> mtu 1400 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip link show #重新查看接口属性;
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEF
AULT qlen 1000
link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff
#可以发现ens30已经消失了!因为它已经跑到名称空间mynet里去了。
#基于netns这种机制可以搭建复杂的内部网络/虚拟网络。
ip netns:用于管理网络名称空间
ip netns list:列出所有的netns;
ip netns add NAME:创建指定的netns;
ip netns del NAME:删除指定的netns;
ip netns exec COMMAND:在指定的netns上运行COMMAND;
①ip netns add NAME:创建指定的netns
示例:
创建名为Jack的netns:
[root@localhost ~]# ip netns add Jack
②ip netns list:列出所有的netns
示例:
[root@localhost ~]# ip netns list
Jack
mynet
#这里显示刚刚创建的Jack以及之前创建的mynet;
③ip netns del NAME:删除指定的netns
示例:
删除mynet:
[root@localhost ~]# ip netns del mynet
[root@localhost ~]# ip netns list
Jack
④ip netns exec [NAME] COMMAND:在指定的netns上运行COMMAND
示例:
将ens38接口移至Jack(netns)中,并为之配置IP地址:
[root@localhost ~]# ip link #首先查看当前主机上的所有接口属性;
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEF
AULT qlen 1000
link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff
3: ens38: <BROADCAST> mtu 1400 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip netns list #列出所有的netns;
Jack
[root@localhost ~]# ip link set ens38 netns Jack #将ens38接口放进Jack(netns)中;
[root@localhost ~]# ip netns exec Jack ip link #在Jack(netns)中运行"ip link";
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: ens38: <BROADCAST> mtu 1400 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip netns exec Jack ip addr add 172.16.10.1/24 dev ens38 #在Jack(
netns)中为挪进去的ens38接口配置IP/NETMASK;
[root@localhost ~]# ip netns exec Jack ip addr show ens38 #在Jack(netns)中查看ens38接
口IP地址;
3: ens38: <BROADCAST> mtu 1400 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 172.16.10.1/24 scope global ens38
valid_lft forever preferred_lft forever
ip addr命令:用于管理IP地址
ip addr list|show:查看IP地址;
ip addr add:添加IP地址;
ip addr delete:删除IP地址;
ip addr flush:清空IP地址;
①ip addr list|show:查看IP地址
语法格式:
ip addr list [IFACE]
示例:
查看所有网络接口的IP地址:
[root@localhost ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff
inet 10.10.10.140/24 brd 10.10.10.255 scope global ens33
valid_lft forever preferred_lft forever
inet 10.10.10.138/24 brd 10.10.10.255 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff4e/64 scope link
valid_lft forever preferred_lft forever
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens38
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
或者:
[root@localhost ~]# ip addr show
查看ens33接口上的所有IP地址:
[root@localhost ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff
inet 10.10.10.140/24 brd 10.10.10.255 scope global ens33
valid_lft forever preferred_lft forever
inet 10.10.10.138/24 brd 10.10.10.255 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff4e/64 scope link
valid_lft forever preferred_lft forever
或者:
[root@localhost ~]# ip addr list ens33
②ip addr add:添加IP地址
语法格式:
ip addr add IFADDR dev IFACE
其他属性:
[label NAME]:为网卡接口另外添加的IP地址指定别名;
[broadcast ADDRESS]:给定广播地址;可不指定,系统会根据IP和NETMASK自动计算得出;
[scope SCOPE_VALUE]:指定作用域;SCOPE_VALUE主要有global, link, host;
SCOPE_VALUE:
global:全局有效;即指定添加的接口配置既可实现本地通信,又可实现跨网络通信;
link:仅接口有效;即只能与使用此接口配置的IP地址通信;
host:仅主机有效;即只能与本地主机上的IP地址进行通信;
示例:
添加IP地址:192.168.20.1/24,接口为ens38:
[root@localhost ~]# ip addr add 192.168.20.1/24 dev ens38
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens38
valid_lft forever preferred_lft forever
inet 192.168.20.1/24 scope global ens38
#显示已添加该地址,并作为ens38接口的secondary地址,如果没有指定别名,则该地址在
ifconfig命令中不会显示;
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
添加IP地址:172.16.10.1/24,接口为ens38,接口别名为ens38:0:
[root@localhost ~]# ip addr add 172.168.10.1/24 dev ens38 label ens38:0
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens38
valid_lft forever preferred_lft forever
inet 192.168.20.1/24 scope global ens38
valid_lft forever preferred_lft forever
inet 172.168.10.1/24 scope global ens38:0
#显示已添加,网卡别名为ens38:0,并作为ens38的secondary地址;
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
用ifconfig显示:
[root@localhost ~]# ifconfig ens38:0
ens38:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.168.10.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:0c:29:c8:ff:58 txqueuelen 1000 (Ethernet)
③ip addr delete:删除IP地址
语法格式:
ip addr delete IFADDR dev IFACE
用法和ip addr add相同。
示例:
删除刚添加的IP地址:192.168.20.1/24
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens38
valid_lft forever preferred_lft forever
inet 192.168.20.1/24 scope global ens38 #要删除的IP地址;
valid_lft forever preferred_lft forever
inet 172.168.10.1/24 scope global ens38:0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]#
[root@localhost ~]# ip addr delete 192.168.20.1/24 dev ens38
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens38
valid_lft forever preferred_lft forever
inet 172.168.10.1/24 scope global ens38:0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
#显示已经删除。
④ip addr flush:清空IP地址
语法格式:
ip addr flush dev IFACE
[root@localhost ~]# ip addr flush dev ens38
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
ip route:用于管理路由表
ip route show:显示路由表;
ip route add:添加路由;
ip route change:修改路由;
ip route replace:修改路由或添加路由;
ip route delete:删除路由;
ip route get:获得单条路由的详细信息;
ip route flush:清空路由表;
相关属性:
src SOURCE_IP:当一个网卡有多个地址时可以指定以哪个IP地址作为出口地址(源地址);
①ip route show:显示路由表
语法格式:
ip route show [TYPE PREFIX]
示例:
显示主机上路由表信息:
[root@localhost ~]# ip route show
default via 10.10.10.2 dev ens33
10.10.10.0/24 dev ens33 proto kernel scope link src 10.10.10.140
169.254.0.0/16 dev ens33 scope link metric 1002
172.16.0.0/16 via 192.168.20.1 dev ens38 src 192.168.30.1
172.16.10.0/24 via 10.10.10.2 dev ens33
192.168.10.0/24 dev ens38 proto kernel scope link src 192.168.10.1
192.168.20.0/24 dev ens38 proto kernel scope link src 192.168.20.1
192.168.30.0/24 dev ens38 proto kernel scope link src 192.168.30.1
显示172.16.0.0/16这条路由的信息:
[root@localhost ~]# ip route show 172.16.0.0/16
172.16.0.0/16 via 192.168.20.1 dev ens38 src 192.168.30.1
②ip route add:添加路由
语法格式:
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
示例:
添加一条172.16.10.0/24的路由条目,下一跳为10.10.10.140:
[root@localhost ~]# ip route add 172.16.10.0/24 via 10.10.10.2
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
172.16.10.0 10.10.10.2 255.255.255.0 UG 0 0 0 ens33
0.0.0.0 10.10.10.2 0.0.0.0 UG 0 0 0 ens33
添加一条到172.16.0.0/24网段的路由, 下一跳是192.168.20.1,网卡接口是ens38, 源地址是192.168.30.1:
[root@localhost ~]# ip addr add 192.168.10.1/24 dev ens38 #为ens38接口添加地址;
[root@localhost ~]# ip addr add 192.168.20.1/24 dev ens38
[root@localhost ~]# ip addr add 192.168.30.1/24 dev ens38
[root@localhost ~]# ip addr show ens38
3: ens38: <BROADCAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 scope global ens38
valid_lft forever preferred_lft forever
inet 192.168.20.1/24 scope global ens38
valid_lft forever preferred_lft forever
inet 192.168.30.1/24 scope global ens38
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec8:ff58/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# ip route add 172.16.0.0/16 via 192.168.20.1 src 192.168.30.1
[root@localhost ~]# ip route list
default via 10.10.10.2 dev ens33
10.10.10.0/24 dev ens33 proto kernel scope link src 10.10.10.140
169.254.0.0/16 dev ens33 scope link metric 1002
172.16.0.0/16 via 192.168.20.1 dev ens38 src 192.168.30.1 #src为192.168.30.1
172.16.10.0/24 via 10.10.10.2 dev ens33
192.168.10.0/24 dev ens38 proto kernel scope link src 192.168.10.1
192.168.20.0/24 dev ens38 proto kernel scope link src 192.168.20.1
192.168.30.0/24 dev ens38 proto kernel scope link src 192.168.30.1
③ip route change:修改路由
语法格式:
ip route change TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
示例:
将172.16.0.0/16这条路由的源地址(src)改为192.168.10.1:
[root@localhost ~]# ip route show 172.16.0.0/16 #先查看172.16.0.0/16路由信息;
172.16.0.0/16 via 192.168.20.1 dev ens38 src 192.168.30.1 #源地址为192.168.30.1;
[root@localhost ~]# ip route change 172.16.0.0/16 src 192.168.10.1 #将172.160.0.0/16
这条路由的源地址改为192.168.10.1;
[root@localhost ~]# ip route show 172.16.0.0/16
172.16.0.0/16 dev ens38 scope link src 192.168.10.1 #源地址已改动;
④ip route replace:修改路由或添加路由
语法格式:
ip route replace TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
示例:
将30.0.0.0/8这条路由(该路由事先不存在)的下一跳改为192.168.20.1,源地址改为192.168.10.1:
[root@localhost ~]# ip route change 30.0.0.0/8 via 192.168.20.1 src 192.168.10.1
RTNETLINK answers: No such file or directory
#如果使用change命令则无法修改,因为路由30.0.0.0/8事先不存在;
[root@localhost ~]# ip route replace 30.0.0.0/8 via 192.168.20.1 src 192.168.10.1
#如果使用replace命令则在键入后无任何信息输出;
root@localhost ~]# ip route show 30.0.0.0/8 #查看30.0.0.0/8路由的信息,以检测该路由
是否存在;
30.0.0.0/8 via 192.168.20.1 dev ens38 src 192.168.10.1 #说明如果指定路由不存在则会
自动按指定的属性创建该路由;
#ip route replace命令类似于rpm -Uvh(若程序包原先存在则升级,不存在则自动安装);
⑤ip route delete:删除路由
语法格式:
ip route del TYPE PREFIX
示例:
删除30.0.0.0/8这条路由:
[root@localhost ~]# ip route del 30.0.0.0/8
[root@localhost ~]# ip route show
default via 10.10.10.2 dev ens33
10.10.10.0/24 dev ens33 proto kernel scope link src 10.10.10.140
169.254.0.0/16 dev ens33 scope link metric 1002
172.16.0.0/16 dev ens38 scope link src 192.168.10.1
172.16.10.0/24 via 10.10.10.2 dev ens33
192.168.10.0/24 dev ens38 proto kernel scope link src 192.168.10.1
192.168.20.0/24 dev ens38 proto kernel scope link src 192.168.20.1
192.168.30.0/24 dev ens38 proto kernel scope link src 192.168.30.1
#可看出30.0.0.0/8路由已被删除;
⑥ip route get:获得单条路由的详细信息
语法格式:
ip route get TYPE PREFIX
示例:
获取192.168.10.0/24路由信息:
[root@localhost ~]# ip route get 192.168.10.0/16
broadcast 192.168.10.0 dev ens38 src 192.168.10.1
cache <local,brd>
⑦ip route flush:清空路由表
语法格式:
ip route flush TYPE PREFIX
示例:
[root@localhost ~]# ip route flush 192.168.10.0/24 #删除指定路由;
[root@localhost ~]# ip route show
default via 10.10.10.2 dev ens33
10.10.10.0/24 dev ens33 proto kernel scope link src 10.10.10.140
169.254.0.0/16 dev ens33 scope link metric 1002
172.16.0.0/16 dev ens38 scope link src 192.168.10.1
172.16.10.0/24 via 10.10.10.2 dev ens33
192.168.20.0/24 dev ens38 proto kernel scope link src 192.168.20.1
192.168.30.0/24 dev ens38 proto kernel scope link src 192.168.30.1
#指定路由已被删除,功能类似del;