在Linux系统中,ip
命令是一个强大的工具,可以用来即时配置IP地址、网络接口以及路由规则。本文将介绍如何使用这个现代化的替代工具,它取代了传统且现已废弃的 ifconfig
命令。
ip
命令的工作原理
ip
命令允许您精细地调整Linux计算机处理IP地址的方式,管理网络接口控制器 (NIC),以及设定路由规则。这些更改会立即生效,无需重启系统。ip
命令的功能远不止这些,但本文将重点介绍其最常见的用途。
ip
命令包含多个子命令,每个子命令针对一个特定的对象,例如IP地址或路由。这些对象又各自拥有多种选项。正是这种丰富的功能,使得 ip
命令可以执行细粒度的任务。它不是一把大斧头,而是一套精细的手术刀工具。
我们将重点关注以下对象:
- 地址:IP地址及其范围。
- 链接:网络接口,如以太网连接和Wi-Fi适配器。
- 路由:管理数据包通过接口(链接)发送到目标的规则。
ip
命令与地址对象的使用
首先,了解当前的网络设置至关重要。要查看计算机上的IP地址,可以使用带有 address
对象的 ip
命令。默认操作是显示信息,这将列出所有IP地址。您可以省略 show
操作,或者将 address
缩写为 addr
甚至 a
。
以下命令是等效的:
ip address show
ip addr show
ip addr
ip a
从输出中,我们可以看到两个IP地址以及其他详细信息。每个IP地址都与一个网络接口控制器(NIC)相关联。ip
命令会尽可能提供有关接口的详细信息。
第一个IP地址是用于计算机内部通信的回环地址。第二个是计算机在局域网(LAN)上的实际外部IP地址。
下面详细解读一下输出信息:
lo
: 网络接口名称,字符串形式。
: 这是一个回环接口。它处于UP状态,表示其已启动并运行。 物理网络层 (第一层) 也处于活动状态。mtu 65536
: 最大传输单元。指此接口可以传输的最大数据包大小。qdisc noqueue
: qdisc是一种排队机制,用于调度数据包的传输。不同的排队技术被称为学科。noqueue
学科表示“立即发送,不进行排队”。这是虚拟设备(如回环地址)的默认qdisc规则。状态 UNKNOWN
:状态可以是DOWN
(网络接口未运行)、UNKNOWN
(网络接口可运行但未连接任何设备)或UP
(网络可运行且已连接)。group default
: 接口可以进行逻辑分组。默认情况下,所有接口都被放置在一个名为“default”的组中。qlen 1000
: 传输队列的最大长度。link/loopback
: 媒体访问控制 (MAC) 地址。inet 127.0.0.1/8
: IP版本4地址。斜杠 (/) 后面的数字使用无类别域间路由 (CIDR) 表示法表示子网掩码。它指示子网掩码中前导连续设置为1的位数。8表示子网掩码有8位设置为1,即二进制的255,因此子网掩码为255.0.0.0。范围主机
: IP地址的范围。此IP地址仅在计算机(“主机”)内部有效。lo
: 与此IP地址关联的接口。valid_lft
: 有效生命周期。对于通过动态主机配置协议 (DHCP) 分配的IP版本4地址,这是IP地址被视为有效且可以发出和接受连接请求的时间长度。preferred_lft
: 首选生命周期。对于DHCP分配的IP版本4地址,这是可以不受限制地使用IP地址的时间量。它不应大于valid_lft
值。inet6
: IP版本6地址、范围、valid_lft
和preferred_lft
。
物理接口的信息通常更有趣,如下所示:
enp0s3
:网络接口名称,字符串形式。“en”代表以太网,“p0”是网卡的总线号,“s3”是插槽号。
:该接口支持广播和多播。接口状态为UP,表示可操作且已连接。网络的硬件层(第一层)也处于UP状态。mtu 1500
:此接口支持的最大传输单元。qdisc fq_codel
: 调度程序正在使用一种称为“公平排队,受控延迟”的规则。它旨在为使用队列的所有流量提供公平的带宽份额。状态 UP
:接口可操作且已连接。group default
:此接口属于“default”接口组。qlen 1000
:传输队列的最大长度。link/ether
:接口的MAC地址。inet 192.168.4.26/24
:IP版本4地址。“/24”表示子网掩码中有24个连续的前导位设置为1。这意味着有三组8位。一个8位二进制数等于255,因此子网掩码为255.255.255.0。brd 192.168.4.255
:此子网的广播地址。范围全局
:IP地址在整个网络中都有效。dynamic
:如果接口关闭,IP地址将丢失。noprefixroute
:添加此IP地址时,不要在路由表中创建路由。如果有人想使用此IP地址进行路由,必须手动添加。同样,如果删除此IP地址,请不要寻找要删除的路由。enp0s3
:与此IP地址关联的接口。valid_lft
:有效生命周期。IP地址被视为有效的时间,86,240秒等于23小时57分钟。preferred_lft
:首选生命周期。IP地址可以无限制使用的时间长度。inet6
:IP版本6地址、范围、valid_lft
和preferred_lft
。
仅显示IPv4或IPv6地址
如果需要将输出限制为IP版本4地址,可以使用 -4
选项,如下所示:
ip -4 addr
要将输出限制为IP版本6地址,可以使用 -6
选项:
ip -6 addr
显示单个接口的信息
若要查看单个接口的IP地址信息,可以使用 show
和 dev
选项,并指定接口名称,如下所示:
ip addr show dev lo
ip addr show dev enp0s3
您可以使用 -4
或 -6
标志进一步筛选输出,以仅显示感兴趣的内容。
例如,要查看接口 enp0s3
上的IP版本4信息,可以输入以下命令:
ip -4 addr show dev enp0s3
添加IP地址
您可以使用 add
和 dev
选项为接口添加IP地址。您只需指定要添加的IP地址以及要添加到的接口。
例如,我们将IP地址 192.168.4.44
添加到 enp0s3
接口,同时需要指定子网掩码的CIDR表示法。
输入以下命令:
sudo ip addr add 192.168.4.44/24 dev enp0s3
再次查看此接口上的IP版本4地址:
ip -4 addr show dev enp0s3
可以看到,新的IP地址已添加到网络接口。我们可以在另一台计算机上通过 ping
命令测试该IP地址是否可以响应:
ping 192.168.4.44
新的IP地址成功响应了ping请求。通过简单的 ip
命令,新的IP地址即可正常工作。
删除IP地址
删除IP地址的命令与添加的命令类似,只需将 add
替换为 del
:
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
启动和停止链接
可以使用带有 up
或 down
选项的 set
操作来启动或停止网络接口。您需要使用 sudo
,如下所示:
sudo ip link set enp0s3 down
查看网络接口状态:
ip link show enp0s3
网络接口的状态为 DOWN
。使用 up
选项可以重新启动网络接口:
sudo ip link set enp0s3 up
再次快速检查网络接口的状态:
ip link show enp0s3
网络接口已重新启动,状态为 UP
。
ip
命令与路由的使用
使用 route
对象,可以查看和操作路由。路由定义了网络流量如何转发到不同的IP地址,以及通过哪个网络接口。
如果目标计算机或设备与发送计算机共享网络,则发送计算机可以将数据包直接转发给它。
如果目标设备未直接连接,则发送计算机会将数据包转发到默认路由器。然后,路由器决定将数据包发送到哪里。
要查看计算机上定义的路由,输入以下命令:
ip route
以下是输出信息的解读:
default
: 默认路由规则。如果没有其他规则匹配发送的数据,则会使用此路由。via 192.168.4.1
: 数据包通过IP地址为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
:此路由管理的流量将使用的网络接口。范围链接
:范围是链接,这意味着范围仅限于本地直接连接的网络。metric 1000
:这是一个高指标,不是首选路由。
第三条路由管理发往IP地址范围 192.168.4.0/24
的流量。这是此计算机连接的局域网的IP地址范围。它用于在该网络之间以及网络内部进行通信。
详细信息:
192.168.4.1/24
:此路由规则管辖的IP地址范围。如果计算机在此IP范围内进行通信,则此规则将触发并控制数据包路由。dev enp0s3
:此路由用于发送数据包的接口。proto kernel
:内核在自动配置时创建的路由。范围链接
:范围是链接,这意味着范围仅限于此计算机连接的直接网络。src 192.168.4.26
: 此路由发送的数据包源自的IP地址。metric 100
:低指标表示这是一个首选路由。
显示单个路由的信息
如果想要查看特定路由的详细信息,可以在命令中添加 list
选项和路由的IP地址范围:
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
现在使用 add
选项添加新路由。新接口将处理发往IP地址范围 192.168.121.0/24
的网络流量。设置指标为100;因为这将是处理此流量的唯一路由,所以该指标并不重要。
输入以下命令:
sudo ip route add 192.168.121.0/24 dev enp0s8 metric 100
查看当前路由设置:
ip route
新路由已生效。但仍然有一条指向接口 enp0s8
的 192.168.4.0/24
路由,使用以下命令将其删除:
sudo ip route delete 192.168.4.0/24 dev enp0s8
现在应该有一条新路由,将所有发往IP地址范围 192.168.121.0/24
的流量通过接口 enp0s8
发送。并且这条路由应该是唯一使用我们新接口的路由。
使用以下命令进行验证:
ip route
临时修改,无需永久化
这些命令的一个优点是,它们不会永久生效。要清除这些更改,只需重新启动系统即可。这意味着您可以在测试这些命令,直到它们按照预期工作。如果你把系统搞乱了,也没关系,简单的重启就能恢复正常。
另一方面,如果需要永久生效,则需要进行更多操作。这取决于具体的发行版本,通常涉及修改配置文件。
总之,这种方式允许你在永久化修改之前先进行命令的测试。