16个配置网络接口的Linux ip命令示例
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