linux网络管理:ip指令

关于IP cmd

ip命令整合了ifconfigroute两个命令。

另外ifup,ifdown就是利用ip命令来完成工作的。

安装IP cmd

1
2
3
4
5
6
7
[root@vagrant ~]# yum provides ip
Last metadata expiration check: 1:29:26 ago on Wed 29 May 2024 09:11:03 AM CST.
iproute-5.15.0-2.2.0.1.el9_0.x86_64 : Advanced IP routing and network device configuration tools
Repo : ol9_baseos_latest
Matched from:
Provide : /sbin/ip
Filename : /usr/sbin/ip

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@vagrant ~]# ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
where OBJECT := { address | addrlabel | amt | fou | help | ila | ioam | l2tp |
link | macsec | maddress | monitor | mptcp | mroute | mrule |
neighbor | neighbour | netconf | netns | nexthop | ntable |
ntbl | route | rule | sr | tap | tcpmetrics |
token | tunnel | tuntap | vrf | xfrm }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec | -j[son] | -p[retty] |
-f[amily] { inet | inet6 | mpls | bridge | link } |
-4 | -6 | -M | -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 | -N[umeric] | -a[ll] |
-c[olor]}
[root@vagrant ~]#

ip link

语法

ip link可以对设备参数进行配置,包括MTU以及该网口的MAC等等,另外也可以启动关闭某个网口。

1
2
ip [-s] link show [device]
ip link set [device] [动作和参数]

动作和参数包含:

  • up|down:启动和关闭某个接口
  • address:如果支持修改MAC,则使用此参数修改
  • name:修改设备名称
  • mtu:修改MTU

链路状态

1
2
3
4
5
6
7
8
9
10
# 查询系统中的所有可用网络接口
[root@vagrant ~]# ip link [show ens192]
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
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:50:56:bf:18:da brd ff:ff:ff:ff:ff:ff
altname enp11s0
3: vboxnet0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
[root@vagrant ~]#
  • lo:环回接口

  • 要正确配置每个网络接口,你需要知道哪个接口连接到哪个网络.

  • link/ether后面为MAC地址

链路统计信息

ip命令可以显示有关网络性能的统计信息,每个网络接口的计数器可用于识别网络问题。

计数器记录的统计信息包括:RX收到,TX发出的数据包数量,数据包错误数量,丢失的数据包数量

加上-s参数后,会显示相关统计信息,RX接受,TX发送,与ifconfig所输出结果相同。

1
2
3
4
5
6
7
8
[root@vagrant ~]# ip -s link show ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:50:56:bf:18:da brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
37892609172 72207336 0 573 0 698794
TX: bytes packets errors dropped carrier collsns
133341842542 10940279 0 0 0 0
altname enp11s0

格式化输出

1
2
3
4
[root@vagrant ~]# ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
ens192 UP 00:50:56:bf:18:da <BROADCAST,MULTICAST,UP,LOWER_UP>
vboxnet0 DOWN 0a:00:27:00:00:00 <NO-CARRIER,BROADCAST,MULTICAST,UP>

启动和关闭接口

1
2
3
4
5
# 启用
ip link set eth0 up

# 关闭
ip link set eth0 down

修改接口MTU

1
ip link set eth0 mtu 9000

修改接口名称,MAC等信息

更新网卡的MTU使用ifconfig也可以,但如果要更改代号,MAC地址信息,则只能通过ip link set来完成。

修改之前需要先关闭接口。

1
2
3
ip link set eth0 down
ip link set eth0 name eth99
ip link set eth0 address xx:xx:xx:xx:xx:xx

创建VLAN子接口

1
2
# 在eth0接口下创建一个eth0.10的子接口,其vlan id为10
ip link add link eth0 name eth0.10 type vlan id 10

启用接口混杂模式

1
ip link set eth0 promisc on

ip address

语法

如果说ip link与OSI的第二层有关的话,那么ip address就与第三层有关。

1
2
ip address [show ens192]
ip address [add|del] [IP参数] [device_name] [相关参数]
  • IP地址参数

    • 192.168.1.1/24
    • 192.168.1.0/24
  • device_name

    指定接口名称

  • 相关参数

    • broadcast:指定广播地址,如果值为+则表示让系统自动计算
    • label:设备别名,例如eth0:1
    • scope:领域
      • global:允许来自所有来源的连接,默认值。
      • site:仅支持IPv6,仅允许本主机的连接
      • link:仅允许该设备自我连接
      • host:仅允许本主机内部的连接

查看网络地址信息

1
2
3
4
5
6
7
8
9
[root@vagrant ~]# ip address show ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:bf:18:da brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 10.10.10.131/25 brd 10.10.10.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:febf:18da/64 scope link
valid_lft forever preferred_lft forever
[root@vagrant ~]#
  • <BROADCAST,MULTICAST,UP,LOWER_UP>中的up表示接口up

  • link/ether 00:50:56:af:27:a3MAC地址

  • inet行显示IPv4信息,广播地址,作用域为ens192接口

  • inet6显示IPv6信息,作用域等。inet6如果显示使用的地址为本地链路地址,则只能用于本地以太网络链路上的通信。

    valid_lft forever preferred_lft forever 永远有效

新增一个虚拟接口

也就是在一个接口上配置多个地址:

1
2
ip address add 172.16.110.66/24 broadcast + dev eth0 label eth0:test
# 上面的broadcast + 也可以写成broadcast 172.16.110.255

删除虚拟接口

1
ip address del 172.16.110.66/24 dev eth0

ip route

ip route的功能几乎与route命令差不多,但ip route可以进行额外的参数设置,例如MTU规划等。

语法

1
2
ip route [show | list}
ip route [add | del] [IP地址或网段] [via gateway] [device_name]

查看路由表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 默认输出为IPv4路由表信息
[root@vagrant ~]# ip route
default via 10.10.10.1 dev ens192 proto static metric 100
10.10.10.1 dev ens192 proto static scope link metric 100
10.10.10.128/25 dev ens192 proto kernel scope link src 10.10.10.131 metric 100
192.168.56.0/24 dev vboxnet0 proto kernel scope link src 192.168.56.1 linkdown
[root@vagrant ~]#
# 格式化输出
[root@vagrant ~]# ip route list | column -t
default via 10.10.10.1 dev ens192 proto static metric 100
10.10.10.1 dev ens192 proto static scope link metric 100
10.10.10.128/25 dev ens192 proto kernel scope link src 10.10.10.131 metric 100
192.168.56.0/24 dev vboxnet0 proto kernel scope link src 192.168.56.1 linkdown

# IPv6路由表
[root@vagrant ~]# ip -6 route
::1 dev lo proto kernel metric 256 pref medium
fe80::/64 dev vboxnet0 proto kernel metric 256 linkdown pref medium
fe80::/64 dev ens192 proto kernel metric 256 pref medium
[root@vagrant ~]#

# ::1环回地址使用lo接口
# fe80::/64网络,使用ens192接口,适用于本地链路地址。在具有多个接口的系统中,每个本地链路地址的每个接口都有一个指向fe80::/64的路由

# IPv6的默认路由信息会类似于下面这样:
# default via xxxx:xxxx:0:1::fffff dev ens 3 …
# 这表示为一个默认路由,当没有其他IPv6路由信息时,指向::/0(所有网络)的信息,经过xxxx:xxxx:0:1::ffff的路由器,使用ens3接口来访问。

  • proto:指明该路由的路由协议,主要有redirect,kernel,boot,static,ra等,其中kernel指的是直接由内核判断自动生成的。
  • scope:路由的范围,主要是link,也就是与该接口有关的直接连接

增加路由

1
2
3
4
5
6
7
8
# 增加直连路由,主要是本地直连的网络
ip route add 192.168.1.0/24 dev eth0

# 增加外部路由,即可以通往外部的路由,需要透过router
ip route add 192.168.1.0/24 via 192.168.2.254 dev eth0

# 添加默认路由
ip route add default via 192.168.1.254 dev eth0

删除路由

1
2
ip route del 192.168.10.0/24
ip route del 192.168.6.0/24

ip neigh

语法

1
2
3
4
5
6
7
8
9
10
11
12
[root@vagrant ~]# ip neigh help
Usage: ip neigh { add | del | change | replace }
{ ADDR [ lladdr LLADDR ] [ nud STATE ] proxy ADDR }
[ dev DEV ] [ router ] [ use ] [ managed ] [ extern_learn ]
[ protocol PROTO ]

ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]
[ vrf NAME ] [ nomaster ]
ip neigh get { ADDR | proxy ADDR } dev DEV

STATE := { delay | failed | incomplete | noarp | none |
permanent | probe | reachable | stale }

查看arp条目

1
2
[root@vagrant ~]# ip neigh show
10.10.10.1 dev ens192 lladdr 9c:3a:9a:07:98:ff REACHABLE

删除arp条目

1
ip neigh del 192.168.11.1 dev ens192