您可以使用 Linux 命令动态配置 IP 地址、网络接口和路由规则。我们将向您展示如何使用这种现代替代的经典(现在弃用)。ipifconfig

ip 命令的工作原理
使用 该命令,您可以调整 Linux 计算机处理 IP 地址、网络接口控制器(NIC) 和路由规则的方式。更改也会立即生效 — 您无需重新启动。该命令可以执行更多操作,但我们将重点介绍本文中最常见的用途。ipip
该命令具有许多子命令,每个子命令都适用于一种对象类型,如 IP 地址和路由。反过来,每个对象都有许多选项。正是这种丰富的功能,使命令具有执行精细任务所需的粒度。这不是斧子工作,它需要一套手术刀。ipip
我们将查看以下对象:
- Address:IP 地址和范围。
- Link:网络接口,如有线连接和 Wi-Fi 适配器。
- route:管理通过接口 () 发送到的流量路由的规则。
addresseslinks
将 ip 与地址一起使用
显然,您首先必须了解正在处理的设置。要发现计算机具有的 IP 地址,请使用 该命令与对象。默认操作是 ,它列出 IP 地址。您还可以省略和缩写为"addr",甚至"a"。ipaddressshowshowaddress
以下命令都是等效的:
ip address show
ip addr show
ip addr
ip a

我们看到两个 IP 地址,以及许多其他信息。IP 地址与网络接口控制器 (NIC) 相关联。该命令尝试提供帮助,并提供有关接口的一堆信息。ip
第一个 IP 地址是用于在计算机内通信的(内部)回环地址。第二个是计算机在局域网 (LAN) 上的实际(外部)IP 地址。
让我们细分我们收到的所有信息:
- lo: 网络接口名称作为字符串。
- <LOOPBack,UP,LOWER_UP>:这是一个环回接口。意思是它可操作。物理网络层(第一层)也已上。
UP - mtu 65536:最大传输单元。这是此接口可以传输的最大数据块的大小。
- qdisc noqueue::A 是一种排队机制。它计划数据包的传输。有不同的排队技术称为学科。纪律意味着"立即发送,不要排队"。这是虚拟设备的默认规则,如回环地址。
qdiscnoqueueqdisc - state UNKNOWN:这可以是(网络接口不工作)、(网络接口可操作但未连接任何连接),或者(网络已运行且存在连接)。
DOWNUNKNOWNUP - group default::接口可以逻辑分组。默认值是将它们全部放在称为"默认"的组中。
- qlen 1000:传输队列的最大长度。
- link/loopback:接口的媒体访问控制(MAC) 地址。
- inet 127.0.0.1/8:IP 版本 4 地址。前斜杠 () 后地址的部分是表示子网掩码的无类域间路由符号(CIDR)。它指示子网掩码中有多少前导连续位设置为一个。值 8 表示八位。设置为 1 的 8 位表示二进制中的 255 位,因此子网掩码为 255.0.0.0。
/ - scope host:IP 地址作用域。此 IP 地址仅在计算机("主机")内有效。
- lo:与此 IP 地址关联的接口。
- valid_lft:有效生存期。对于由动态主机配置协议(DHCP) 分配的 IP 版本 4 IP 地址,这是 IP 地址被视为有效并能够发出和接受连接请求的时间长度。
- preferred_lft:首选生存期。对于由 DHCP 分配的 IP 版本 4 IP 地址,这是 IP 地址可以使用的时间量,没有限制。这不应大于该值。
valid_lft - inet6: IP 版本 6 地址 、 和 。
scopevalid_lftpreferred_lft
物理接口更有趣,下面我们将如下所示:
- enp0s3:网络接口名称作为字符串。"en"代表以太网,"p0"是以太网卡的总线号,"s3"是插槽号。
- <BROADCAST,MULTICAST,UP,LOWER_UP>:此接口支持宽和多播,并且该接口是(可操作和连接)。网络(第一层)的硬件层也是。
UPUP - mtu 1500:此接口支持的最大传输单元。
- qdiscfq_codel:计划程序使用的是一门名为"公平排队,受控延迟"的规程。它旨在为使用队列的所有流量流提供公平份额的带宽。
- state UP:接口可操作并连接。
- group default:此接口位于"默认"接口组中。
- qlen 1000:传输队列的最大长度。
- link/ether:接口的 MAC 地址。
- inet 192.168.4.26/24:IP 版本 4 地址。"/24"告诉我们,在子网掩码中,有 24 个连续前导位设置为一个。这是三组八位。八位二进制数等于 255;因此,子网掩码为 255.255.255.0。
- brd 192.168.4.255:此子网的广播地址。
- scope global:此网络上的所有位置的 IP 地址都有效。
- dynamic:当接口关闭时,IP 地址将丢失。
- noprefixroute:添加此 IP 地址时,请勿在路由表中创建路由。如果有人想要使用此 IP 地址的路由,必须手动添加路由。同样,如果删除此 IP 地址,请不要查找要删除的路由。
- enp0s3:与此 IP 地址关联的接口。
- valid_lft:有效生存期。IP 地址将被视为有效的时间;86,240秒是23小时57分钟。
- preferred_lft:首选生存期。IP 地址将不受限制地运行的时间。
- inet6:IP 版本 6 地址 、 和 。
scopevalid_lftpreferred_lft
仅显示 IPv4 或 IPv6 地址
如果要将输出限制为 IP 版本 4 地址,可以使用选项,如下所示:-4
ip -4 addr

如果要将输出限制为 IP 版本 6 地址,可以使用选项,如下所示:-6
ip -6 addr

显示单个界面的信息
如果要查看单个接口的 IP 地址信息,可以使用 和 选项并命名接口,如下所示:showdev
ip addr show dev lo
ip addr show dev enp0s3

您还可以使用 或 标志进一步优化输出,以便只看到您感兴趣的输出。-4-6
如果要查看与接口上的地址相关的 IP 版本 4 信息,键入以下命令:enp0s3
ip -4 addr show dev enp0s3

添加 IP 地址
可以使用 和 选项向接口添加 IP 地址。你只需要告诉要添加哪个 IP 地址的命令,以及要向哪个接口添加它。adddevip
我们将向接口添加 IP 地址 192.168.4.44。我们还必须为子网掩码提供 CIDR 符号。enp0s3
我们键入以下内容:
sudo ip addr add 192.168.4.44/24 dev enp0s3

我们键入以下内容以再次查看此接口上的 IP 版本 4 IP 地址:
ip -4 addr show dev enp0s3

此网络接口上存在新的 IP 地址。我们跳转到另一台计算机,并使用以下命令查看是否可以ping新的 IP 地址:
ping 192.168.4.44

IP 地址响应并向 ping 发送确认。我们的新 IP 地址在一个简单的命令后启动并运行。ip
删除 IP 地址
要删除 IP 地址,该命令几乎与要添加的 IP 地址相同,但替换为 ,如下所示:adddel
sudo ip addr del 192.168.4.44/24 dev enp0s3

如果我们键入以下内容进行检查,我们看到新的 IP 地址已被删除:
ip -4 addr show dev enp0s3

将 ip 与网络接口一起使用
您可以使用 该对象检查和使用网络接口。键入以下命令以查看计算机上安装的接口:link
ip link show

要查看单个网络接口,只需将其名称添加到命令中,如下所示:
ip link show enp0s3

启动和停止链接
您可以将 该选项用于或停止或启动网络接口选项。您还必须使用 ,如下所示:setupdownsudo
sudo ip link set enp0s3 down

我们键入以下内容以查看网络接口:
ip link show enp0s3

网络接口的状态为 。我们可以使用该选项重新启动网络接口,如下所示:DOWNup
sudo ip link set enp0s3 up

我们键入以下内容以对网络接口的状态执行另一个快速检查:
ip link show enp0s3

网络接口已重新启动,状态显示为 。UP
将 ip 与路由一起使用
使用对象,可以检查和操作路由。路由定义到将网络流量转发到不同 IP 地址以及通过网络接口的位置。route
如果目标计算机或设备与发送计算机共享网络,则发送计算机可以直接将数据包转发到该计算机。
但是,如果目标设备未直接连接,发送计算机会将数据包转发到默认路由器。然后,路由器决定将数据包发送到何处。
要查看计算机上定义的路由,请键入以下命令:
ip route

让我们来看看我们收到的信息:
- default:默认规则。如果其他规则与发送的内容不匹配,则使用此路由。
- via 192.168.4.1:通过设备以 192.168.4.1 路由数据包。这是此网络上的默认路由器的 IP 地址。
- dev enp0s3:使用此网络接口将数据包发送到路由器。
- proto dhcp:路由协议标识符。DHCP 表示将动态确定路由。
- metric 100:表示与其他路线相比路线的偏好。与指标较高的路由优先使用具有较低指标的路由。您可以使用它来优先选择有线网络接口而不是 Wi-Fi 接口。
第二个路由控制到 IP 范围 169.254.0.0/16 的流量。这是一个零配置网络,这意味着它尝试为内部网通信进行自我配置。但是,不能使用它在直接网络之外发送数据包。
零配置网络背后的原则是,它们不依赖于 DHCP 和其他服务存在和处于活动状态。他们只需要查看 TCP/IP,以便对网络上的其他每个设备进行自我识别。
让我们来看看:
- 169.254.0.0/16:此路由规则管辖的 IP 地址范围。如果计算机在此 IP 范围内进行通信,则此规则将中断。
- dev enp0s3:此路由管辖的流量将使用的网络接口。
- scope link: 范围为 ,这意味着作用域仅限于此计算机直接连接到的网络。
link - metric 1000: 这是一个高指标,不是首选路由。
第三个路由控制到 IP 地址范围 192.168.4.0/24 的流量。这是此计算机连接到的本地网络的 IP 地址范围。它用于跨网络进行通信,但用于该网络内部的通信。
让我们分解它:
- 192.168.4.1/24:此路由规则管辖的 IP 地址范围。如果计算机在此 IP 范围内通信,则此规则将触发和控制数据包路由。
- dev enp0s3:此路由将发送数据包的接口。
- proto kernel:内核在自动配置期间创建的路由。
- scope link:作用域为 ,这意味着作用域仅限于此计算机连接到的直接网络。
link - src 192.168.4.26:此路由发送的数据包的 IP 地址。
- metric 100:此低指标表示首选路由。
显示单路由的信息
如果要关注特定路由的详细信息,可以将路由的选项和 IP 地址范围添加到命令,如下所示:list
ip route list 192.168.4.0/24

添加路由
我们刚刚向这台计算机添加了一个新的网络接口卡。我们键入以下内容,并将其显示为:enp0s8
ip link show

我们将向计算机添加新路由以使用此新接口。首先,我们键入以下内容以将 IP 地址与接口相关联:
sudo ip addr add 192.168.121.1/24 dev enp0s8

使用现有 IP 地址的默认路由将添加到新接口。我们使用以下选项删除路由并提供其详细信息:delete
sudo ip route delete default via 192.168.4.1 dev enp0s8

现在,我们将使用该选项添加新路由。新接口将在 192.168.121.0/24 IP 地址范围内处理网络流量。我们将给它一个100的指标;因为它将是处理此流量的唯一路由,该指标几乎是学术性的。add
我们键入以下内容:
sudo ip route add 192.168.121.0/24 dev enp0s8 metric 100

现在,我们键入以下内容,看看它给我们什么:
ip route

我们的新路线现在已经到位了。但是,我们仍然有指向接口的 192.168.4.0/24 路由 — 我们键入以下内容以将其删除:enp0s8
sudo ip route delete 192.168.4.0/24 dev enp0s8

我们现在应该有一个新的路由,通过接口将所有发送到 IP 范围的流量点 192.168.121.0/24。它也应该是使用我们新接口的唯一路由。enp0s8
我们键入以下内容以确认:
ip route

已获取路由,未获取根目录
这些命令的伟大之处在于它们不是永久性的。如果要清除它们,只需重新启动系统。这意味着您可以尝试它们,直到它们按照您想要的方式工作。如果你把系统搞得一团糟,这是一件非常好的事情——简单的重启将恢复秩序。
另一方面,如果您希望更改是永久性的,您必须做更多的工作。具体内容因分发系列而异,但它们都涉及更改配置文件。
但是,这样,在使任何内容永久化之前,可以测试驱动器命令。