16个配置网络接口的Linux ip命令示例

时间:2020-01-09 10:41:40  来源:igfitidea点击:

ip是一个非常强大的实用程序,用于执行许多任务。
较早使用了多个较早的实用程序,例如ifconfig和route命令来执行这些功能。
在本文中,将介绍不同的示例,以"使用ip命令配置网络接口和路由"。

重要的提示:

使用ip命令执行的所有更改仅适用于当前会话,并且不会永久重启。
我们主要使用此工具在linux resuce模式或者紧急模式下执行临时网络分配,以临时激活网络以传输日志或者访问服务器。

安装iproute rpm

默认情况下,RHEL/CentOS Linux的所有变体上都安装了" iproute" rpm,我们也可以在急救目标中找到" ip"二进制命令。

说明:

在RHEL系统上,我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,通过该本地脱机存储库,yum软件包管理器可以安装提供的rpm及其依赖项。

# yum -y install iproute

绝对路径是/usr/sbin/ip

# which ip
/usr/sbin/ip

另请阅读:

27个nmcli命令示例(备忘单),将nm设置之间的指令与if-cfg文件进行比较

1.使用ip命令显示所有可用接口的IP地址

使用" ip addr show"来显示Linux系统上所有可用网络接口的IP地址

# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:26:91:86 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.20/8 brd 10.255.255.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe26:9186/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:2c:8a:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.115/24 brd 192.168.0.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::d3ff:3740:bf75:74ad/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s9
       valid_lft 1060sec preferred_lft 1060sec
    inet6 fe80::4025:8441:1c30:ebf5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

其中我有3个接口(包括回送接口),其中我们可以检查单个接口的IP地址,如上面突出显示的那样。

2.显示单个接口的IP地址

我们可以将dev参数与ip addr show一起使用,以仅显示所提供接口的信息。
其中我们仅显示" enp0s9"接口的IP地址详细信息。

# ip addr show dev enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s9
       valid_lft 949sec preferred_lft 949sec
    inet6 fe80::4025:8441:1c30:ebf5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

3.根据接口类型列出接口

Linux系统上可以使用各种类型的NIC,例如vlan,bond,bridge,vxlan等。

现在仅列出系统上的网桥接口:

# ip addr show type bridge
11: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:4e:e8:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

从系统列出绑定接口

# ip addr show type bond
10: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 9c:dc:71:76:7c:81 brd ff:ff:ff:ff:ff:ff
    inet 192.151.12.10/26 brd 192.151.12.63 scope global noprefixroute bond1
       valid_lft forever preferred_lft forever

4.检查网卡的链接状态是启用还是禁用

ip link将管理和显示所有网络接口的状态。
显示所有接口的当前状态

# ip 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
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:26:91:86 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:2c:8a:ba brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff

检查单个接口的链接状态

# ip link show dev enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff

5.更改NIC的链接状态

由于我们的NIC接口已经处于启用状态,因此让我们拒绝" enp0s9"接口的链接状态

# ip link set enp0s9 down

再次检查链接状态是否为" enp0s9"

# ip  link show dev enp0s9
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff

现在,由于它处于DOWN状态,让我们将enp0s9的链接状态更改为UP

# ip link set enp0s9 up

再次检查链接状态是否为" enp0s9"

# ip  link show dev enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff

说明:

ip link set ifname命令可将网络接口设置为" IFF_UP"状态,并在内核范围内启用该接口。
这与用于初始化脚本或者设备的NetworkManager激活状态的" ifup ifname"命令不同。
实际上,即使当前断开连接,NetworkManager也会始终设置接口。

6.分配/添加IPv4和IPv6地址

要使用分配ipv4地址,可以使用ip addr add。
为了演示此步骤,我已经从enp0s9接口中临时取消分配/删除了IP地址。

# ip addr add 192.168.56.101/24 dev enp0s9

要使用ip命令分配IPv4地址,我们将需要netmask前缀值,在我看来这是" 24"。
我们可以计算该前缀值,也可以使用其他在线网络计算器来根据网络掩码获取前缀值。

检查为enp0s9接口分配的IPv4地址

# ip addr show enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 scope global enp0s9
       valid_lft forever preferred_lft forever
    inet6 fe80::4025:8441:1c30:ebf5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

要使用ip命令分配IPv6地址,我们可以使用与IPv4地址相同的命令,但要使用IPv6地址和" netmask"

# ip addr add 2001:0001:0001:1443::0411/122 dev eno55

验证分配给提供的接口的IPv6地址

# ip addr show eno55
8: eno55: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid 0100000000000000000000535634393543 state UP qlen 1000
    link/ether 9c:dc:71:77:ef:53 brd ff:ff:ff:ff:ff:ff
    inet6 2001:1:1:1443::411/122 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::b587:e726:85d2:b57a/64 scope link tentative
       valid_lft forever preferred_lft forever

7.取消分配/删除IPv4和IPv6地址

我们可以使用ip addr del参数从接口取消分配或者删除分配的IP地址。
其中我们必须提供确切的IP地址以及前缀值,才能取消分配IP地址。

# ip add del 192.168.56.101/24 dev enp0s9

检查并验证是否已从提供的界面成功取消分配IP地址

# ip addr show enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4025:8441:1c30:ebf5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

我们可以使用与上述IPv4地址相同的命令来取消分配或者删除单个接口的IPv6地址。

# ip addr del 2001:0001:0001:1443::0411/122 dev eno55

接下来,检查接口的IPv6地址,以确保未从提供的接口中分配该接口的IPv6地址。

# ip addr show eno55
8: eno55: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid 0100000000000000000000535634393543 state UP qlen 1000
    link/ether 9c:dc:71:77:ef:53 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b587:e726:85d2:b57a/64 scope link
       valid_lft forever preferred_lft forever

8.从各个接口取消分配/删除所有协议地址

通过使用ip addr del,我们仅删除分配给各个接口的提供的地址。
但是,如果我们希望删除分配给各个接口的所有协议地址,则必须使用" flush"

# ip addr flush dev enp0s9

接下来检查界面细节

# ip addr show dev enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5f:88:6f brd ff:ff:ff:ff:ff:ff

如我们所见,IPv4和IPv6地址均被删除。

9.显示界面的详细统计信息

使用-s参数获取有关单个接口的数据包统计信息的更多详细信息

# ip -s link show dev nm-bridge1
17: nm-bridge1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT qlen 1000
    link/ether 00:17:a4:77:00:44 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    291975556  1468680  0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4360125    30415    0       0       0       0

如果" -s"选项出现两次或者更多次,则信息量会增加。

# ip -s -s link show dev nm-bridge1
17: nm-bridge1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT qlen 1000
    link/ether 00:17:a4:77:00:44 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    291982160  1468785  0       0       0       0
    RX errors: length   crc     frame   fifo    missed
               0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4364175    30434    0       0       0       0
    TX errors: aborted  fifo   window heartbeat transns
               0        0       0       0       2

10.列出可用路线

列出Linux系统上的所有可用路由

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

我们还可以使用ip route或者ip route show获取路由表中的可用路由列表。

11.将默认路由添加到路由表

要添加默认路由(在路由表中添加条目),请使用ip route add default

# ip route add default via  192.168.0.1 dev enp0s8

验证路由表中可用的默认路由

# ip route list
default via 192.168.0.1 dev enp0s8
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

说明:

其中在重新运行命令以添加默认路由之前,我已手动删除了现有路由。
如果我们尝试再次重新添加相同的路由,则该命令将失败,并显示错误RTNETLINK答案:文件存在

与其他路由一样,为默认路由添加更多详细信息

# ip route add default via 192.168.0.1 dev enp0s8 proto static metric 101

使用ip命令再次验证默认路由

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

12.从路由表中删除默认路由

要删除默认路由,请使用delete,而不要使用add。
现在,这里有两条默认路由,我希望其中删除enp0s3接口的10.0.2.2路由。

# ip route list
default via 10.0.2.2 dev enp0s3 proto static metric 100
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

删除默认路由

# ip route delete default via 10.0.2.2

验证路由表中的可用路由

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

我们还可以使用接口名称删除默认路由,以删除映射到提供的接口的所有默认路由

# ip route delete default dev enp0s8

13.将其他路由添加到路由表

现在,在添加默认路由之后,我们还可以将"其他路由"添加到路由表中。
其中我们将通过路由192.168.0.1将一条路由添加到192.168.168.0/24.

# ip route add 192.168.168.0/24 via 192.168.0.1 dev enp0s8

验证路由表中的可用路由

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102
192.168.168.0/24 via 192.168.0.1 dev enp0s8

14.从路由表中删除其他路由

其中我们为192.168.168.0/24通过192.168.0.1添加了一条新路由。
因此我们将尝试在此处删除相同的内容

# ip route delete 192.168.168.0/24 via 192.168.0.1

再次验证路线列表

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102

15.替换路由表中的现有路由

我们还可以从路由表中的现有路由替换某些指令。
在我们的最后一个示例中,我们通过192.168.0.1添加了路由192.168.168.0/24,因此我们将通过另一个接口(enp0s3)通过10.0.2.2网关将其更改为192.168.168.0/24.

我现有的路线列表

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102
192.168.168.0/24 via 192.168.0.1 dev enp0s8

替换路线值

# ip route replace 192.168.168.0/24 via 10.0.2.2 dev enp0s3

验证新的路线列表

# ip route list
default via 192.168.0.1 dev enp0s8 proto static metric 101
10.0.0.0/8 dev enp0s3 proto kernel scope link src 10.0.2.20 metric 100
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.115 metric 101
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.101 metric 102
192.168.168.0/24 via 10.0.2.2 dev enp0s3

16.显示地址将要走的路线

现在我们已经添加了所有路由,但是我们想知道Linux系统上任何地址将采用的路由

知道192.168.168.10地址将使用的路由

# ip route get 192.168.168.10
192.168.168.10 via 10.0.2.2 dev enp0s3 src 10.0.2.20 uid 0
    cache

知道192.168.0.10地址将使用的路由

# ip route get 192.168.0.10
192.168.0.10 dev enp0s8 src 192.168.0.115 uid 0
    cache